1、何为中断
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
2、如何设置
3、实验1
通过中断控制led亮灭
#include "reg52.h"
sbit LED = P3^6;
int cnt = 0; //定义全局变量,记录爆表次数
void Time0Init()
{
//1、配置定时器0工作模式16位计时
TMOD = 0x01;
//2、给初值,定一个10ms
TL0 = 0x00;
TH0 = 0xDC;
//3、开始计时
TR0 = 1;
//初始化TF,准备记录爆表
TF0 = 0;
//打开定时器0中断
ET0 = 1;
//打开总中断
EA = 1;
}
void Time0Handler() interrupt 1 //中断函数
{
cnt++;
//重新给初值
TL0 = 0x00;
TH0 = 0xDC;
if(cnt == 100)//爆表100次经过了1s
{
cnt = 0;
LED = !LED;//每经过1s,翻转LED状态
}
}
void main()
{
LED = 1;
Time0Init();
//爆表,操作led,累计到1s,再操作led
//爆表,变量加1,加100次也就是1s,每隔1s转换led状态
while(1){
}
}
4、实验2
通过中断控制2盏灯的亮灭,中断一个主函数一个
#include "reg52.h"
sbit LED = P3^6;
sbit LED1 = P3^7;
int cnt = 0; //定义全局变量,记录爆表次数
void Delay300ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Time0Init()
{
//1、配置定时器0工作模式16位计时
TMOD = 0x01;
//2、给初值,定一个10ms
TL0 = 0x00;
TH0 = 0xDC;
//3、开始计时
TR0 = 1;
//初始化TF,准备记录爆表
TF0 = 0;
//打开定时器0中断
ET0 = 1;
//打开总中断
EA = 1;
}
void Time0Handler() interrupt 1 //中断函数
{
cnt++;
//重新给初值
TL0 = 0x00;
TH0 = 0xDC;
if(cnt == 100)//爆表100次经过了1s
{
cnt = 0;
LED = !LED;//每经过1s,翻转LED状态
}
}
void main()
{
LED = 1;
Time0Init();
//爆表,操作led,累计到1s,再操作led
//爆表,变量加1,加100次也就是1s,每隔1s转换led状态
while(1){
LED1 = 0;
Delay300ms();
LED1 = 1;
Delay300ms();
}
}