51单片机(二)中断系统与外部中断实验
-
中断即单片机因为某些原因E暂定现在的工作P0,转去做其他的工作P1,完了之后继续之前的事P0,其他工作P1就是中断程序,原因E就是中断事件,原因由外部发生,程序不能预测到的是硬中断,可以由程度触发的中断是软中断。
-
51系列单片机一定有五个基本五个中断: 外部中断0,外部中断1,定时器中断0,定时器中断1,串口中断。
-
实现一个中断监听程序有四个步骤:
1. CPU打开中断请求
2. 对应的中断事件的中断允许位打开
3. 明确中断事件的触发方式,是边沿触发还是电平触发
4. 在中断服务地址处写上中断处理程序 -
中断允许控制寄存器
在REGX52.H文件中定义的sfr IE = 0xA8;
就是中断允许控制寄存器,其中sbit EA = 0xAF; // IE^7
是CPU中断允许位sbit EX0 = 0xA8; // IE^0
是外部中断0sbit ET0 = 0xA9; // IE^1
是时钟中断0
-
中断请求标志寄存器
REGX52.H中sfr TCON = 0x88;
是中断请求标志寄存器sbit IT0 = 0x88;
代表外部中断0请求方式设置位,0 为电平触发,1为边沿触发。sbit IE0 = 0x89;
代表外部中断0请求标志sbit TF0 = 0x8D; // time flag
代表时钟0溢出标志
-
中断号
- int0
- t0
- int1
- t1
- usart
-
做一个实验按下一个按键来控制小灯点亮与熄灭
原理图中GPIO p3.2 与 int0 复用,所以按键可以接在p3.2端口来触发中断。
按键一边接地,一边接GPIO,当按键按下,线路连通,GPIO就接地,相当于低电平。
#include <REGX52.H>sbit key1 = P3^2;
sbit led1 = P0^0;int main()
{led1 = 1;EA = 1;EX0 = 1;IT0 = 1;while(1){}return 0;
}void on_key1_press() interrupt 0
{int debouncing_duration= 0xff;while(debouncing_duration--) {}if (key1 == 0){led1 = !led1; }
}