我们首先需要了解什么是中断?
中断是指CPU在执行某一过程中由于外界原因必须暂停现在的事情,处理别的事情,处理完了再回去执行暂停的事情。
中断的优点?
1.分时操作。
2.实时响应
3.可靠性高
中断中用到的寄存器:
中断优先级寄存器IP
位序号 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
位符号 |
-- |
-- |
-- |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
描 述 |
-- |
-- |
-- |
串口 |
T/C1 |
INT1 |
T/C0 |
INT0 |
IP寄存器:
作用是选择优先级的,解决中断优先级问题。
PX0:外部中断0优先级设定位
PT0:定时/计数器T0优先级设定位
PX1:外部中断0优先级设定位
PT1:定时/计数器T1优先级设定位
PS :串行口优先级设定位
PT2:定时/计数器T2优先级设定位
中断允许寄存器IE
位序号 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
位符号 |
EA |
-- |
-- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
描 述 |
全局中断 |
-- |
-- |
串口中断 |
T/C1 |
INT1 |
T/C0 |
INT0 |
IE寄存器:
ET0:定时/计数器T0中断允许位;
EX1:外部中断1允许位;
ET1:定时/计数器T1中断允许位;
ES :串行口中断允许位;
EA :CPU中断允许(总允许)位。
52单片机中一共有6个中断源,他们的符号,名称,及产生的条件分别是:
INT0—外部中断0,由P3.2端口引入,低电平或电平下降沿引起
INT1—外部中断1,由P3.3端口引入,低电平或电平下降沿引起
T0—定时器/计数器0中断,由T0计数器计满回零引起
T1—定时器/计数器1中断,由T1计数器计满回零引起
T2—定时器/计数器2中断,由T2计数器计满回零引起
TI/RI—串行口中断,串行端口完成一帧字符发送/接收后引起
中断优先级顺序由高到低:
外部中断0(INT0)->定时/计数器0(T0)->外部中断1(INT1)->
定时/计数器1(T1)->串行口(R1或T1)->定时/计数器2(T2)
首先响应的是优先级高的中断请求,正在中断的不会被新的中断请求打断,正在进行低优先级中断服务,能被高优先级中断请求中断。
中断函数一般形式:
void 函数名() interrupt n
{}
(n代表中断号,中断号是编译器识别不同中断的唯一编号)
中断函数和普通函数的异同:
同:函数的形式非常类似,中断响应过程和普通函数调用过程也非常相似
异:中断函数不需要声明,普通函数需要声明
使用中断函数需要遵循以下规则:
(1)中断函数不能进行参数传递
(2)在任何情况下,都不能直接调用中断函数
中断响应条件
- 中断源有中断请求
- 此中断源的中断允许位为1
- 开中断(即EA=1)