访问电脑版页面

导航:老古开发网手机版51单片机51单片机Keil C51编程

keil51的中断处理过程

导读:中断函数注意如下:(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类
关键字:
keil51,中断处理,

中断函数注意如下:
(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。
(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。
(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。
(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
(6)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。

void IsrTimer0(void) interrupt [n] n为中断号,编译器将n*8+3=中断(入口)向量地址

也就是说:

中断号 中断名 中断向量地址

0 INT 0(外部中断0) 0003H

1 TIMER/COUNTER 0(定时/计数器0) 000BH

2 INT 1(外部中断1) 0013H

3 TIMER/COUNTER 1(定时/计数器1) 001BH

4 SERIAL PORT(串口中断) 0023H

5 TIMER/COUNTER 2(定时/计数器2) 002BH

外注: 上电复位 0000H


(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。


来源:互联网   作者:karen  2018/8/23 12:20:02
栏目: [ 51单片机Keil C51编程]

相关阅读

几种码制转换 BCD TO HEX,HEX TO BCD ,BIN TO HEX

让Ultra Edit和Keil结合的更紧密

在Keil c51调试中,如何查看外部存储器XDATA?

在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

Keil C51中如何实现代码优化?

C51中 INT 转换为 2个CHAR?

Keil C51编译错误总结

proteus与keil的完美结合(没有开发板,让你也学的爽!)

C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)

[转载]C51中断处理过程

那位大虾能告诉我C51 的printf()函数有什么用?

keil 7.0编译出现:error C316: unterminated conditionals

51单片机CO2检测显示程序解析

在Keil c51调试中,如何查看特殊寄存器?

volatile的用法

Keil C51单片机中变量的使用方法解析

在Keil c51调试中,如何查看全部256bytes的内部RAM?

MCS51单片机程序设计时堆栈的计算方法解析

SBUF=0x65,c=SBUF结果为c=0???

keil C51 怎样把修改的startup.a51 加到工程文件中