1.单片机在系统复位或者上电之后,会在执行main()函数之前先执行一小段由maplab c32连接器自动插入的初始化程序,即所谓的starup(启动)代码或者crt0()代码。启动代码负责基本的内务操作,包括栈的所有重要初始化等。
2.随便调用一个库函数,比如printf(),就可能增加数千字节的执行代码,所以要慎用库函数。
3.crt0代码负责在主程序运行之前,将定义在flash里的数组内容,从flash到RAM里,crt0另一个重要的功能是将程序声明的每个全局变量初始化为0,这会使程序更加安全并且容易预测,但这是有代价的。如果ram中要存放一个很大的数组,那么即使你没有要求初始化他们,crt0代码也会花一段时间将他们清零,然后才会执行主程序。然而嵌入式应用是不允许这种延时的。在这些应用中,数毫秒都可能使一枚昂贵的功率MOSFET损坏,或者能迅速而安全的使你的应用系统从紧急复位状态恢复过来。在这些特殊的情况中,就得定义特殊函数_on_reset():
void _on_reset(void)
{
//your code
}
该函数将代替crt0代码在开始初始化前调用的一段空白的程序空间。这段程序应该尽量的短。
4.const修饰的变量保存在flash(program)中,而一般的的变量保存在ram中,启动代码执行完毕后,才能初始化并且可用。
5.RS232接口允许的波特率范围是正负2%。
6.按键去抖代码(以explore16开发板为模型,四个按键_RD6,_RD7,_RA7,_RD13)
检测输入信号
int reak(void)
{
int c=0;
if(!_RD6)
c |=8;
if(!_RD7)
c |=4;
if(!_RA7)
c |=2;
if(!_Rd13)
c |=1;
return c;
}
按下去抖:
int getK(void)
{
int i=0,r=0,j=0;
int c;
do{
Dleayms(10);
if(c==readkey())
{
if(c>r)
r=c;
i++;
}
else
i =0;
}
while(i<10);
}
关键字:32位 单片机 c语言 编程笔记
引用地址:
32位单片机c语言编程笔记
推荐阅读最新更新时间:2024-03-16 14:53
51单片机频率计Proteus仿真设计(带程序电路)
Proteus仿真电路图如下:(下载仿真文件后有清晰图) 有 电路图 和程序,电路是isis的,程序是uv3的, 仿真 工程文件下载: http://www.51hei.com/f/dgnplj.rar 下面是程序源代码: #include AT89x52.h #include stdio.h #include intrins.h //端口定义 sbit LCDRS = P3^5; sbit LCDRW = P3^6; sbit LCDEN = P3^7; sbit LCDBF = P2^7; #define DBPORT P2 #define DIS_CURS_OFF 0x0c #define LCD_C
[单片机]
基于SE8510的MCU的供电问题解决方案
1.基于SE8510的反激式隔离电源设计 图1是SE8510反激式隔离电源系统原理图,SE8510是离线式隔离原边控制反激LED驱动控制IC.SE8510使用了一个坚固的高压隔离工艺能够承受一个输入电压达450 v的冲击,具有8-450V的宽输入电压范围。因此SE8510可以通过主线输入电压直接驱动,简化变压器的设计过程。具有准确的LED调节功能,PWM调节控制,开短路保护,过温保护等多功能。使整体应用设计比以往的方案设计变的更加简单。 图1:SE8510反激式隔离电路图 2.支持PWM调节输出电流,改变LED亮度 PWM调光通过PIN DIM加一个低频方波信号就可以实现。当PWM信号为零,门
[单片机]
AT89S系列单片机ISP方案解析
1. ISP简 述 从事单片机设计和开发的技术人员目前一般采用以下常用的方法开发单片机产品:首先利用单片机仿真设备进行硬件和软件的仿真调试,然后将调试通过的目标代码用程序烧写器固化到单片机的程序存储器中。在这个过程中,程序烧写器是必不可少的开发工具。程序烧写器一般价格较昂贵,对于初学者来说是一笔不小的开支,并将直接影响到初学者进一步学习开发单片机的积极性。另外,以后每修改一次源程序就要将单片机芯片从目标板上取出,再将更新后的目标代码重新固化到单片机芯片中,这样调试时就会由于频繁地插拔单片机芯片而对芯片和电路板带来相应的物理损坏。借助程序烧写器进行单片机编程的缺点是烧写设备昂贵,烧写操作麻烦,不便于实现在系统编程(ISP)。
[单片机]
基于C8051F310单片机的LED灯控制器汇编语言程序调试
加 深对51单片机及其接口电路的理解,掌握定时/计数器、中断的应用编程技术及程序的调试方法。 2.实验内容 利用C8051F310单片机设计一个倒计时定时器,功能要求如下: 模式1:基本功能 主要技术指标要求如下: 1. 定时时间为9秒,定时精度为1秒 。 2. 在LED数码管上显示剩余时间。 3. 时间到0时,蜂鸣器鸣响1次(0.5秒钟)。 4. 通过KINT键实现启动和暂停功能,暂停时D9灯亮。 5. 利用单片机内部定时器定时,KINT键输入和定时器控制均要求采用中断方式。 模式2:提高要求 1. 定时时间可通过键盘设定,最大为200秒。 2. 其它个性化设计。 二、设计思路 1.给主程序,T0、T1中断和外部KINT键
[单片机]
电源意外关闭时MCU能否继续完成相应操作
对于主电源掉电后需要继续工作一段时间来用于数据保存或者发出报警的产品,我们往往都能够看见产品PCB板上有大电容甚至是超级电容器的身影。大容量的电容虽然能延时系统掉电,使得系统在电源意外关闭时MCU能继续完成相应操作,而如果此时重新上电,却经常遇到系统无法启动的问题。那么这到底是怎么回事呢?遇到这种情况又该如何处理呢? 一、上电失败问题分析 1. 上电缓慢引起的启动失败 对于需要进行掉电保存或者掉电报警功能的产品,利用大容量电容缓慢放电的特性来实现这一功能往往是很多工程师的选择,以便系统在外部电源掉电的情况下,依靠电容的储能来维持系统需要的重要数据保存及安全关闭的时间。此外,在不需要掉电保存数据的系统中,为了防止电源纹波
[电源管理]
用单片机做电风扇简易定时控制器
自己的床头风扇的机械定时器坏掉了,准备51单片机给设计了一个.程序在实验板初步调试通过,等待元件寄到就可以做板子了,只是有点浪费单片机的资源。 一,设计思路: 开始通过手动键给单片机供电。直到电源指示灯LED4亮.单片机运行,继电器2工作给单片机供电。通过按键设置继电器2的工作时间,实现系统的自动断电,通过设置继电器1的工作时间,实现风扇的间歇转动,实现节能。 1.显示部分:通过按键,在风扇转动时间,暂停时间,和系统关闭剩余时间切换显示。数码显示两位,为“分”走时,其中系统关闭剩余时间为“小时”走时,LED为红,黄,蓝,分别点亮对应的风扇转动,暂停,和系统关闭剩余时间的状态。 2.按键部分: lK1为时间调整移位键,按下
[单片机]
51 单片机的定时器中断寄存器
中断是为使单片机具有对外部或内部随机发生的事件进行处理而设置的。51单片机有5种中断源,即有5种对应的情况发生时会使单片机去处理中断程序(中断函数)。 此篇主要整理定时器中断笔记。采用定时器中断会涉及中断寄存器,定时器/计数器相关寄存器(TCON,TMOD),中断函数等知识点。 其中,中断寄存器,定时器/计数器相关寄存器本身或者相关位用来做初始化,中断函数的内容主要是体现发生中断后所需要的操作(在中断函数内写代码)。 1.中断允许寄存器IE 图1.中断寄存器IE 中断寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H~AFH,该寄存器运行位寻址
[单片机]
基于AVR单片机的嵌入式系统的应用分析
引言 随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式,在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。 AVR微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集
[单片机]