IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 认识80S51的中断 -> 正文阅读

[嵌入式]认识80S51的中断

中断(interrupt)是CPU在执行程序时,对系统发生的某个事件(程序自身或外界的原因)做出的一种反应,暂时放下目前所执行的程序,先去执行特定的程序,待完成特定的程序后,再返回执行刚才放下的程序。比如用户按下按钮,程序必须及时处理用户的按钮请求,然后再返回来继续执行。

?比如,老师正在讲课,而同学有疑问,随时都可以举手发问,老师将立即暂停讲课,为同学解惑,再继续刚才暂停的课程,这样的动作就是中断。

中断源

中断源(中断请求源):能够向CPU发出中断申请的部件。

8051提供5个中断服务(中断源):外部中断(INT0INT1),定时器中断/计数器中断(TF0TF1),串行口中断UARTRI/TI)。

8052提供6个中断服务(中断源),除了包含8051提供的5个中断外,还包括第三个定时器/计数器(Timer2)的中断。

MCS-51的中断

?>外部中断

外部中断INT0/INT1,CPU通过12引脚(即P3.2)及13脚(即P3.3)来接收外部中断的请求。

外部中断信号的采样方式可分为电平触发(低电平触发)及边缘触发(负边缘触发,即时钟信号由高转低时触发)两种。

若要采用电平触发,需要将TCON寄存器中的IT0(或IT1)设定为0,则只要P3.2引脚(或P3.3引脚)为低电平,即视为外部中断需求。

若要采用边缘触发需要将TCON寄存器中的IT0(或IT1)设定为1,则只需要P3.2引脚(或P3.3引脚)的信号由高电平转为低电平,即视为外部中断需求。

这些中断需求将反应在IE0(或IE1)里,若IE寄存器的EX0(或EX1=1,且EA=1CPU将进入该中断的服务。

至于中断的优先级寄存器(IP寄存器),只是安排多个中断发生时中断服务执行的顺序而已,若只有一个中断,将不会有所影响。

>定时器/计数器中断

定时器/计数器中断有TF0TF1两个(8052多一个:TF2)。若是定时器,CPU将对内部的时钟脉冲计数,而提出内部中断;若是计数器,CPU将对外部的脉冲计数,而提出内部中断。至于外部脉冲的输入,则是通过T0引脚(即14脚,也就是P3.4)及T1引脚(即15脚,也就是P3.5

>串行口中断

串行口中断(UART)有RITI两个,CPU通过RXD引脚(即10引脚,也就是P3.0)及TXD引脚(即11脚,也就是P3.1)要求接收(RI)中断需求或传送(TI)中断需求。

>相关寄存器

在前面的[MCS-51中断系统图]中,我们可将中断启用寄存器(IE寄存器)看作中断功能的开关,中断优先级寄存器(IP寄存器)是判断各中断优先级的开关。而实际上,IE寄存器、IP寄存器、TCON寄存器都是一个8位的可寻址寄存器,如下图:

?中断优先级

若没有在IP寄存器里设定优先级,则中断的优先级为:INT0 >TF0>INT1>TF1>RI/TI。

若设定了优先级:

假设TF1=1,则中断优先级应为:TF1>INT0 >TF0>INT1> RI/TI;

假设TF0 =1INT1=1,则中断优先级应为:TF0>INT1>INT0 > TF1>RI/TI

定时器/计数器控制寄存器TCON里,有部分设定与外部中断信号的采样有关。其中IT0IT1分别为INT0INT1的采样信号设置位:

若设置为1,则是采用下降沿触发信号;

若设置为0,则是采用低电平触发。

IE0IE1是由CPU所操作的中断标志位,当中断发生时将被设定为1,结束中断时,恢复为0

中断的应用

中断的设定包括开启中断开关(IE寄存器的设定)、中断优先级的设定(IP寄存器的设定)、中断信号的设定(TCON寄存器的设定)等。

在程序中设定中断命令:

IE=0x81? //1000 0001,对照前面IE寄存器图片可得EA=1EX0=1,即启用INT0中断

IE=0x84? //启用INT1中断

IE=0x85? //启动INT0INT1中断

IP=0x04? //设置INT1中断具有最高优先级

TCON=0x8? //设定INT1采用下降沿触发

中断程序格式:void +函数名+interrupt +数字04

0 外部中断INT0

1 定时器/计数器TF0

2外部中断INT1

3定时器/计数器TF1

4:串行口TI/RI

如:void my_INT? (void) ?interrupt 0

?{

? …….//中断子程序逻辑代码

}

举例:12引脚(即P3.2)接入按钮,当在主程序运行过程中,按下这个按钮,程序就会进入中断子程序,执行子程序的逻辑,中断子程序执行完,再进入主程序继续执行。

主程序:

void main()

{

???? IE=0x81 // 启用INT0中断

???? TCON=0x01? //设置INT0 为下降沿触发

???? …..

???? While(1)

???? {

???????? …….

??????}

}

void ?int0_test(void) ?interrupt0

{

???? ……//中断子程序逻辑代码

}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:16:43  更:2022-02-16 13:17:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:45:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码