datasheet

单片机常用功能模块的使用 Part6. 中断

2016-09-28来源: eefocus关键字:单片机常  功能模块  中断
1、单片机中断:

用度娘找了一张 80C51 单片机的图如下:

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

其中,在 P3.2、P3.3 的位置,即 12 ,13 引脚处,标有 INT0 和 INT1,那两个引脚就是外部中断的输入。上面一个横杠代表低电平有效,给 P3.2、P3.3 赋值 0,就可以运行已经写好的中断服务程序。具体怎么用,还要熟悉一些中断寄存器的使用。

 

2、中断寄存器:

(1)、IE (Interrupt Enable):中断允许控制寄存器

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

EA   (IE.7):EA=0 时,所有中断禁止(即不允许中断)

       EA=1 时,各中断的产生由个别的允许位决定

ET2 (IE.5):定时器 2 溢出中断允许(8052 用,博主用的 STC89C54RD+ 也有)

ES   (IE.4):串口中断允许(ES=1 允许,ES=0 禁止,下同)

ET1 (IE.3):定时器 1 中断允许

EX1 (IE.2):外部中断 INT1 中断允许

ET0 (IE.1):定时器 0 中断允许

EX0 (IE.0):外部中断 INT0 中断允许

 

(2)、IP (Interrupt Priority):中断优先级控制寄存器

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

PX0:外部中断 0 的中断优先级控制位,PX0=1,外部中断 0 被定义为高优先级中断;PX0=0,外部中断 0 定义为低优先级中断

PT0:定时器 T0 的中断优先级控制位,PT0=1,定时器 T0 被定义为高优先级中断;PT0=0,定时器 T0 定义为低优先级中断

PX1:外部中断 1 的中断优先级控制位,PX1=1,外部中断 1 被定义为高优先级中断;PX1=0,外部中断 1 定义为低优先级中断

PT1:定时器 T1 的中断优先级控制位,PT1=1,定时器 T1 被定义为高优先级中断;PT1=0,定时器 T1 定义为低优先级中断

PS:串口中断优先级控制位,PS=1,串口中断被定义为高优先级中断;PS=0,串口中断定义为低优先级中断

(暂时没用过,后续使用再更新)

 

(3)、TCON (Timer Control Register):定时器/计数器控制寄存器

这个寄存器在前面定时器里遇到过,再备份一下:

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

TF:定时器溢出标志,计数器溢出时硬件自动置位,即 TF=1,进入中断后再由硬件自动清除(TF=0)

TR:计数器的控制位

   TR=1:计数器开始工作

   TR=0:计数器停止计数

IE:外部中断 INT 的请求标志

    当单片机检测到 INT 引脚上有下降沿时,IE=1 申请中断,进入中断服务程序时,硬件自动清除 IE 标志

IT:外中断触发类型控制

    IT=1 时,外中断信号的下降沿触发 IE 标志

    IT=0 时,外中断信号的低电平触发 IE 标志

 

3、中断的编程使用:

使用中断,就是说当发生某些事件的时候,运行“中断服务程序”,使用方法如下:

void Timer0_ISR(void) interrupt 1 using 1
{
    /* 此处编写中断服务的具体内容 */
}

语句 interrupt x using y 是指:此函数作为“x 号中断”的“中断服务程序”,并且使用“y 号寄存器组”“传递参数”。

首先要清楚:80C51 单片机有 5 个中断源:2 个外部中断、2 个定时器中断(定时器 0 和 定时器 1)、1 个串口中断(8052 有 6 个中断源,多了一个定时器 2 中断),x 即为“中断号”:

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

上面的程序是定时器 0 的中断服务程序,因此是 interrupt 1;要是想按一个键进行中断,那么就是外部中断,因此是 interrupt 0 或者 interrupt 2。

