中断原理应用程序的设计说明_第1页
中断原理应用程序的设计说明_第2页
中断原理应用程序的设计说明_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 中断原理应用程序设计6.1 中断系统的基本概念CPU在处理某一事件 A时,发生了另一事件 B请求CPU迅速去处理(中断发生);CPU暂时 中断当前的工作,转去处理事件B仲断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件 A被中断的地方继续处理事件 A (中断返回),这一过程称为 中断。中断源弓I起CPU中断的根源,称为 中断源。中断源向CPU提出的中断请求。CPU暂时中断 原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方 (即断点), 称为 中断返回 。实现上述中断功能的部件称为 中断系统 (中断)。MCS-51单片机提供了 5个中断源,其中两个为

2、外部中断请求源 (P3.2)和(P3.3),两个片定 时器/计数器TO和T1的溢出请求中断源 TFO (TCON勺第5位)和TF1 (TCON勺第7位),1个 片串口发送或接收中断请求源 TI ( SCON勺第1位)和RI ( SCON勺第0位)。中断优先级同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:表6-4 MCS-51 单片机中断源的自然优先级及入口地址服务程序,而且用 C语言编写中断服务程序,比用汇编语言方便的多。C语言编写中断服务函数的格式如下:函数类型 函数名(形式参数列表) interrup

3、t n using m其中,interrupt后面的n是中断编号,取值围04,; using中的m表示使用的工作寄存器组号(如不声明,则默认用第0组)。例如,定时器TO的中断函数可用如下方法编写:void Timer(void) interrupt 1 using 0 定时器TO勺中断服务函数,TO勺中断编号为1,使用第0组工作寄存器/中断服务程序6.2 中断系统的控制定时器 /计数器控制寄存器 TCONTCON 的功能是接收外部中断源(、和定时器(TO、T1)送来的中断请求信号。字节地址为88H,可以进行位操作。表 5-5列出了 TCON勺格式。8FH8EH8DH8CH8BH8AH89H88

4、HTF1TR1TF0TR0IT0IT1IE0IT0表6-5定时器/计数器控制寄存器 TCON勺格式?ITO和IT1分别为外部中断 和的触发方式控制位,可以进行置位和复位。?IEO和IE1分别为外部中断和的中断请求标志位。?TFC和TF1分别为定时器/计数器TO和T1的中断请求标志。?TR(和TR份别为定时器/计数器TO和T1的启动/停止位。中断允许控制寄存器 IECPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制。表6-6 中断允许控制寄存器 IE 的格式§EXO(IE.O),外部中断 0允许位;§ETO(IE.1),定时/计数器TO中断允许位;&

5、#167;EX1(IE.2),外部中断 0允许位;§ET1(IE.3),定时/计数器T1中断允许位;§ES(IE.4) ,串行口中断允许位;§EA (IE.7),CPU中断允许(总允许)位。中断优先级控制寄存器 IPMCS-51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器 IP 中的相应位的状态来规定的。表6-7 中断优先级控制寄存器 IP 的格式PX0( IP.0 ),外部中断 0优先级设定位;PT0(IP.1 ),定时/计数器T0优先级设定位;PX1(IP.2 ),外部中断 0优先级设定位;PT1 (IP.3

6、),定时/计数器T1优先级设定位;PS ( IP.4 ),串行口优先级设定位;PT2 (IP.5), 定时/计数器T2优先级设定位。串行通信控制寄存器 SCON具体格式见串口通信有关SCON勺功能主要是接收串行通信口送到的中断请求信号 章节。MCS-51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。 正在进行的低优先级中断服务,能被高优先级中断请求所中断。为了实现上述后两条原则, 中断系统部设有两个用户不能寻址的优先级状态触发器。其中一个置 1,表示正在响应高优先级的中断,它将阻断后来所有

7、的中断请求;另一个置 1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。一个中断源的中断请求被响应,需满足以下必要条件。(1) CPU开中断,即IE寄存器中的中断总允许位EA=1。(2) 中断源发出中断请求,即该中断源对应的中断请求标志位为1。(3) 中断源的中断允许位 =1,即该中断没有被屏蔽。4)无同级或更高级的中断正在被服务。6.3 中断嵌套中断嵌套的概念是指终端系统正在执行一个中断服务时, 有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源, 待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就

8、是 中断嵌套 。6.4 中断程序设计例1:外部中断 0的应用举例本实例中LED灯依次点亮,形成流水灯,同时伴有蜂鸣器发声。 当按住 时,8位LED全部点亮,蜂鸣器停止发声。当松开时,程序恢复到原来的状态。图68 外部中断应用原理图#include<reg52.h>/包含头文件#include <intrins.h>/包含 _crol_() 函数所在头文件unsigned char temp,num;/声明临时变量unsigned int x,y,z;sbit beep=P2A3;/蜂鸣器位声明sbit duan=卩1人6;/数码管段控制位声明sbit wei=P1A7;

