理解中断
在软件开发的过程中,比如有一个线程正在执行,突然有个紧急任务执行,那么哪个线程先停一下,然这个紧急任务执行完它才执行。
在硬件中,中断也是这种意思,如果有紧急任务,其他的任务先放一放,先干这个紧急任务。
如下的代码表示,中断初始化需要设置寄存器的流程
void Timer0_init(void)
{
//设置定时器0为工作模式1,在机器刚刚初始化的时候TMOD为0x00
TMOD &= 0xF0; //设置定时器模式,低四位清0
TMOD |= 0x01; //设置定时器模式,低四位置为0001
//设定起始时间
TL0 = 0x18;
TH0 = 0xFC;
//Timer0定时器溢出标志位置0
TF0 = 0;
//启动Timer0定时器
TR0 = 1;
//开启Timer0定时器中断
ET0 = 1;
//开启外部中断
EA = 1;
}
在进入中断函数后所做的处理的代码例子
void Timer0_Routine(void) interrupt 1
{
static unsigned char KeyCounter, NixieCounter;
//设定起始时间 定时器时间长度 999 us
TL0 = 0x18;
TH0 = 0xFC;
// KeyCounter++;
// if (KeyCounter >= 20) {
// KeyCounter = 0;
// Key_Loop();
// }
// //定时器关灯与灭灯
// Counter++;
// if (Counter >= 500)
// {
// P2_0 = ~P2_0;
// Counter = 0;
// }
NixieCounter++;
if (NixieCounter >= 2)
{
Nixie_Loop();
NixieCounter = 0;
}
}
中断笔记
如下图
如下图TCON寄存器就是前文说的 控制单片机的定时与计数 开与关闭的寄存器。那个时候的开与关闭只是用到了高4位,它的低4位是中断所需要的。
下图中的9.3节,9.3节就是 51单片机的定时任务 这篇博客中说到的定时任务。
相关验证性的代码下载,添加了vs code代码提示配置,做到了vs code编辑 keil编译(是免费的):https://download.csdn.net/download/Hello_Ray/41141041
至此 51单片机 计时、串行数据传递和中断 三板斧介绍完成了,后面将介绍关于这三部分的代码与电路远离图来解释他们真实的使用情况。