keil51的中断处理过程

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存储类型说明。防止其它程序调用。

 

参考资料:

http://hi.baidu.com/xing_yufei/blog/item/eddc311804e4c3a84bedbce4.html

转载于:https://www.cnblogs.com/proteus/archive/2011/11/08/2241758.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值