9、/数码管位控制位声明void delay(uint);/声明延时子函数void main()EA=1;/开总中断EX0=1;/duan=0; / wei=0;/temp=0xfe; /while(1) /for(num=0;num<8;num+) /8P0=temp;beep=0;/delay(100);/temp=_crol_(temp,1); /P0=0xff;beep=1;/delay(100);/开外部中断关闭数码管的段选关闭数码管的位选临时变量赋值程序无限循环位 LED 依次点亮蜂鸣器发声延时 100ms循环左移函数蜂鸣器关闭延时 100msvoid delay(z)for(x

10、=z;x>0;x-)for(y=110;y>0;y-); void ex0() interrupt 0P0=0x00; / 点亮 8 位 LED beep=1; / 关闭蜂鸣器 程序解析:(1) 本程序的一大特点是用 _crol_()函数实现了 8位LED的依次点亮。简单明了, 让同学们知道了在编写程序时调用一些函数会使程序的编写大为简化, 但要注意在程序开头 包含该函数所在的头文件。(2) 在编写中断服务子函数时,一定要注意函数的标号(即中断的优先级),该程序用的是 ,在所有中断中优先级最高,所以标号为0。(3) 在主函数的函数初始化中一定要依次开总中断,外部中断。 这样外部中断

11、才能够被触发。(4) 注意延时子函数的编写,这个会经常用到。例2:用定时器TO的中断控制8位LED闪烁本实例要求用定时器 TO中断方式控制 P0口 8位LED以100ms周期性闪烁。图6-9 定时器T0的中断控制8位 LED原理图#include<reg52.h> /包含51单片机寄存器定义的头文件void main(void)EA=1;/ET0=1;/TMOD=0x01;/开总中断定时器T0中断允许使用定时器T0的模式2TH0=(65536-46083)/256; / 定时器 T0 的高 8位赋初值TL0=(65536-46083)%256; / 定时器 T0 的高 8位赋初值T

12、R0=1; / 启动定时器 T0while(1)/ 无限循环等待中断Jvoid Time0(void) interrupt 1 using 0 /“ interrupt ”声明函数为中断服务函数/其后的1为定时器TO的中断编号;0表示使用第0组工作寄存器P0=P0;TH0=(65536-50000)/256; /定时器TO的高8位重新赋初值TL0=(65536-50000)%256; /定时器T0的高8位重新赋初值程序解析:(1) 本程序首先要注意初始化定时器的程序编写方法。具体见定时器有关章节。(2) 注意中断服务子函数中的中断标号和定时器初值重装问题。例3 :用定时器T0的方式控制播放好人

13、一生平安本实例要求定时器 T0的中断控制播放好人一生平安,T0工作于方式0。硬件电路图如下。图6-10 用定时器T0的方式控制播放好人一生平安电路图sbit sou nd=P23;/将 sound 位定义为 P2.3unsigned int C;/储存定时器的定时常数/以下是C调低音的音频宏定义#define l_dao 262/将“l_dao ”宏定义为低音“ 1”的频率 262Hz#define l_re 286/将“l_re ”宏定义为低音“ 2”的频率 286Hz#define l_mi 311/将“ l_mi ”宏定义为低音“ 3”的频率 311Hz#define l_fa 349/

14、将“l_fa ”宏定义为低音“ 4”的频率 349Hz#define l_sao 392/将“ l_sao ”宏定义为低音“ 5”的频率 392Hz#define l_la 440/将“ l_a ”宏定义为低音“ 6”的频率 440Hz#define l_xi 494/将“1 xi ”宏定义为低音“ 7”的频率 494Hz/以下是C调中音的音频宏定义#define dao 523/将“ dao”宏定义为中音“1”的频率 523Hz#define re 587/将“ re ”宏定义为中音“ 2”的频率 587Hz#define mi 659/将“ mi”宏定义为中音“ 3”的频率 659Hz#d

15、efine fa 698/将“ fa ”宏定义为中音“ 4”的频率 698Hz#define sao 784/将“ sao”宏定义为中音“ 5”的频率 784Hz#define la 880/将“la”宏定义为中音“ 6”的频率 880Hz#define xi 987/将“xi ”宏定义为中音“ 7”的频率 523H/以下是C调高音的音频宏定义#define h_dao 1046/将“ h_dao”宏定义为高音“ 1”的频率 1046Hz#define h_re 1174/将“ h_re ”宏定义为高音“ 2”的频率1174Hz#define h_mi 1318/将“ h mi”宏定义为高音“

16、 3”的频率 1318Hz#define h_fa 1396 /将 “h_fa” 宏定义为高音“ 4” 的频率 1396Hz#define h_sao 1567 /将“ h_sao”宏定义为高音“ 5” 的频率 1567Hz1975Hz每行对应一小节音符#define h_xi 1975/将“ h_xi ”宏定义为高音“ 7”的频率void delay()unsigned char i,j;for(i=0;i<250;i+)for(j=0;j<250;j+)void main(void)unsigned char i,j;/ 以下是渴望片头曲的一段简谱unsigned int co

17、de f=re,mi,re,dao,l_la,dao,l_la, / l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,re,re,sao,la,sao, fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re

18、,l_la,dao,re,l_la,dao,re,mi,re,0xff; /以0xff作为音符的结束标志/ 以下是简谱中每个音符的节拍/"4" 对应 4个延时单位, "2" 对应 2个延时单位, "1" 对应 1个延时单位 unsigned char code JP =4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4,2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,4,2,2,4,1,1,4,10,4,2,2,4,1,1,4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论