C51 中断 个人笔记

总架构图

IE寄存器

控制各个中断源的屏蔽与允许

TCON寄存器

各个中断源的请求标志位&有效信号的规定

中断源及其优先级

中断号写程序的时候要用

CPU处理中断三原则

1.CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
2.正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
3.正在进行的低优先级中断服务,能被高优先级中断请求所中断。

中断响应条件

  1. 中断源有中断请求;
  2. 此中断源的中断允许位为1;
  3. 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;
	}
}
原文地址:https://www.cnblogs.com/YuQiao0303/p/9896367.html