定时与中断系统.ppt

上传人:本田雅阁 文档编号:2490141 上传时间:2019-04-03 格式:PPT 页数:57 大小:1.29MB
返回 下载 相关 举报
定时与中断系统.ppt_第1页
第1页 / 共57页
定时与中断系统.ppt_第2页
第2页 / 共57页
定时与中断系统.ppt_第3页
第3页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《定时与中断系统.ppt》由会员分享,可在线阅读,更多相关《定时与中断系统.ppt(57页珍藏版)》请在三一文库上搜索。

1、本章内容 中断系统 定时/计数器 C语言的函数,第4章 定时与中断系统,4.3中断系统,CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。,4.3.1 什么是中断,MCS-51单片机的中断系统结构,执行主程序,主程序,继续执行主程序,断点,执行中断处理程序,引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断

2、的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。,随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:,分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率;,实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;,可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。,4.3.2 MCS-51中断系统的结构 80C51的中断系统有5个中断源(8052有 6个),2个优先级,可实现二级中断嵌套 。 一、中断源,1、INT0(P3.2)可由IT0(TCON

3、.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。,4.3.3 中断有关寄存器 一、中断源,2、INT1(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。,3、T0(P3.4),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。,返回,4、T1(P3.5),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位

4、TF1,并向CPU申请中断。,5、RX(P3.0)或TX(P3.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。,二、中断请求标志 1、TCON的中断标志,IT0(TCON.0):外部中断0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 IE0(TCON.1):外部中断0中断请求标志位。 IT1(TCON.2):外部中断1触发方式控制位。 IE1(TCON.3):外部中断1中断请求标志位。 TF0(TCON.5):定时/计数器T0溢出中断请求标志位。 TF1(TCON.7

5、):定时/计数器T1溢出中断请求标志位。,2、SCON的中断标志,RI(SCON.0):串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。 TI(SCON.1):串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。 当中断源需要向CPU请求中断时,相应中断标志位由硬件自动置1。,三、中断的开放和禁止 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。,EX0(IE.0),外部中断0允

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

7、级设定位; PT2(IP.5),定时/计数器T2优先级设定位。,同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:,80C51单片机的中断优先级有三条原则:,CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。 正在进行的低优先级中断服务,能被高优先级中断请求所中断。,为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优

8、先级中断,它将阻断后来所有的低优先级中断请求。,4.3.4 中断处理过程,中断响应条件: 中断源发出中断请求; 此中断源的中断允许位为1; CPU开中断(即EA=1)。 以上三条同时满足时,CPU才有可能响应中断。,中断函数的完整语法: 返回值 函数名(【参数】) interrupt n using n 中断处理程序,中断编程:,利用INT1作为外部中断输入线,每按一次开关K使P1口处的8个LED轮流点亮一次。,#include #include void main( ) EA=1; EX1=1; IT1=1; P1=0xfe; while(1); void int1( ) interrupt

9、 2 using 1 P1 =_crol_(P1,1); ,任务9 :可控霓虹灯控制 正常情况下8个霓虹灯依次顺序点亮,循环显示,时间间隔为1S。当按下控制按钮后,8个霓虹灯同时亮灭一次,时间间隔为0.5S。,主程序: 8个霓虹灯依次循环点亮, 时间间隔为1S,中断处理程序: 8个霓虹灯同时亮灭一次,时间间隔为0.5S,延时子函数,1、主程序: T0初始化,开中断。 8个霓虹灯依次循环点亮,时间间隔为1S。,2、外部中断INT0中断处理程序: 8个霓虹灯同时亮灭一次,时间间隔为0.5S,3、定时/计数器T0中断处理程序: 50ms定时时间到,num+;,#include #define uch

10、ar unsigned char uchar num; void main() uchar num1,w; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;EX0=1;IT0=1;PT0=1; TR0=1; while(1) w=0x01; for(num1=0;num18;num1+) P1=w; w=1; while(num!=20); num=0; ,void int0() interrupt 0 using 1 uchar tempt1,tempt2; tempt1=num; tempt2=P1;

11、num=0; P1=0x00; while(num!=10); P1=0xff; while(num!=20); num=tempt1; P1=tempt2; void timer0() interrupt 1 using 0 num+; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ,4.1定时器/计数器,实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。也可以采用下面三种方法:,软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。 采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬

12、件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。 采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。,4.1.1 定时/计数器的结构和工作原理,一、定时/计数器的结构 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。,二、定时/计数器的工作原理,加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器

13、输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。,设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。,设置为计数器模式时,外部事件计数脉冲由T0或T1

14、引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。,定时/计数器的控制,80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。 一、工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器的工作方

15、式,低四位用于T0,高四位用于T1。其格式如下:,GATE:门控位。GATE0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。 :定时/计数模式选择位。 0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。,二、控制寄存器TCON TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:,TF1(TC

16、ON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。 TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。 TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。 TR0(TCON.4):T0运行控制位,其功能与TR1类同。,4.1.2 定时/计数器的工作方式 一、方式0 方式0

17、为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。,定时器模式时有:Nt/ Tcy 计数初值计算的公式为: 定时器的初值还可以采用计数个数直接取补法获得。 计数模式时,计数脉冲是T0引脚上的外部脉冲。,门控位GATE具有特殊的作用。当GATE=0时,经反相后使 或门输出为1,此时仅由TR0控制与门的开启,与门输出1 时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外部中断引脚信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高

18、电平启动计数,外部中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。,二、方式1 方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。,计数个数与计数初值的关系为:,三、方式2 方式2为自动重装初值的8位计数方式。,工作方式2特别适合于用作较精确的脉冲信号发生器。,计数个数与计数初值的关系为:,四、方式3 方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。,工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。,定时/计数器的初始化 一、初始化步骤 程序应完成如下工作: 对TMOD赋值,以确

19、定T0和T1的工作方式。 计算初值,并将其写入TH0、TL0或TH1、TL1。 中断方式时,则对IE赋值,开放中断。 使TR0或TR1置位,启动定时/计数器定时或计数。,二、定时器的初值X 定时方式:计数初值X = 2n 定时时间/机器周期。 其中n=13、16、8、8分别对应方式0、1、2 、3。,1、求T1的方式控制字TMOD:,0 1,0,0,0 0 0 0,TMOD=0X01;, ,例1:T0工作于定时方式1,定时时间T=10ms,系统主频f=12MHZ,允许中断,对T0进行初始化编程。,2、计算计数初值Count :,由于晶振为12 MHz,振荡周期=1/12MHZ,所以机器周期Tc

20、y为1 ms。 所以:Nt/ Tcy 10000/110000 Count 655361000055536D8F0H 即应将0xD8送入TH0中,0xF0送入TL0中,机器周期=(1/fosc)12,Count = 2n 定时时间/机器周期。, (1/12MHZ)12,3、开中断 EA=1; ET0=1; 4 、启动定时/计数器 TR0=1; 初始化程序: TMOD=0X01; TH0 =0XD8; TL0 =0XF0; EA=1; ET1=1; TR1=1;,定时器的应用举例,例2:设单片机晶振频率f=6MHZ,使用定时器T1以方式1产生周期为500uS的等宽正方形脉冲,并由P1.0脚输出。

21、,确定TMOD寄存器的内容 定时器/计数器1的工作方式为方式1,从而M1M0=01; 实现定时功能,从而C/T=0; 设通过给TR1置位来启动定时器工作,从而GATE=0; 另外,定时器/计数器0不用,从而低四位全为0; 所以(TMOD)=10H。, 计算计数初值 要产生500us的等宽正方波脉冲,只需在P1.0端以250us为周期交替输出高低电平即可实现,从而定时时间为250us,f=6MHz。则 机器周期=2us,利用公式: 定时时间t=计数个数N机器周期T,可得 N=t/T=250us/2us=125; 计数初值X=216-125=65536-125; 这样: TH1= (65536-1

22、25)/256; TL1= (65536-125)%256。,一、采用中断方式,#include void main( ) TMOD=0x10; TH1= (65536-125)/256; TL1= (65536-125)%256; ET1=1; EA=1; TR1=1; while(1); ,void timer1_int( ) interrupt 3 P1_0=P1_0; TH1= (65536-125)/256; TL1= (65536-125)%256; ,系统电路图,二、采用查询方式,void main( ) TMOD=0x10; TH1= (65536-125)/256; TL1=

23、 (65536-125)%256; TR1=1; While(1) While(TF1) P10=P10; TR1=0; TH1= (65536-125)/256; TL1= (65536-125)%256; TF1=0; TR1=1; ,例3:设单片机晶振频率f=12MHZ,在P1.0端接一个发光二极管,利用定时T0工作在方式0,使LED亮1s、灭1s,闪烁。(中断 /查询),用T0、工作方式0实现1秒延时,晶振频率为12MHz。 因工作方式0是13位计数器,其最大定时时间为:2131s = 8192s=8.192ms,为实现1秒延时,可选择定时时间为5ms,再循环200次。定时时间选定后,

24、可确定计数值为5ms/1 s =5000,则T0的初值为: X = 213 计数值=8192 5000 。 采用T0方式0工作,因此,TMOD =0x00。,/*中断方式*/ #include sbit P1_0=P10; unsigned char num0;/全局变量 void main( ) TMOD=0x00; TH0=(8192-5000)%32; TL0=(8192-5000) /32; ET0=1; EA=1; TR0=1; While(1) if (num=200) num=0; P1_0=P1_0; ,void timer0_int( ) interrupt 1 num; T

25、H0=(8192-5000)%32; TL0=(8192-5000) /32; ,/*查询方式*/ #include sbit P1_0=P10; unsigned char num0; void main( ) TMOD=0x00; TH0=(8192-5000)%32; TL0=(8192-5000) /32; TR0=1; While(1) while(TF0) num+; if (num=200) num=0; P1_0=P1_0; ,TR0=0; TH0=(8192-5000)%32; TL0=(8192-5000) /32; TF0=0; TR0=1; ,1、利用定时/计数器T0从

26、P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。试设计程序。 2、采用晶振12MHz,在P1.0引脚上输出周期为2.5S,占空比为20%的脉冲信号。 3、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管。编一个程序,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期)。,习题 1、MCS-51系列单片机的五个中断源是哪些?请按自然优先级的顺序写出。 2、允许外部中断源INT1开中断,IE=_。 3、采用定时/计数器T1计数,工作方式0,软硬结合启动,TMOD=_。 4、利用定时/计数器T1的方式1,产生10ms的定时,并使

27、P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。,定时/计数器,设置定时/计数器工作方式 通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,工作方式以及启动方法。 定时/计数器工作方式有四种:方式0、方式1、方式2和方式3。 定时/计数器启动方式有两种:软件启动和硬软件共同启动。除了从控制寄存器TCON发出的软件启动信号外,还有外部启动信号引脚,这两个引脚也是单片机的外部中断输入引脚。,定时/计数器,设置计数初值 T0、T1是16位加法计数器,分别由两个8位专用寄存器组成,T0由TH0和TL0组成,T1由TH1和TL1组成。TL0

28、、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可被单独访问,因此可以被设置为8位、13位或16位计数器使用。 在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加1计数器,当计到最大值时(对于8位计数器,当计数值从255再加1时,计数值变为0),产生溢出。 定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于8位计数器,当初值设为100时,再加1计数156个,计数器就产生溢出;当初值设为200时,再加1计数56个,计数器产生溢出。,定时/计数器,启动定时/计数器 根据设置的定时/计数器启动方式,启动定时/计

29、数器。如果采用软件启动,则需要把控制寄存器中的TR0或TR1置1;如果采用硬软共同启动方式,不仅需要把控制寄存器中的TR0或TR1置1,还需要相应外部启动信号为高电平。,在C语言程序中,子程序的作用是由函数来实现的,函数是C语言的基本组成模块,一个C语言程序就是由若干个模块化的函数组成的。 C程序都是由一个主函数main( )和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。,4.2 C语言的函数,1.标准库函数 标准库函数是由C51的编译器提供的,用户不必定义这些函数,可以直接调用。KEIL C51编译器提供了100多个库函数供我

30、们使用。常用的C51库函数包括一般I/O口函数、访问SFR地址函数等,在C51编译环境中,以头文件的形式给出。 2.用户自定义函数 用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。,函数分类和定义,函数定义的一般形式是: 函数类型 函数名(形式参数表) 形式参数说明 局部变量定义 函数体语句 其中,“函数类型”说明了自定义函数返回值的类型。 “函数名”是自定义函数的名字。 “形式参数表”给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。ANSI C标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省

31、略。 “局部变量定义”是对在函数内部使用的局部变量进行定义。 “函数体语句”是为完成函数的特定功能而设置的语句。,函数分类和定义,函数调用就是在一个函数体中引用另外一个已经定义的函数,前者称为主调用函数,后者称为被调用函数,函数调用的一般格式为: 函数名(实际参数列表); 如:delay(250); 对于有参数类型的函数,若实际参数列表中有多个实参,则各参数之间用逗号隔开。实参与形参顺序对应,个数应相等,类型应一致。 如:P1=_crol_(P1,1);,函数调用,在一个函数中调用另一个函数需要具备如下条件: (1)被调用函数必须是已经存在的函数(库函数或者用户自己已经定义的函数。 如果函数定义在调用之后,那么必须在调用之前(一般在程序头部)对函数进行声明。 (2)如果程序使用了库函数,则要在程序的开头用include预处理命令将调用函数所需要的信息包含在本文件中。如果不是在本文件中定义的函数,那么在程序开始要用extern修饰符进行函数原型说明。,函数调用,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1