C51 中断 个人笔记
总架构图
IE寄存器
控制各个中断源的屏蔽与允许
TCON寄存器
各个中断源的请求标志位&有效信号的规定
中断源及其优先级
中断号写程序的时候要用
CPU处理中断三原则
1.CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
2.正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
3.正在进行的低优先级中断服务,能被高优先级中断请求所中断。
中断响应条件
- 中断源有中断请求;
- 此中断源的中断允许位为1;
- CPU开中断(即EA=1)。
代码写法
main函数中:
//以外部中断0为例
EA=1;//打开总中断开关
EX0=1;//允许外部中断0 (或其他中断源对应的允许位)
IT0=0/1;//设置外部中断的触发方式(或其他中断源)
中断服务函数
模板:
void 函数名 () interrupt 中断号
{
do anything that you want
}
例子:
void int0 () interrupt 0
{
do anything that you want
}
外部中断0 控制led灯
#include <reg51.h>
#define u16 int
#define u8 unsigned char
#define delaytime 500000
sbit led = P0^0;
sbit k = P3^2; //p32 用导线连接一个独立按键,按下按键时led状态发生改变
void delay(u16 i)
{
while(i--);
}
void Int0Init()
{
IT0 = 1; //触发方式为下降沿有效
EX0 = 1; //中断0 允许
EA = 1; //总开关
}
void main(void)
{
Int0Init();
while(1);
}
//外部中断0的调用程序
void Int0() interrupt 0 // P3^2 下降沿调用
{
delay(1000);
if(k == 0) //延迟10ms仍然按下(防抖)
{
led = ~led;
}
}