新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机的中断,有些乱

51单片机的中断,有些乱

作者: 时间:2016-11-24 来源:网络 收藏
几个与中断有关的寄存器:
1. TCON:中断标志寄存器,内容为
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
2. SCON:串行口控制寄存器,内容为
SM0 SM1 SM2 REN TB8 RB8 TI RI
TI:发送数据前应复位,发完一帧数据时,由硬件置位。
RI:接收中断标志,与TI类似
中断响应后,RI和TI不能自动清除,须由软件来清除。
IT0,1:外部中断的触发方式,=1时为下降沿有效
IE0,1:外部中断中断请求标志位
TF0,1:定时器溢出中断请求
3. IP:中断优先级控制寄存器
自然优先级的排列顺序(由高到低):外部中断0(INT0)、定时器T0、外部中断1(INT1)、定时器T1、串口中断。
寄存器内容(D7、D6未用):PT2 PS PT1 PX1 PT0 PX0
PT2:定时器T2(52系列 单片机才有T2)的优先级控制位,=1时,设定T2为高优先级,=0时为低优先级;
PS:串口的优先级控制位;
PT1:定时器T1的优先级控制位;
PX1:外部中断1的优先级控制位;
PT0:定时器T0的;
PX0:外部中断0的。
如果同时有几个设定为高优先级的,则按照自解优先级的顺序排队。
4. IE:中断允许控制寄存器
其内容:EA 空 ET2 ES ET1 EX1 ET0 EX0
EA: CPU中断的总允许位,=1时开放中断,=0时屏蔽所有中断,即俗称的关中断;
ES: 串口中断允许位,=1时允许;
ET1:T1的
EX1:外部中断1的
ET0:T0的
EX0:外部中断0的
采用中断处理的程序结构:
main()
....
设置 中断允许控制寄器IE
设置 中断优先级寄存器IP
如果是外部中断源,还要设置中断请求的触发方式IT0或IT1(在TCON中),以决定采用 电平触发还是跳变触发
....
中断服务程序(对照前面的定时器处理程序就明白了。。。)
函数类型 函数名(参数表) [ interrupt中断号] [using N]
{
....
}
中断号可以取值0-31(C51编译器允许32个中断,0-4为51的标准中断源,0外部中断0,1是定时器0,2是外部中断1,3是
定时器1,4是串口中断)using后的N表示第N组寄存器(8051有4组寄存器)。以下是有关寄存器组的问题:
1. 使用using指定与主函数不同的寄存器组(主函数一般使用寄存器组0);
2. 中断优先级相同的中断处理函数(ISR)可用using指定相同的寄存器组(因为它们不会同时被调用),但优先级不
同的ISR必须使用不同的寄存器组,在ISR中被调用的函数也要使用using指定与中断函数相同的寄存器组;
3. 如果不用using,C51默认选择寄存器组0,这意味着程序将切换寄存器组,而要使用大量的PUSH和POP操作,指定寄
存器组的结果是节省了以上保护现场的操作,可以节省RAM空间及减少MCU的消耗;但这样容易引起错误,一定要注意
,特别是在程序中进行直接内存访问时。
4. 可以这样设定:主程序使用bank 0,低中断优先级的所有中断使用bank 1,高中断优先级的所有中断使用bank 2。


评论


技术专区

关闭