关键字 using,用来指定中断服务程序使用的“寄存器组”。用法是:using 后跟一个 0 到 3 的数,对应着 4 组工作寄存器。一旦指定工作寄存器组,默认的工作寄存器组就不会被压栈,这将节省 32 个处理周期,因为入栈和出栈都需要 2 个处理周期。这一做法的缺点是所有调用中断的过程都必须使用指定的同一个寄存器组,否则参数传递会发生错误。顺便一提,默认使用 0 号寄存器组,即:不写 using y 就会默认 using 0,因为主程序使用 0 号寄存器组做参数传递。

补充:中断入口地址:

【51】技巧 2 -- 单片机常用功能模块的使用 Part6. 中断 - 灼眼のFate - 運命の始まり

 

关键字:单片机常  功能模块  中断

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2016092829905.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机常用功能模块的使用 Part7. LCD 1602
下一篇:单片机常用功能模块的使用 Part5. 独立按键

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32单片机常用库函数

必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。4.FLASH:芯片内部存储器flash操作函数对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函数里面,时钟起振之后。 基础应用
发表于 2019-04-11

STC单片机常用型号

一:STC15W204S系列有8脚、16脚,具体应用参考STC15系列单片机手册。二:STC15W401AS系列有SOP16、SOP20、SOP28,具体应用参考芯片手册。
发表于 2019-03-18
STC单片机常用型号

单片机常识—结构和相关公司

概述绝大多数现在的单片机都是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计时器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口——所有这些都被集成在单个集成电路芯片上。说单片机与通用型中央处理单元芯片不同,是因为前者一般很容易配合最小型的外部支持芯片制成工作计算机。这样就可以很容易的把单片机系统植入装置内部来控制装置了。近年来为了在指令和数据上使用不同的字宽,并提高处理器流水线速度,哈佛结构在微控制器(Microcontrollers)和数字信号处理器(Digital Signal
发表于 2018-10-10
单片机常识—结构和相关公司

关于51系列单片机常见问题解答

1请问:现在学习51系列 单片机 应该选择AT89C51还是89S51? 答:89C51和89S51内核相同,89S51针对89C51的明显的几个升级如下; 1.程序存储器写入方式:二者的写入程序的方式不同,89C51只支持并行写入,同时需要VPP烧写高压。89S51则支持ISP在线可编程写入技术!串行写入、速度更快、稳定性更好,烧写电压也仅仅需要4~5V即可。  2.电源范围:89S5*电源范围宽达4~5.5V,而89C5*系列在低于4.8V和高于5.3V的时候则无法正常工作。 3.工作频率:目前89S1*的性能远高于89C5*,89S5*系列支持最高
发表于 2018-01-24

51单片机常见的六个问题

  一,为何51单片机爱用11.0592MHZ晶振?  其一:由于它能够精确地划分红时钟频率,与UART(通用异步接纳器/发送器)量常见的波特率有关。特别是较高的波特率(19600,19200),不论多么古怪的值,这些晶振都是精确,常被运用的。  其二:用11.0592晶振的缘由是51单片机的定时器致使的。用51单片机的定时器做波特率发生器时,假如用11.0592Mhz的晶振,根据公式算下来需求定时器设置的值都是整数;假如用12Mhz晶振,则波特率都是有误差的,比如9600,用定时器取0XFD,实践波特率10000,通常波特率误差在4%摆布都是能够的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率
发表于 2017-11-12

MSP430单片机常用程序框架

  前一段时间一直在用TI公司的MSP430系列的单片机,总结了点430常用的程序框架。a.循环低功耗、中断服务程序唤醒void main(){  关闭开门狗;  初始化时钟;  初始化端口;  初始化屏幕;  其他外围必要的初始化;  开中断;  while(1)  {    进入低功耗模式;    执行某函数;  }} 中断函数1{  退出低功耗;  中断服务程序;} 例如: 1 #pragma vector=ADC12_VECTOR 2 __interrupt void ADC12ISR (void)  //AD转换中断服务程序 3 { 4  
发表于 2017-01-04

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved