单片机基础:什么是中断系统、中断系统如何用(附中断系统应用实例)

您所在的位置:网站首页 佳佳乐玩具用的什么单片机 单片机基础:什么是中断系统、中断系统如何用(附中断系统应用实例)

单片机基础:什么是中断系统、中断系统如何用(附中断系统应用实例)

2023-08-26 13:09| 来源: 网络整理| 查看: 265

中断系统 1.前言2.什么是中断3.什么是中断系统4.中断的流程5.中断的优先级控制6.中断源外部中断 7.与中断有关的特殊功能寄存器7.1.定时/计数器控制寄存器 `TCON`7.2.串行口控制寄存器 `SCON`7.3.中断允许控制寄存器 `IE`7.4.中断优先级控制寄存器 `IP` 8.中断系统在实际编程中的应用8.1.实例一:中断的初始化8.2.实例二:利用中断控制LED闪烁形式8.3.实例三:多级中断控制LED不形式闪烁

1.前言

记录对51单片机中断、定时/计数器的重要知识点以及难点理解,并且举例中断在实际编程中的应用,从而加深对单片机中断、定时/计数器的理解,熟练的使用中断。

2.什么是中断

中断就是计算机在执行某一程序的过程中,由计算机系统内部或外部的某种原因而必须终止当前程序的运行,先去执行相应的处理程序,然后再返回继续执行原程序。

3.什么是中断系统

实现中断功能的软、硬件系统统称为中断系统。

4.中断的流程

在这里插入图片描述 即:中断请求、中断响应、中断处理、中断返回

5.中断的优先级控制

通常情况下,一个程序中可能会有多个中断,优先级越高的中断优先执行。如果在一个中断的服务过程中,有一个优先级更高的中断插入,则当前中断暂停,前往执行优先级更高的中断。当优先级高的中断执行完毕后再返回继续执行低优先级的中断。

6.中断源

MCS-51共有五个中断源

外部中断INT0、INT1定时/计数器T0和T1的溢出中断串行口的发送和接受中断(只占用一个中断源) 中断源功能INT0外部中断0请求,由INT0引脚(P3.2)输入。低电平/负跳变有效,中断请求标志为IE0INT1外部中断1请求,由INT1引脚(P3.3)输入。低电平/负跳变有效,中断请求标志为IE1T0定时/计数器0溢出中断请求,中断标志位为TF0T1定时/计数器1溢出中断请求,中断标志位为TF1RXD/TXD串行口中断请求,中断请求标志位TI或RI 外部中断

从单片机外部引脚INT0和INT1输入中断请求信号的中断。 外部中断的触发方式有两种电平触发IT0 =0和跳变触发(边沿)IT0 = 1,可以通过定时/计数器控制寄存器TCON编程选择。

7.与中断有关的特殊功能寄存器

与中断有关的特殊功能寄存器一共有4个。

定时/计数器控制寄存器(TCON)、串行口控制寄存器(SCON)、中断允许控制寄存器(IE)、中断优先级控制寄存器(IP) 7.1.定时/计数器控制寄存器 TCON

作用:

控制定时/计数器T0和T1的溢出中断控制外部中断的触发方式.由IT0和IT1控制锁存外部中断请求标志位 位地址位定义功能88HIT0选择外部中断0的中断触发方式。由软件控制。IT0=0为电平触发方式。IT0=1为下降沿触发方式89HIE0选择外部中断1的中断触发方式。功能与IT0相似8AH 7.2.串行口控制寄存器 SCON

串行口的接收发送数据中断请求标志位(RI和TI)

位定义功能TI串行口发送中断请求标志位。CPU每发送一帧数据,硬件置位1(TI=1),但是中断被响应时,需要在中断服务程序中通过软件对TI清零RI串行口接受中断请求标志位。每接收一帧数据,硬件置位1(TI=1),但是中断被响应时,一样需要在中断服务程序中通过软件对TI清零

串行口中断不能由硬件自动清除中断请求标志位,需要用户通过软件进行控制清零。

7.3.中断允许控制寄存器 IE

IE是控制中断的开关,通过对IE的清0和置1操作来控制中断的屏蔽和开放。

中断允许控制寄存器IE对中断的开放与屏蔽实现两级控制,存在一个总的中断控制位EA

位定义功能EA总中断允许控制位。当EA=0时,不允许任何中断请求。ES串行口中断控制位。当ES=0时,不允许串行口中断;当EA=1且ES=1时,允许串行口中断。ET1定时/计数器1中断允许控制位。当ET1=0时,屏蔽T1的溢出中断;当EA=1且ET1=1时,允许T1溢出中断ET0定时/计数器0中断允许控制位。功能与ET1相同。EX1外部中断1的中断允许控制位。当EX1=0时,屏蔽外部中断1的中断请求;当EA=1且EX1=1时,允许外部中断1的中断请求EX0外部中断0的中断允许控制位。功能与EX1相同

若某个中断源被允许,出来IE对应位置1外,还需要总中断控制位EA置1。

实例:若允许片内两个定时/计数器中断,禁止其他中断源的中断请求,尝试编写出设置IE的响应指令

#include EX0 = 0; // 禁止外部中断0 EX1 = 0; // 禁止外部中断1 ES = 0; // 禁止串行口中断 ET0 = 1; // 允许定时/计数器0中断 ET1 = 1; // 允许定时/计数器1中断 EA = 1; // 总中断控制器打开 7.4.中断优先级控制寄存器 IP 位定义功能PS串行口中断优先级控制位。PS=1,串行口中断为高优先级;PS=0,为低优先级。PT1定时/计数器1中断优先级控制位。当PT1=0时,T1溢出中断为低优先级;当PT1=1时,T1溢出中断为高优先级。PT0定时/计数器0中断优先级控制位。当PT0=0时,T0溢出中断为低优先级;当PT0=1时,T0溢出中断为高优先级。PX1外部中断1的中断优先级控制位。当PX1=0时,外部中断1为低优先级;当PX1=1时,外部中断1为高优先级。PX0外部中断0的中断优先级控制位。当PX0=0时,外部中断0为低优先级;当PX0=1时,外部中断0为高优先级。

同级内第二优先级的次序: 外部中断0 > T0溢出中断 > 外部中断1 > T1溢出中断 > 串行口中断

8.中断系统在实际编程中的应用 8.1.实例一:中断的初始化 #include void init() // 中断的初始化函数 { EA = 1; // 总中断控制位 ES = 1; // 串行口中断允许 EX0 = 1; // 外部中断0允许 EX1 = 1; // 外部中断1允许 ET0 = 1; // 定时/计数器0中断允许 ET1 = 1; // 定时/计数器1中断允许 IT0 = 1; // 选择外部中断0的触发方式 IT1 = 1; // 选择外部中断1的触发方式 }

例1:假设允许外部中断0和1中断,并设定外部中断0为高级中断,外部中断1为低级中断,外部中断0为下降沿触发方式,外部中断1为电平触发方式。试写出该程序的中断初始化程序。

#include void init() // { EA = 1; 打开中断控制 EX0 = 1; 允许外部中断0 EX1 = 1; 允许外部中断1 IT0 = 1; 外部中断1采取边沿触发方式 IT1 = 0; 外部中断0采取电平触发方式 PX0 = 1; 外部中断0为高优先级 PX1 = 0; 外部中断1为低优先级 } 8.2.实例二:利用中断控制LED闪烁形式

要求:

用80C51单片机控制8个LED灯,在外部中断0输入引脚(P3.2)接一个开关K1。要求将外部中断0设置为下降沿触发,程序启动是8个LED以跑马灯的形式交替闪烁。每按一次开关K1,使引脚接地,产生一个下降沿触发的外部中断请求。在中断服务程序中,8个LED高四位和低四位交替闪烁5次,然后中断返回,8个LED继续以跑马灯形式闪烁。

采用Protues+Keil仿真

元器件

单片机:80C51 *1开关按钮:Button *1电阻:MINRES470K *1LED:LED-BLUE *8

仿真图

在这里插入图片描述 代码

#include unsigned char code table[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0xff}; // 控制P2端口的状态 unsigned char i,j,k,num; void delay() // 延时函数 { for(i = 0;i EA = 1; // 打开总中断控制 EX0 = 1; // 允许外部中断0 IT0 = 1; // 外部中断为下降沿触发方式 } void main() { init(); while(1) { for(num =0;num for(k = 0;k EA = 1; EX0 = 1; EX1 = 1; PX0 = 0; PX1 = 1; IT0 = 1; IT1 = 1; }

其次我们再捯饬一下主程序

void main() { init(); while(1) { for(num =0;num for(k = 0;k for(l = 0;l 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0x00, 0xff}; // 控制P2端口的状态 unsigned char i, j, k, l, num; void delay() // 延时函数 { for(i = 0; i EA = 1; EX0 = 1; EX1 = 1; PX0 = 0; PX1 = 1; IT0 = 1; IT1 = 1; } void main() { init(); while(1) { for(num = 0; num EX0 = 0; for(k = 0; k for(l = 0;l


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3