1、第五章 MCS-51单片机的中断系统及定时器,内容提要:,5.1 输入/输出的控制方式,5.2 MCS-51单片机的中断系统,5.4 MCS-51单片机的定时 / 计数器,5.3 MCS-51单片机中断处理过程,5.1 输入/输出的控制方式,一、无条件传送(同步传送)方式 二、程序查询传送(异步传送)方式 三、中断传送方式 四、直接存储器存取(DMA)方式,5.2 MCS-51单片机的中断系统,5.2.1 MCS-51中断系统的结构 5.2.2 MCS-51的中断源 5.2.3 MCS-51中断的控制,5.2.1 MCS-51中断系统的结构,一、概念,与上对比,单片机中也有同样的问题。CPU正
2、 在执行原程序,突然,被意外事情打断,转去执行 新程序。CPU执行新程序结束后,又回到原程序中 继续执行。这样的过程就叫 。,什么叫中断?举例:某同学正在教室写作业,忽然被人叫出去,回来 后,继续写作业。这就是生活中中断的例子。,中断过程示意图,中断源 中断请求(中断申请) 中断响应过程 中断服务 中断返回,中断的几个概念,对突发事故,做出紧急处理。根据现场随时变化的各种参数、信息,做出实时监控。CPU与外部设备并行工作,以中断方式相联系,提高工作效率。解决快速CPU与慢速外设之间的矛盾。在多项外部设备同时提出中断请求情况下,CPU能根据轻重缓急响应外设的中断请求。,中断的作用:,8051单片
3、机中断系统的组成:由五个中断源、四个中断控制寄存器构成。 1、五个中断源:2个外部、2个定时器/计数器、1个串行通信中断 2、四个中断控制寄存器(标志、允许、优先级):中断控制寄存器IE、中断优先级寄存器IP、定时器/计数器控制寄存器TCON(6位)、串行通信寄存器SCON(2位),控制中断类型、中断的开关、中断的优先级,对于MCS-51单片机中断系统的组成可以用一句话来讲, 叫做:“五源中断,两级管理”,中断源的中断请求,如何通知CPU?,利用中断请求标志位来通知!,5.2.2 MCS-51的中断源,一、中断源 1外部中断源 由P3.2端口线引入,低电平或下降沿引起。 由P3.3端口线引入,
4、低电平或下降沿引起。 2内部中断源 T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 TI/RI:串行I/O中断,完成一帧字符发送/接收引起。,以上6个中断请求标志位分别分布在TCON、SCON两个寄存器中。,TCON,二、中断请求标志,定时/计数器控制寄存器,SCON,串行口控制寄存器,在中断源与CPU之间有二级中断允许控制逻辑电路,类似开关,其中第一级为一个总开关,第二级为五个分开关,由IE控制。,一、中断允许控制即中断屏蔽(第一级管理),IE,若为“1”,开关接通,允许 例如 SETB EA 若为“0”,开关断开,不允许 例如 CLR IE.
5、7,5.2.3 MCS-51中断的控制(两级管理),例: 假设某单片机系统允许片内定时器/计数器中断,禁止其它的中断。试设置IE的值。 方法一:用字节操作指令MOV IE,#8AH 或 MOV 0A8H,#8AH方法二:用位操作指令SETB ET0SETB ET1SETB EA,二、中断优先级控制(第二级管理),为什么要有中断优先级?,P S 串口的中断优先级别 PT1 定时 / 计数器T1的中断优先级别 PX1 外部中断1 的中断优先级别 PT0 定时 / 计数器T0的中断优先级别 PX0 外部中断0 的中断优先级别,该位是“1”时,为高级优先级 该位是“ 0”时,为低级优先级,中断优先级次
6、序:(1)高优先级中断能够打断低优先级中断服务程序实现中断嵌套。(2)同级优先级的次序相同优先级中断不能够打断其中断服务程序实现中断嵌套。,同一级中的5个中断源的优先顺序是:,中断优先原则:(概括为四句话) 1、低级不打断高级 2、高级不睬低级 3、同级不能打断 4、同级、同时中断,事先约定。,例: 假设某单片机系统片外中断为高优先级,片内中断为低优先级。试设置IP的值。 方法一:用字节操作指令MOV IP,#05H 或 MOV 0B8H,#05H方法二:用位操作指令SETB PX0SETB PX1CLR PSCLR PT0CLR PT1,5.3 MCS-51单片机中断处理过程,中断处理过程分
7、为三个阶段:中断响应、中断处理、中断返回5.3.1 中断响应条件和时间 5.3.2 中断响应过程 5.3.3 中断返回 5.3.4 中断程序举例,一、中断响应条件(3条) (1)有中断请求; (2)CPU开放中断,即EA=1; (3)对应的中断源允许中断; 只有同时满足这三个条件时,CPU才有可能响应中断,5.3.1 中断响应条件和时间,单片机在每个机器周期的S5P2期间,顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在再下一个机器周期S1期间按优先级进行中断处理。 中断得到响应后自动清除中断标志,由硬件将程序计数器PC内容压入堆栈保护
8、,然后将对应的中断矢量装入程序计数器PC,使程序转向中断矢量地址单元中去执行相应的中断服务程序。,(38个机器周期)1、基本响应时间(3个机器周期) (1)查询中断标志:1个机器周期; (2)转去执行中断服务程序:2个机器周期。2、额外的处理时间(0 5 个机器周期) RETI指令:2个机器周期; MUL或DIV指令:4个机器周期。,二、中断响应时间,注意:1)保护断点与保护现场以及恢复断点与恢复现场的区别。2)外部中断响应时间在3 8个机器周期之间。利用外部中断实现单步操作:,+5v,在主程序中: CLR IT0 SETB EA SETB PX0 SETB EX0 在中断服务子程序中: JN
9、B P3.2 , $ JB P3.2 , $ RETI,响应过程:(假设已使某中断请求标志置1) (1)先使相应优先级状态触发器置1; (2)执行一个硬件子程序的调用,1)硬件清零相应中断请求标志(TI、RI除外)2)将当前PC内容压入堆栈保护断点;3)将中断服务子程序入口地址送PC转移。 (3)执行中断服务程序,5.3.2 中断响应过程,五个中断源: 入口地址外部中断0(/INT0) 0003HT0溢出中断 000BH外部中断1(/INT1) 0013HT1溢出中断 001BH串口中断 0023H,中断请求源(“五源中断”),返回过程:(RETI执行后) (1)使相应优先级状态触发器清0。
10、(2)从堆栈中弹出栈顶的两个字节内容送PC恢复断点。 (3)CPU接着中断处继续执行原程序。,5.3.3 中断返回,5.3.4 中断程序举例,中断服务程序的结构 1、保护现场; 2、处理中断的程序; 3、恢复现场; 4、中断返回:RETI 编写中断服务程序应注意的几点 1、中断程序入口处的处理; 2、程序中可以禁止高级中断; 3、在保护和恢复现场时可 关闭CPU中断,以免造成混 乱。,多中断源系统,当外部中断源多于中断输入引脚时,可采取以下措施: 1.用定时器计数输入信号端T0、T1作外部中断入口引脚 2.用串行口接收端RXD作外部中断入口引脚 3.用一个中断入口接受多个外部中断源,并加入中断
11、查询电路。,处理外部中断举例,要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。解:INT0输入按键信号,P1.0输出改变LED状态。 一、跳变触发:每次跳变引起一次中断请求,ORG 0000HAJMP MAINORG 0003H ;中断入口 AJMP PINT0ORG 0100H ;主程序MAIN:SETB EA ;开总允许开关SETB EX0 ;开INT0中断SETB IT0 ;负跳变触发中断Here:SJMP Here ;相当于执行其 它任务ORG 0200H ;中断服务程序PINT0:CPL P1.0 ;改变LEDRETI ;返回主程序,1软件等待按键释放。 2硬件清除中断信号
12、。,电平触发:避免一次按键引起多次中断响应。,ORG 0000H; AJMP MAINORG 0003H ;中断入口 AJMP PINT0ORG 0100H ;主程序MAIN:SETB EA ;开总允许开关SETB EX0 ;开INT0中断CLR IT0 ;低电平触发中断Here:SJMP Here ;相当于执行其它任务ORG 0200H;中断服务程序PINT0:CPL P1.0 ;改变LEDWAIT:JNB P3.2,WAIT;等按键释放RETI ;返回主程序,中断处理流程,小 结,1、MCS-51单片机中断系统有几个中断源?分别是什么?事先约定的优先顺序是怎样的? 2、如何进行中断允许控制
13、?如何进行中断优先级控制? 3、中断优先的规则是什么?,5.4 MCS-51单片机的定时 / 计数器,5.4.1 定时/计数器的结构和工作原理 5.4.2 定时/计数器的控制 5.4.3 定时/计数器的工作方式 5.4.4 定时/计数器应用举例,在实时控制系统中,常常要求有实时时钟以实现定时或延时控制,也常需要有计数功能实现对外界事件进行计数。 常用的方法有: 软件定时 不可编程的硬件定时 可编程的硬件定时,5.4.1 定时/计数器的结构和工作原理,一、定时/ 计数器的结构,51子系列单片机内有两个十六位增一 定时 / 计数器,TH0,计数值高八位,TL0,计数值低八位,TH1,计数值高八位,
14、TL1,计数值低八位,TMOD,TCON,工作方式,定时 / 计数控制,定时/计数器结构,定时/计数器简称定时器,8031单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。 T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。,8051单片机内有两个16位定时器/计数器,常称为定时器0和定时器1,简称为T0和T
15、1;均可作定时器用也可计数器,为加1计数器;用于定时控制、延时、外部计数和检测等。其结构如下图所示。,外部控制门,作为定时器用时的计时速度:一个机器周期计数器加1,直至计满溢出。如晶振为12MHz的单片机,一个机器周期为1S,其计数频率为振荡频率的1/12 。作为计数器用时的计数速度:每两个机器周期计数器加1,计数频率最高为振荡频率的1/24。在S5P2对计数输入引脚T0、T1进行采样,下降沿计数。说明:定时器/计数器在工 作期间不占用CPU的时间。,1、工作方式控制寄存器 TMOD,5.4.2 定时/计数器的控制,TMOD各位的意义如下:,2、定时 / 计数器控制寄存器TCON,TCON,能
16、否启动定时 / 计数器工作与GATE有关,分两种情况:GATE = 0 时,若TRi = 1,开启Ti计数工作;(i = 0或1)若TRi = 0,停止Ti计数。GATE = 1 时,若TRi = 1 且/INTi = 1时开启Ti计数;若TRi = 1 且/INTi = 0时不能开启Ti计数。若TRi = 0, 停止Ti计数。,TCON各位的意义如下:,定时 / 计数器的四种工作模式,M1 M0 模式 说明0 0 0 13位定时/计数器高八位TH(7 0)+ 低五位TL(4 0)0 1 1 16位定时/计数器TH(7 0)+ TL(7 0)1 0 2 8位计数初值自动重装TL(7 0) TH
17、(7 0)1 1 3 T0运行,而T1停止工作,8位定时/计数。,5.4.3 定时/计数器的工作方式,1、机构计数寄存器TLi 低5位 + THi8位 (T1、T0的等效逻辑结构),TLi (5位),THi (8位),TFi,中断,04 07,一、方式0,C/T = 0 定时; C/T = 1 对外计数。 定时:fosc / 12 = 1 /(12/fosc) = 1 / T,波形等间隔,次数已定,时间确定 即对机器周期进行计数。,左图定时时间为 N*T,N个方波,计数:脉冲不等间隔。,每个下降沿计数一次 确认一次负跳变需两个机器周期, 所以,计数频率最高为fosc / 24。,模式0工作时的
18、构成:(1)运行控制部分;(2)定时/计数信号源;(3)13位计数器;(4)溢出标志。 2、特点1、可定时(C/T=0)、可计数(C/T=1) ;2、13位方式(TL0、1的低5位和TH0、1的8位);3、INT0、INT1是定时器/计数器0、1的外部门,GATE=1允许使用外部门(TR0、1应置1), 此时用外部门控制运行GATE=0禁止外部门,此时用TR0、1控制运行; 3、计数值N和定时时间t的计算 :N= 213- 初值Xt=(213-初值X)*振荡周期*12=(213-初值X)*机器周期Tcy 最大计数值为: 213 = 8192,4、应用举例例: 设定时器T0选择工作模式0,定时时
19、间为1ms, osc=6MHz。试确定T0初值,计算最大定时时间T。解: (1)求T0的初值X 由公式:t=(213-T0初值)*机器周期Tcy t=1ms=1000s机器周期Tcy=12/osc=12/6000000s=2s 得 1000=( 213 -X)*2 所以初值 X=8192-500=7692=1111000001100B T0的低5位:01100B=0CH T0的高8位:11110000B=F0H (2)最大定时时间T 当T0的初值=0时为最大定时时间T=(213 -0)*2=8192*2s =16384 s =16.384ms,7692 32 商为高8位, 余数为低5位,例:
20、设T1以模式0定时,定时时间为1ms, osc=6MHz,编程实现其定时功能。 解: (1)计算初值(同上,略)F0HTH0,0CHTL0 (2)程序清单ORG 0000H RESET:AJMP MAINORG 000BHAJMP IT0P ;主程序ORG 0100H MAIN: MOV SP,#5FH,MOV TL0,#0CH MOV TH0,#0F0H SETB TR0 SETB ET0 SETB EA SJMP $,;中断服务程序ORG 0120H IT0P:MOV TL0,#0CHMOV TH0,#0F0HCPL P1.0RETI,例: 利用T0的工作模式0产生1ms的定时,编程实现在
21、P1.0引脚上输出周期为2ms的方波。设单片机的晶振频率osc=12MHz。 解: 方法:定时1ms,对P1.0取反,然后继续定时 (1)设置模式字TMOD= * 0000B=00000000B=00H(2)计算初值 由公式:t=(213-T0初值)*机器周期 t=1ms=1000s, 机器周期Tcy=12/osc=12/12000000s=1s 得 1000=( 213 -X)*1=(8192-X)*1 所以初值 X=7192=1110000011000B T0的低5位:11000B=18H T0的高8位:11100000B=E0H,7192 32 商为高8位, 余数为低5位,(3)程序清单
22、 方法一:中断方式ORG 0000H RESET:LJMP MAINORG 000BHLJMP CTC0 ;主程序ORG 0030H MAIN: MOV SP,#5FHMOV TMOD,#0MOV TL0,#18HMOV TH0,#0E0HSETB EASETB ET0SETB TR0SJMP $,;中断服务程序ORG 0100H CTC0:MOV TL0,#18HMOV TH0,#0E0HCPL P1.0RETI,方法二:查询方式ORG 0000H START:MOV SP,#5FHMOV TMOD,#0MOV TL0,#18HMOV TH0,#0E0H SETB TR0 LOOP: JBC
23、 TF0,NEXTSJMP LOOP NEXT: MOV TL0,#18HMOV TH0,#0E0H CPL P1.0SJMP LOOP,可替换为: LOOP:JNB TF0,$CLR TF0MOV TL0,#18H :,与模式0相似。与模式0的区别:计数位数不同。 计数 寄 存 器:THi(高8位)+ TLi(低8位) 1、方式1工作时的结构构成:(1)定时/计数信号源;(2)运行控制部分;(3)16位计数器; (4)溢出标志。,二、方式1,2、特点1、可定时(C/T=0)、可计数(C/T=1) ;2、16位方式(TL0、1为低8位,TH0、1为高8位);3、INT0、INT1是定时器/计数
24、器0、1的外部门,GATE=1允许使用外部门(TR0、1应置1), 此时用外部门控制运行GATE=0禁止外部门,此时用TR0、1控制运行;4、计数值N和定时时间t的计算 :N= 216-初值Xt=(216-初值X) *机器周期Tcy 最大计数值为: 216 =65536,例:用定时器T1产生一个50Hz的方波,由P1.1输出。使用程序查询方式,设osc=12MHz。 解:(1)计算初值 方波周期T为:T=1/50s=0.02s=20ms 定时时间为:t=T/2=10ms=10000s 由公式: t=(216-X)*机器周期Tcy 因Tcy=1s,得 10000= (216-X)*1, 1000
25、0=65536-X X=55536=D8F0H,55536 256 商为高8位, 余数为低8位,(2)模式字TMOD TMOD=0001*B=10H(3)源程序ORG 0000HMOV TMOD,#10HSETB TR1 LP: MOV TH1,#0D8HMOV TL1,#0F0HJNB TF1,$CLR TF1CPL P1.1SJMP LP,与模式0、1的区别:1)计数位数不同;2)初值自动重装。 1、方式2工作时的结构构成:(1)定时/计数信号源; (2)运行控制部分;(3)8位带装入计数器; (4)溢出标志。,三、方式2,2、特点1、可定时(C/T=0)、可计数(C/T=1) ;2、8位
26、自动装入方式(TL0和TH0装入相同数);3、INT0、INT1是定时器/计数器0、1的外部门,GATE=1允许使用外部门(TR0、1应置1), 此时用外部门控制运行GATE=0禁止外部门,此时用TR0、1控制运行;4、计数值N和定时时间t的计算 :N= 28- 初值Xt=(28- 初值X) *机器周期Tcy 最大计数值为: 28 =256 说明:常用T1以模式2工作作为串口的波特率发生器。,例: 当P3.4引脚上输入的电平发生负跳变时,从P1.0输出一个500s的同步脉冲,请编程实现该功能。设osc=6MHz。 解题思路:先令T0以模式2计数,其初值设为FFH,当P3.4引脚上输入的电平发生
27、负跳变时,计数器加1使溢出标志置1;然后令T0以模式2定时,使P1.0输出一个500s的同步负脉冲。,解:1、 T0以模式2计数(1)计数初值 X=0FFH(2)模式字 TMOD=*0110B=06H 2、 T0以模式2定时(1)定时初值X计算t=500 s , Tcy=2 s 由公式: t=(28-X)*机器周期Tcy 得 500=(256-X)*2 X=6(2)模式字TMOD=*0010B=02H,3、程序清单:ORG 0000H START:MOV TMOD,#6 ; T0以模式2计数MOV TH0,#0FFHMOV TL0,#0FFHSETB TR0JNB TF0,$CLR TF0CL
28、R TR0MOV TMOD,#2 ; T0以模式2定时,MOV TH0,#06MOV TL0,#06CLR P1.0SETB TR0 JNB TF0,$SETB P1.0CLR TF0CLR TR0SJMP START,例: 利用定时器T1的模式2对外部信号计数,要求每计满100次对P1.0端取反。 解:(1)计算计数初值X100=28-X X=256-100=156=9CH(2)模式字TMOD=0110*B=60H(3)程序清单 ;用中断方式ORG 0000H MAIN:MOV TMOD,#60HMOV TL1,#156MOV TH1,#156MOV IE,#88HSETB TR1SJMP
29、$,;中断服务程序ORG 001BH CPL P1.0 RETI,T0定时/计数,而T1停止计数,但可作波特率发生器。T0分成两独立定时/计数器TL0和TH0。 TL0使用C/T、GATE、TR0、/INT0、TF0定时/计数,TH0使用TR1、TF1 因此,只能用于定时 1、方式3工作时的结构构成:(1)定时/计数信号源;(2)两个运行控制部分;(3)两个8位计数器; (4)两个溢出标志。,(a)TL0作8位定时/计数器,(b)TH0作8位定时器,四、方式3,模式3时,T1可定时为模式0、1、2的定时/计数,但不可中断,所以一般只作串口波特率发生器用。,(a) T0模式3时T1模式0,(b)
30、 T0模式3时T1模式1,(c) T0模式3时T1模式2,2、特点1、仅T0具有模式3,为两个8位方式,用TL0和TH0 (1)用TL0的既可计数也可定时,与其它模式完全相同; (2)用TH0的仅能够定时,不能用外部控制门,且占用 T1的资源TR1和TF1,有运行控制和溢出中断请求。2、T1可以模式02定时或计数,但溢出无中断请求, 且开关已经接通。常以模式2工作,作为串口的波特率 发生器。如下图所示。,例设某单片机系统中已经使用了两个外部中断源,并置定时器T1为模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。 osc=12MHz。 解:1、
31、确定定时器的工作方式将T0设置为模式3计数,T0的引脚接外部中断源,TL0的计数初值设为FFH,下降沿产生中断;T0的TH0为8位定时器,可产生方波,用中断方式;T1设为模式2定时,作串行口的波特率发生器。 2、计算各个初值(1)TL0的初值 为0FFH(2)TH0的初值 产生5kHz的方波的周期为:T=1/5000s=0.2ms=200 s,因此TH0的定时时间为:t=T/2=100 s , Tcy=1 s 得 100=(256-X)*TcyX=256-100=156TH1=TL1,由波特率值确定 3、TMOD值: 00100111B=27HTCON值: 01010101B=55H 4、程序
32、清单:(1)中断入口部分:ORG 0000H START:LJMP MAINLJMP E0INTORG 000BHLJMP TL0INT,ORG 0013H LJMP E1INT ORG 001BH LJMP TH0INT,(2)主程序部分: MAIN:MOV SP,#5FHMOV TMOD,#27HMOV TL0,#0FFHMOV TH0,#156MOV TH1,#dataMOV TL1,#dataMOV IE,#9FH ;开中断:,(3)中断处理程序部分:TL0溢出中断服务程序: TL0INT:MOV TL0,#0FFH(外部中断处理)RETITH0溢出中断服务程序: TH0INT:MOV
33、 TH0,#156CPL P1.0ERTI(其它外部中断服务程序略),编程前确定参数: (1)定时/计数器 T0、T1选择其一, (2)工 作 方 式 C/T及GATA, (3)计 数 初 值 加1计数、16位。,计数:X=MN;M=213=8192(模式0)M=216=65536(模式1)M=28=256 (模式2、模式3) 定时: X=MN =M t/T(t为所要求的定时时间,T为机器周期),(4)工 作 模 式 M1、M0,5.4.4 定时/计数器应用举例,编制初始化程序: 1)写TMOD; 2)确定IE、IP; 3)写计数初值; 4)启动计数(TRi),例、设计一个能产生t=1ms的周
34、期信号发生器,试编程。 解:选T0; C/T=0,GATE= 0,N = t / T = t /12(1/fosc)= 500所以, X = M 500 ,模式0、模式1均可,取模式0,M=213=8192 X = 8192500 = 7692 = 1E0CH,= 0001 1110 000 0 1100B,,1E0CH,TL0,TH0,F0H,0CH,先将低五位放入TL0中,再将剩余的数从右 向左数出八位放入TH0中。,LJMP MAINORG 000BHLJMP INSE1ORG 1000HMAIN: MOV SP,#60HMOV TL0,#0CHMOV TH0,#0F0HMOV TMOD
35、,#00H,SETB TR0SETB ET0 SETB EASJMP ,ORG 0000H,INSE1: MOV TL0,#0CHMOV TH0,#0F0HCPL P10RETI,小结:1、MCS-51单片机内有几个定时计数器?如何计数?2、T0、T1有几种工作方式?3、编程应用前要事先确定的参数有几个?,综合应用:定时 / 计数器,TCON,复习:,例、设fosc = 6MHz,利用单片机内定时/计数器及P1.0口线输出1000个脉冲,脉冲周期为2ms,试编程。,T = 121/fosc = 2us选取T0定时;T1计数。,设T0采用中断方式产生周期为2ms方波,T1对该方波计数,当输出至第
36、1000个脉冲时,使TF1置1。 在主程序中用查询方法,检测到TF1变1时,关掉T0,停止输出方波。,T0、T1参数的确定: T0模式0、定时:脉宽为脉冲周期的一半 所以,X = 2131ms / 2us = 0001 1110 0000 1100B TH0 = 0F0H ; TL0 = 0CHT1模式1、计数:N = 1000则 X = 655361000 = 64536 = 0FC18H(若选模式0也可以,此时X = 7192=1C18H),程序:ORG 0000HLJMP MAINORG 000BHLJMP TOSORG 1000H,MAIN: MOV TMOD,#50H;T0定时,模式
37、0;T1计数,模式1MOV TL0,#0CHMOV TH0,#0F0HMOV TL1,#18HMOV TH1,#0FCH,SETB TR1SETB TR0SETB ET0SETB EAWAIT: JNB TF1,WAIT;查询1000个脉冲计够没有到?CLR EACLR ET0ANL TCON,#0FH ; 停T0、T1SJMP TOS: MOV TL0,#0CHMOV TH0,#0F0HCPL P1.0RETIEND,例、脉冲参数测量GATE功能的使用。脉冲高电平(计数)长度值存于21H、20H中,脉冲低电平长度存于23H、22H中。电路连接如下图所示。,解: 复习GATE的用法:GATE
38、= 0时,TRi = 1,即可启动Ti定时 / 计数GATE = 1时,TRi = 1,且 =1,才启动定时 / 计数。,ORG 0000HLJMP MAINORG 2000H MAIN:MOV TMOD,#99H ;T0、T1均工作在定时,;模式1,GATE=1MOV A,#00H ;T0、T1赋计数初值00H,; 定时最长时间为0000 65536MOV TL0,A,MOV TH0,AMOV TL1,AMOV TH1,A,TEST0: JB P32,TEST0 ;检测是否到a点SETB TR0 ;到a点,TR0 = 1,做好取计时值准备。 TEST1: JNB P32,TEST1 ;检测是
39、否到1点SETB TR1 ;到1点T0计时;TR1 = 1,做好T1计时准备。 TEST2:JB P32,TEST2 ;检测是否到2点CLR TR0 ;到2点,停止T0计时,T1开始计时。MOV 20H,TH0 ;保存T0计时结果MOV 21H,TL0,TEST3:JB P33,TEST3 ;检测是否到3点CLR TR1 ;到3点,停止T1计数MOV 22H,TH1 ;保存T1计数结果MOV 23H,TL1 LCALL DISPSJMP ,定时/计数器及中断系统综合应用,【例】设MCS-51单片机系统时钟频率CLK为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为5
40、0%的方波信号的程序 (1)主程序 任务:1)T0工作方式的设定: 选择方式1(16位方式)(最大定时131ms)2)定时常数的设定: TC=216-100ms/2s =15536=3CB0H,即:TH0应装3CH,TL0应装B0H。 3)中断管理: 允许T0中断,开放总中断即:IE应装10000010B。4)启动定时器T0: SETB TR05)设置软件计数器初值:(如使用R7) 即R7应装0AH6)动态停机:SJMP $,主程序如下: MAIN: MOV TMOD,#01H ;设定T0为方式1MOV TH0,#3CH ;装入定时常数高8位MOV TL0,#0B0H ;装入定时常数低8位MO
41、V IE,#82H ;开放T0中断SETB TR0 ;启动T0MOV R7,#0AH ;设置软件计数器SJMP $,(2)中断服务程序 任务:1)恢复T0常数; 2)软件计数器减1; 3)判断软件计数器是否为0。为0时,改变P1.0状态,并恢复软件计数器初值;不为0时中断返回。 程序如下: TOINT: MOV TL0,#0B0H ;恢复定时常数MOV TH0,#3CH ;DJNZ R7,NEXTCPL P1.0 MOV R7,#0AH NEXT: RETI,完整程序如下:ORG 0000H AJMP MAINORG 000BH AJMP TOINTORG 0030H MAIN: MOV TMOD,#01HMOV TH0,#3CH MOV TL0,#0B0HMOV IE,#82H SETB TR0MOV R7,#0AH,SJMP $ TOINT: MOV TL0,#0B0HMOV TH0,#3CHDJNZ R7,NEXTCPL P1.0 MOV R7,#0AH NEXT: RETIEND,小结:1、定时/计数的四种方式是怎样的?2、如何计算计数初值?如何编程送入计数初值?3、GATE的用法是怎样的?,布置作业:P94 1、3、7,THANK YOU VERY MUCH !,本章到此结束, 谢谢您的光临!,