1: 明白中断系统的结构
2:如何触发中断请求(中断过程)
3:编写中断函数
4:调试运行程序
概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。
- 中断源:引起CPU中断的根源,向CPU申请中断
- 特点:分时操作,实时响应,可靠性高
结构:编程时利用这张图初始化中断函数(结合开发板的原理图)
根据开发板原理图可以看到
P3.2→INT0 P3.3→INT0 P3.4 →T0 P3.5 → T1 P3.0 → RXD P3.1 →TXD
- 中断允许控制:CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
TCON定时器中断请求标志。这也是要注意的点-----可以不用刻意去记,多练就可以了,下面代码会告诉你怎么用
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
这里重要的是还要注意优先级:由上到下优先级依次降低
和中断号:
编写程序
可以用一下程序进行烧录测试,
下面程序调用了两个请求函数分别是中断号0 和 1;
```c
#include<REG52.h>
typedef unsigned int u8;
typedef unsigned char u16;
sbit pt1 = P2^6;
sbit pt2 = P2^3;
/******延时函数***************************/
void Delay(u8 i)
{
u8 j;
for(;i>0;i--)
{
for(j = 0; j<125 ; j++);
}
}
/**中断请求0*************************/
void Int0Init()
{
IT0 = 1;
EX0 = 1;
EA = 1;
IE0 = 1;
}
/****中断函数0*********************/
void int0() interrupt 0
{
// while(1)
// {
// pt1 = 0;
// Delay(1200);
// pt1 = 1;
// Delay(1200);
// }
u8 i;
for(i = 0; i< 4 ; i++) //
{
pt1 = ~pt1;
Delay(1200);
}
}
/**中断请求1*************************/
void Int1Init()
{
ET0 = 1;
TF0 = 1;
EA = 1;
}
/*****中断函数1**********************/
void LED_1() interrupt 1
{
while(1)
{
pt2 = ~pt2;
Delay(1200);
}
}
void main()
{
Int0Init(); //调用中断请求0
Int1Init(); //调用中断请求1
}
2021-3-13记录自己开始回顾51单片机基础知识。希望广大的单片机朋友过来交流