本文概述
- 8051微控制器中的中断类型
- 8051单片机的中断结构
- 中断使能(IE)寄存器
- 中断优先级寄存器(IP)
- 8051中的中断编程
【8051单片机中断】中断提供了一种方法来推迟或延迟当前进程, 执行子例程任务, 然后再次重新启动标准程序。
8051微控制器中的中断类型 让我们看一下8051单片机中的五个中断源:
- 定时器0溢出中断-TF0
- 外部硬件中断-INT0
- 定时器1溢出中断-TF1
- 外部硬件中断-INT1
- 串行通讯中断-RI / TI
当发生中断时, 微控制器执行中断服务程序。因此存储器位置对应于中断使能它。考虑下面的中断向量表中所示的与存储器位置相对应的中断。
文章图片
8051单片机的中断结构 “复位”后, 所有中断均被禁用, 因此, 所有中断均由软件启用。从所有五个中断中, 如果激活了任何一个或所有中断, 这将设置对应的中断标志, 如图所示, 该标志与8051微控制器的中断结构相对应:
文章图片
所有中断都可以通过某些特殊功能寄存器来设置或清除, 该特殊功能寄存器也称为中断使能(IE), 这完全取决于优先级, 该优先级是通过使用中断优先级寄存器执行的。
中断使能(IE)寄存器 IE寄存器用于启用和禁用中断。这是一个位可寻址的寄存器, 其中必须将EA值设置为1才能使能中断。该寄存器中的各个位使能特定的中断, 如定时器, 串行和外部输入。考虑下面的IE寄存器, 该位对应于1激活中断而0禁用中断。
文章图片
中断优先级寄存器(IP) 如图所示, 使用IP寄存器可以通过清除或设置中断优先级(IP)寄存器中的单个位来更改中断的优先级。它允许低优先级中断可以中断高优先级中断, 但它通过使用另一个低优先级中断来禁止中断。如果未对中断的优先级进行编程, 则微控制器以预定义的方式执行指令, 其顺序为INT0, TF0, INT1, TF1和SI。
文章图片
8051中的中断编程 定时器中断编程
:在微控制器中, 定时器1和定时器0中断由时间寄存器位TF0和TF1产生。此计时器中断通过C代码进行的编程涉及:
- 选择TMOD寄存器的配置及其操作模式。
- 启用IE寄存器和其中的相应定时器位。
- 通过使用适当的操作模式选择并加载TLx和THx的初始值。
- 设置用于启动计时器的计时器运行位。
- 编写计时器子例程, 并在子例程末尾清除TRx的值。
#include<
reg51 .h>
sbit Blink Led = P2^0;
// LED is connected to port 2 Zeroth pin
void timer0_ISR (void) interrupt 1 //interrupt no. 1 for Timer0
{
Blink Led=~Blink Led;
// Blink LED on interrupt
TH0=0xFC;
// loading initial values to timer
TL0=0x66;
}
void main()
{
TMOD=0x0l;
// mode 1 of Timer0
TH0 = 0xFC:// initial value is loaded to timer
TL0 = 0x66:
ET0 =1;
// enable timer 0 interrupt
TR0 = 1;
// start timer
while (1);
// do nothing
}
外部硬件中断编程
单片机8051由两个外部硬件中断组成:如上所述的INT0和INT1。这些中断在引脚3.2和3.3启用。它可以是电平触发或边沿触发。在电平触发中, 引脚3.2的低电平信号使能中断, 而引脚3.2的高电平至低电平跃迁使能边沿触发的中断。
让我们看看8051微控制器的可编程功能是:
- 使能中断允许(IE)寄存器中外部中断的等效位。
- 如果是电平触发, 则写适合该中断的子程序, 或者使能TCON寄存器中与边沿触发的中断相对应的位。
void main()
{
IT0 = 1;
// Configure interrupt 0 for falling edge on INT0
EXO = 1;
// Enabling the EX0 interrupt
EA =1;
// Enabling the global interrupt flag
}
void ISR_ex0(void) interrupt 0
{
<
body of interrupt>
}
串行通讯中断编程
在需要发送或接收数据时使用。由于一个中断位同时用于传输中断(TI)和接收方中断(RI)标志, 因此中断服务程序(ISR)必须检查这些标志以了解实际的中断。 RI和TI标志的逻辑或运算导致中断, 并且仅由软件清除即可。考虑串行通信中断编程中涉及的步骤:-
- 配置中断使能寄存器以使能串行中断。
- 配置SCON寄存器以执行传输和接收操作。
- 使用适当的功能为给定的中断编写子例程。
void main()
{
TMOD = 0x20:
TH1= 0xFD;
// baud rate for 9600 bps
SCON = 0x50;
TR1=1;
EA=l;
whlle(l);
}
void ISR_Serial(void) interrupt 4
{
if(TI==l)
{
SBUF= ?E?;
TI=0;
}
else
RI =0;
}
推荐阅读
- 使用8051微控制器进行键盘编程
- 使用Keil语言进行嵌入式C编程
- 汇编语言
- 8051单片机引脚图
- 8051单片机
- 8051指令集
- 使用8051单片机在7段显示器上显示数字
- 嵌入式系统设计
- 嵌入式系统的特点