本文为LED-执棋困昌,csdn原创首发。
> 发布人:LED-执棋困昌
> 欢迎大家与LED-执棋困昌相互点赞+关注+收藏+评论,也祝大家生活安康,学业愉快,工作顺利。
> 我的格言是:“尽最大努力,做最好的自己!
> 上一篇我们讲了独立按键的单一键项目实战,为大家更好地理解行列扫描的使用。
今天我们来讲中断和定时器,为下一文章键盘之中断法打好基础。
一、中断理论
1.1中断概念及作用
单片机中断是指在执行程序时,出现了某些特殊状况,例如定时时间到、有键盘信号输入等,需要暂停当前的程序,转去执行处理这些事件的程序,待执行完这些特定的程序后,再返回到原先的程序去执行,形成了一次中断。
中断的作用包括:
1. 实现实时处理:在实时控制的过程中,CPU会根据当时的情况及时做出反应,进行实时控制。
2. 实现分时操作:采用中断技术后,快速的CPU和慢速的外设可以各做各的事情。
3. 进行故障处理:系统在运行过程中往往会出现一些异常情况,可在中断中及时处理。
4. 待机状态的唤醒:当单片机处于待机状态时,可以唤醒并继续执行程序。
1.2中断结构图
从图可得,中断涉及到多个寄存器,有IE寄存器和IP寄存器等。
1.3中断理论
(1)寄存器
①中断允许控制寄存器IE
EA:总中断允许开关,EA=1时,打开总中断
ET0、ET1:定时器0/1的溢出中断允许位。
ET0、ET1:外部中断0/1的溢出中断允许位。
ES:串口通信中断允许位
②中断优先级控制寄存器IP
PT0、RT1:定时器0/1优先级控制位
PX0、PX1:外部中断0/1优先级控制位
PS:串口优先级控制位
③定时器方式寄存器TMOD
51单片机有2个定时器/计数器,即T0、T1。
GATE:门控位
C/T:=0,定时器;=1,计数器
M0、M1决定定时计数器的工作方式。
④定时器控制寄存器TCON
TF0、TF1:定时器0/1的溢出标志位。
TR0、TR1:定时器0/1的启动位。为0是,定时计数器关闭;为1时,定时计数器打开。
IT0、IT1:外部中断0/1触发方式设置。为0时,电平触发;为1时,下降沿触发。
IE0、IE1:外部中断0/1请求标志位。
(2)中断优先级
1.优先级高的要比优先级低优先执行:当优先级在执行前或执行过程中,有优先级高的要执行,则打断低优先级的执行,优先级先执行。
优先级相同时,按顺序执行。
2.中断源自然优先级:外部中断0>定时计数器0>外部中断1>定时计数器1>串行口
3.优先级可分为软件设置优先级和自然优先级,一般地,软件设置优先级>自然优先级。
4.软件设置优先级可以借用IP寄存器进行设置,设置成1,为高优先级,设置为0,为低优先级。
(3)中断服务函数
中断服务函数格式:
void timer() interrupt n
①中断服务函数返回值为空
②中断服务函数不能被调用
③中断服务函数无需声明
④n:入口编号。可以通过不同的n,进入相应的中断向量,从而执行对应的中断服务函数
⑤中断向量:中断服务函数入口地址。
二、代码
(1)定时器/计数器中断
中断与定时器结合,除了打开总中断EA和ET0/ET1外,还要设置定时计数器的方式和初值。
为了能重复进行初值,通常还要在中断服务函数重新赋初值。
初值计算:
首先,第一步,先算初值X。与设置的方式有关。方式0,为13位定时器/计数器,所以初值X=2^13-N/(12/fosc),同理可得:方式1,为16位定时器/计数器,所以初值X=2^16-N/(12/fosc)
第二步,计算高8位TH0/TH1和低8位TL0/TL1。
方法一:将初值X化为16位2进制,取高8位和低8位,然后分别用十六进制表示。
方法二:直接用算法。高8位TH0/TH1=X/256,高8位TL0/TL1=X%256。
(2)外部中断
外部中断分外部中断0和外部中断1,分别对应引脚INT0和INT1。
一般与按键结合,先打开EA,接着设置触发方式IT和外部中断EX0/EX1。
当按键按下时,按键一端连接的I/O口电平变成低电平,触发中断,根据值得向量地址进入中断服务函数。
三、生成工具
为了能更快写出定时器函数,为你们介绍烧录工具。
软件界面:
定时器时钟要选12T,模式、频率、定时长度按自己需求调