nterrupt 和 using 在C51中断中的使用】的更多相关文章

8051系列MCU的基本结构包括:32个I/O口(4 组8bit 端口):两个16位定时计数器:全双工串行通信:6个中断源(2个外部中断.2个定时/计数器中断.1个串口输入/输出中断),两级中断优先级:128字节内置RAM:独立的64K 字节可寻址数据和代码区.中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序.中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量.8051的中断向量表如下: 中断源…
1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz.12 MHz或6 MHz晶振.第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时.本程序中假设使用频率为12 MHz的晶振.最长的延时时间可达216=65 536 μs.若定时器工作在方式2,则可实现极短时间的精确延时:如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期). 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间…
2410中断中SRCPND和INTPND清零的疑问SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理,于是我们可以有一个总结:SRCP…
在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间.C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定.为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”.指针.预定义以及连接定位控制命令. 在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定.一般格式如下: [存储器类型] 数据类型 标识符 _at_ 地址常数 其中:存储器类型…
C51根据单片机的特性扩展了相关的关键字,如下表示: 关键词 用途 说明 bit 位变量声明 声明了一个位变量或者位类型的函数 sbit 位变量声明 声明了一个可位寻址变量 sfr 特殊功能寄存器声明 声明一个特殊功能寄存器 sfr16 特殊功能寄存器声明 声明一个16位的特殊功能寄存器 data 存储器类型说明 直接寻址的内部数据存储器 bdata 存储器类型说明 可位寻址的内部数据存储器 idata 存储器类型说明 间接寻址的内部数据存储器 pdata 存储器类型说明 分页寻址的内部数据存储…
C51单片机中data.idata.xdata.pdata的区别 data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. idata: 固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同.idata是用类似C中的指针方式访问的.汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata: 外部扩展RAM,一般指外部0x0000-0xff…
模块内接口:使用如下标志符:#pragma asm汇编语句#pragma endasm注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的“Generate Assembler SRC File” 和“Assembler SRC File ”两个选项1.把"xx.c"加入工程中,右击"xx.c"选择“options for file"xx.c" 选择“Generate Assembler SRC File…
1.Cortex-M3 的PSP和MSP 曾经在STM32上使用过RT thread和uC/OS,对于任务切换代码一直是一知半解,没有自己手动写出来过,对于任务切换后的ORR   LR, LR, #0x04; Ensure exception return uses process stack也不是很理解,一次偶然的机会,遇到网上有人问这个问题,才去深入研究一下.Cortex‐M3 拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个: 主堆栈指针(MSP):复位后缺省使用的…
转自:http://blog.csdn.net/psvoldemort/article/details/8222371 1,中断处理程序中不能使用有睡眠功能的函数,如ioremap,kmalloc,msleep等,理由是中断程序并不是进程,没有进程的概念,因此就没有休眠的概念: 2,中断处理程序中的延时可以用忙等待函数来代替,如ndelay,udelay,mdelay等,这些函数在实现上本质是根据CPU频率进行一定次数的循环:最好不要使用mdelay,因为毫秒延时对内核来说已经是非常大了.但是在…
总架构图 IE寄存器 控制各个中断源的屏蔽与允许 TCON寄存器 各个中断源的请求标志位&有效信号的规定 中断源及其优先级 中断号写程序的时候要用 CPU处理中断三原则 1.CPU同时接收到几个中断时,首先响应优先级别最高的中断请求. 2.正在进行的中断过程不能被新的同级或低优先级的中断请求所中断. 3.正在进行的低优先级中断服务,能被高优先级中断请求所中断. 中断响应条件 中断源有中断请求: 此中断源的中断允许位为1: CPU开中断(即EA=1). 代码写法 main函数中: //以外部中断0…