定时计数器及其应用_第1页
定时计数器及其应用_第2页
定时计数器及其应用_第3页
定时计数器及其应用_第4页
定时计数器及其应用_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、定时计数器及其应用第1页,共68页,2022年,5月20日,0点49分,星期三 定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。80C51定时/计数器第2页,共68页,2022年,5月20日,0点49分,星期三 在工业检测、控制中,很多场合都要用到计数或者定时功能。例如对外部脉冲进行计数、产生精确的定时时间、作串行口的波特率发声器等。MCS51单片机内部有两个可编程的定时器/计数器,以满足这方面的需要。它们具有 两种工作模数(计数器模式、 定时器模式

2、)和四种工作方式( 方式0、方式1、方式2、方式3),其控制字均在相应的特殊功能寄存器(SFR)中,通过对它的SFR的编程,可以方便的选择工作模数和工作方式。第3页,共68页,2022年,5月20日,0点49分,星期三 定时器/计数器: Timer/Counter 本质上都是加法计数器,当对固定周期的脉冲信号计数时是定时器,对脉冲长度不确定的信号计数时是计数器。 每接收到一个计数脉冲,加法计数器的值就加一,当计满时发生溢出,并从0开始继续计数。 加法计数器的计满溢出信号就是定时/计数器的输出,该信号使TCON的某位(TF0或TF1位)置一,作为定时器/计数器的溢出中断标志。第4页,共68页,2

3、022年,5月20日,0点49分,星期三1定时/计数器的结构6.1 定时器的结构及工作原理内部总线工作方式工作方式TH 1TL 1TH 0TL 0 TCONTMODT 1( P3.5)T 0( P3.4)微处理器定时器:对片内机器时钟(周期方波)进行计数计数器:对Tx引脚输入的负脉冲进行计数第5页,共68页,2022年,5月20日,0点49分,星期三80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。计数器由二个8位计数器组成。定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加

4、1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。2. 定时/计数器概述第6页,共68页,2022年,5月20日,0点49分,星期三定时器计数器的功能:定时和计数。1计数功能 计数:对外部事件进行计数。 外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。 计数输入端:T0(P3.4)和T1(P3.5)。 外部输入的脉冲在负跳变时有效,进行计数器加1(加法计数)。第7页,共68页,2022年,5月20日,0点49分,星期三第8页,共

5、68页,2022年,5月20日,0点49分,星期三2定时功能实现方法:通过计数器的计数实现。与计数功能的不同之处:计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每个机器周期计数器加1。 一个机器周期=12个振荡周期, 故,计数频率为振荡频率的1/12。若:单片机晶振6MHz,则计数频率为0.5MHz, 2微秒计数器加1.第9页,共68页,2022年,5月20日,0点49分,星期三定时器工作方式的特点: 当定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。 因此, 定时器/计数器是一种可编程

6、部件。编程:在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时器/计数器,决定T0、T1的工作方式。第10页,共68页,2022年,5月20日,0点49分,星期三将控制字写入定时器/计数器的过程叫定时器/计数器的初始化。 初始化内容: 规定T0、T1的工作方式; 将工作方式控制字写入方式寄存器 规定T0、T1的工作状态; 将工作状态控制字写入控制寄存器 赋定时/计数初值。第11页,共68页,2022年,5月20日,0点49分,星期三高4位控制T1低4位控制T0门控位计数/定时方式选择工作方式选择门控位计数/定时方式选择工作方式选择GC / TM1M0GC / TM1M0T

7、MOD用于设定定时/计数器的工作方式低4位用于控制T0,高4位用于控制T1。1. 工作方式控制寄存器TMOD M1M0 工作方式选择位M1M0工作方式功能00方式013位计数器,TH高位和TL低位01方式116位计数器10方式2两个8位计数器,初值自动装入11方式3两个8位计数器,仅适用T06.2 定时器的控制第12页,共68页,2022年,5月20日,0点49分,星期三 C/T 计数/定时方式选择位 C/T=1,计数工作方式,对外部事件脉冲计数,用作计数器。 C/T=0,定时工作方式,对片内机周脉冲计数,用作定时器。 GATE 门控位 GATE=0,运行只受TCON中运行控制位TR0/TR1

8、的控制。 GATE=1,运行同时受TR0/TR1和外中断输入信号的双重控制。 只有当INT0/INT1=1且TR0/TR1=1,T0/T1才能运行。 TMOD字节地址89H,不能位操作,设置TMOD须用字节操作指令。第13页,共68页,2022年,5月20日,0点49分,星期三设 定时器1为定时工作方式,要求由软件启动定时器1,按方式2工作。定时器0为计数方式,要求由软件启动定时器0,按方式1工作。 MOV TMOD,#25H。 位序号 D7D6D5D4 D3D2D1D0位符号GATE 0C/T0M10M00GATE0C/T1M10M01第14页,共68页,2022年,5月20日,0点49分,

9、星期三TCON低4位与外中断 、 有关,已在中断中叙述。 高4位与定时/计数器T0、T1有关。 TF1:定时/计数器T1溢出标志。 TF0:定时/计数器T0溢出标志。 TR1:定时/计数器T1运行控制位。TR1=1,T1运行;TR1=0,T1停。 TR0:定时/计数器T0运行控制位。TR0=1,T0运行;TR0=0,T0停。TCON的字节地址为88H,每一位有位地址,均可位操作。2. 控制寄存器TCONTCONT1中断标志T1运行标志T0中断标志T0运行标志INT1中断标志INT1触发方式INT0中断标志INT0触发方式位名称TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8

10、DH8CH8BH8AH89H88H第15页,共68页,2022年,5月20日,0点49分,星期三6.3 定时器/计数器的四种工作方式四种工作方式: 即方式0、方式1、方式2和方式3。其中: 方式0、1和2下,T0和T1的工作方式相同, 方式3下,两个定时器的工作方式不同。6.3.1 方式0 13位计数结构的工作方式。 图6-2是定时器/计数器0在工作方式0下的逻辑结构。 T1的结构和操作与T0完全相同。第16页,共68页,2022年,5月20日,0点49分,星期三计数脉冲输入定时器计数器共有四种工作方式 1. 方式013位方式 TF0T0TR0GATEINT011&C/T=1振荡器1/12C/

11、T=0TL0 TH08位低5位13位计数器定时器计数器第17页,共68页,2022年,5月20日,0点49分,星期三定时时间的计算公式为: T=(MT0初值)振荡周期 12(或TC=MT/T0 )其中:T定时器的定时时间,即设计任务要求的定时时间; M计数器的模值; T0定时器需要预置的初值。 若设初值T0=0,则定时器定时时间为最大。若设单片机系统主频为12MHz,则各种工作方式定时器的最大定时时间为:工作方式0: Tmax=2131s=8.192ms工作方式1: Tmax=2161s=65.536ms工作方式2和3:Tmax=281s=0.256ms第18页,共68页,2022年,5月20

12、日,0点49分,星期三当GATE0时, 若TR0=1,接通计数控制K,启动T0在原计数值上加1计数,直至溢出。 若TR00,则关断控制开关,停止计数。当GATE1,且TR01时, 或门、与门全部打开,外信号电平 通过引脚 直接开启或关断定时器计数。 输入1电平时,允许计数,否则停止计数。第19页,共68页,2022年,5月20日,0点49分,星期三由于定时器/计数器以加1方式计数,当定时器/计数器用于计数工作方式时,假定要求的计数长度为N,则应装入定时器/计数器的初值 X213N。 在方式0下,计数的长度范围为18192。 第20页,共68页,2022年,5月20日,0点49分,星期三 当工作

13、于定时状态时,由于定时器/计数器是计数内部的机器周期,每个机器周期包括12个振荡周期,若晶振频率为6MHz,则:机器周期Tp12/晶振频率12/(6106)2us若需要的定时时间: Tc,则需要的机器周期数NTc/Tp。则应装入定时器/计数器的初值 X213N。若晶振频率为6MHz,则当X8191时,具有最小的定时时间为2us;当X0时,具有最大的定时时间为16384us。第21页,共68页,2022年,5月20日,0点49分,星期三其中: N与工作方式有关: 方式0时,N=13; 方式1时,N=16; 方式2、3时,N=8。 机周时间与主振频率有关:机周时间=12/fosc fosc=12M

14、HZ时,1机周=1S; fosc=6MHZ 时,1机周=2S。 80C51定时/计数初值计算公式:第22页,共68页,2022年,5月20日,0点49分,星期三解:工作方式0: 213500S/2S=8192-250=7942=1F06H 1F06H化成二进制: 1F06H=0001 1111 0000 0110B =000 11111000 00110 B其中:低5位00110前添加3位000送入TL0 TL0=000 00110B=06H; 高8位11111000B送入TH0 TH0=11111000B=F8H。【例】 已知晶振6MHz,要求定时0.5ms,试分别求出T0工作于方式0、方式

15、1、方式2、方式3时的定时初值。第23页,共68页,2022年,5月20日,0点49分,星期三 工作方式1: T0初值 =216-500s/2s=65536250=65286=FF06H TH0=FFH;TL0=06H。 工作方式2: T0初值 =28-500s/2s=256-250=6 TH0=06H;TL0=06H。 工作方式3: T0方式3时,被拆成两个8位定时器,定时初值可分别计算,计算方法同方式2。两个定时初值一个装入TL0,另一个装入TH0。因此: TH0=06H;TL0=06H。 从上例中看到,方式0时计算定时初值比较麻烦,根据公式计算出数值后,还要变换一下,容易出错,不如直接用

16、方式1,且方式0计数范围比方式1小,方式0完全可以用方式1代替,方式0与方式1相比,无任何优点。第24页,共68页,2022年,5月20日,0点49分,星期三6.3.2 方式1计数器由TH 8位和TL8位构成。当定时器/计数器用于计数工作方式时,假定要求的计数长度为N,则应装入定时器/计数器的初值X216N。在方式0下,计数的长度范围为165536。当工作于定时状态时,若需要的定时时间为Tc,则需要的机器周期数NTc/Tp(Tp机器周期),则应装入定时器/计数器的初值X216N。若晶振频率为6MHz,则当X65535时,具有最小的定时时间为2us; 当N65536时,具有最大的定时时间为131

17、072us131ms。第25页,共68页,2022年,5月20日,0点49分,星期三图6-3 T0(或T1)方式1结构16位计数器第26页,共68页,2022年,5月20日,0点49分,星期三例:设单片机晶振频率fosc6MHz,使用定时器1以方式1产生周期为500us的等宽正方波脉冲,并由P1.7输出。以中断方式完成。(1)计算计数初值设待求的计数初值为X,则: (216X)2us250us得: X65411FFA1H, 则: TH1FFH,TL1A1H。(2)TMOD寄存器初始化第27页,共68页,2022年,5月20日,0点49分,星期三位序号 D7D6D5D4 D3D2D1D0位符号G

18、ATEC/TM1M0GATEC/TM1M000100000M1M010, C/T 0, GATE0 所以: TMOD10H第28页,共68页,2022年,5月20日,0点49分,星期三(3)程序清单:ORG 0000HAJMPMAINORG001BHAJMPTIMER1ORG1000HMAIN: MOVTMOD,#10H;设置T1工作方式1MOVTH1,#0FFH;设置计数初值MOVTL1,#A1H;SETBEA;开中断第29页,共68页,2022年,5月20日,0点49分,星期三SETBET1;定时器1允许中断LOOP:SETBTR1;定时开始HERE: SJMP $;等待中断TIMER1:

19、MOVTH1,#0FFH;T1中断服务程序;重新设置计数初值MOVTL1,#A1H;CPLP1.7RETIEND;程序结束第30页,共68页,2022年,5月20日,0点49分,星期三6.3.3. 方式2方式2具有自动重新加载功能,即自动加载计数初值。在该工作方式下,把16位计数器分为两部分,即以TL作计数器,以TH作预置寄存器,初始化时把计数初值分别装入TL和TH中。当计数溢出时,由预置寄存器TH以硬件方法自动给计数器TL重新加载,继续计数,循环重复。第31页,共68页,2022年,5月20日,0点49分,星期三 当定时器/计数器用于计数工作方式时,假定要求的计数长度为N,则应装入定时器/计

20、数器的初值X28N。 在方式0下,计数的长度范围为1256。 当工作于定时状态时,若需要的定时时间为Tc,则需要的机器周期数NTc/Tp,(Tp为机器周期),则应装入定时器/计数器的初值X28N。若晶振频率为6MHz,则当X255时,具有最小的定时时间为2us;当X0时,具有最大的定时时间为512us。 第32页,共68页,2022年,5月20日,0点49分,星期三图6-4 T0(或T1)方式2结构8位计数器第33页,共68页,2022年,5月20日,0点49分,星期三例:有一自动罐装药粒系统,每瓶罐装药粒100片,每满一瓶,累加器A加1操作,若满200瓶,向P1.0输出0,然后停止计数。要求

21、用定时器1以工作方式2计数。(1)计算计数初值设待求的计数初值为X,则: (28X)100得:X15638H, 则:TH138H,TL138H。(2)TMOD寄存器初始化第34页,共68页,2022年,5月20日,0点49分,星期三M1M010, 1, GATE0 因此:TMOD60H(3)程序清单:ORG1000HMOVTMOD,#60H;设置T1工作方式MOVTH1,#38H;设置计数初值MOVTL1,#38H位序号 D7D6D5D4 D3D2D1D0位符号GATEC/TM1M0GATEC/TM1M001100000第35页,共68页,2022年,5月20日,0点49分,星期三MOV A,

22、 #00HMOV IE,#00H;禁止中断SETB TR1;启动计数CHECK:JBC TF1,LOOP;查询计数溢出 AJMP CHECKLOOP: INCACJNEA,#200, CHECK CLRP1.0;清零P1.0CLRTR1;停止计数器1的运行END;程序结束第36页,共68页,2022年,5月20日,0点49分,星期三方式3前三种工作方式下,T0和T1的设置和使用是完全相同的。但是在工作方式3下,二者的设置和使用却是不同的,因此要分开介绍。(1) 在工作方式3下,T0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以作计数使用,又可以作定时使用。 T0的各控制位、引脚和中

23、断源,即、GATE、TR0、TF0 和T0(P3.4)引脚、 (P3.2)引脚全归它使用。 功能和操作与方式1完全相同,而且逻辑电路结构也很相似,如图6-5所示。 第37页,共68页,2022年,5月20日,0点49分,星期三图6-5 T0工作方式3逻辑结构第38页,共68页,2022年,5月20日,0点49分,星期三 而此时TH0只可用作简单的定时器使用。而且由于T0的控制位已被TL0独占,因此只好借用定时器/计数器1的控制位TR1和TF1,即以计数溢出去置位TF1,而定时的启动和停止则受TR1的状态控制。 由于TL0既能作定时器使用也能作计数器使用,而TH0只能作定时器使用,却不能作计数器

24、使用。因此,在工作方式3下,定时器/计数器0可以构成两个定时器或一个定时器和一个计数器。 第39页,共68页,2022年,5月20日,0点49分,星期三(2)工作方式3下的定时器/计数器1如果T0已工作在工作方式3,则T1只能工作在方式0、1或方式2下,因为它的运行控制位TR1及计数溢出标志位TF1已被T0借用,如图6-6所示。第40页,共68页,2022年,5月20日,0点49分,星期三此时,T1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。因为已经没有计数溢出标志位TF1可供使用,因此只能把计数溢出直接送给串行口。若将T1强行设置为模式3,就会使T1立即停止工作。第41页,共6

25、8页,2022年,5月20日,0点49分,星期三例 设定时器/计数器T0工作于方式3,TL0和TH0作为两个独立的8位定时/计数器分别产生250us和500us的定时中断,使P1.1和P1.2产生500us和1000us的方波。设晶振频率为6MHz。(1)计算计数初值 TL0的计数初值256250us/2us=13183H TH0的计数初值256500us/2us=06H因此,TL083H,TH006H。 (2)TMOD寄存器初始化第42页,共68页,2022年,5月20日,0点49分,星期三M1M011, 0, GATE0,同时设 T1工作于方式0因此: TMOD03H位序号 D7D6D5D

26、4 D3D2D1D0位符号GATEC/TM1M0GATEC/TM1M000000011第43页,共68页,2022年,5月20日,0点49分,星期三(3)程序清单:ORG 0000HAJMP MAINORG 000BH;T0AJMP TIMER0ORG 001BH;T1AJMPTIMER1ORG1000HMAIN:MOVTMOD,#03HMOVTL0,#83H MOVTH0,#06H第44页,共68页,2022年,5月20日,0点49分,星期三SETB TR0;启动定时器运行SETB TR1SETB ET0;允许定时/计数器中断SETB ET1SETB EA;总中断允许SJMP $;等待中断T

27、IMER0:MOV TL0, #83HCPL P1.1RETITIMER1:MOV TH0,#06HCPLP1.2RETIEND第45页,共68页,2022年,5月20日,0点49分,星期三 定时/计数器应用步骤 合理选择定时/计数器工作方式 计算定时/计数器定时初值(按上述公式计算) 编制应用程序 定时/计数器的初始化 包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。 正确编制定时/计数器中断服务程序 注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。第46页,共68页,2022年,5月20日,0点49分,星期三

28、【例】试用T1方式2编制程序,在P1.0引脚输出周期为400S的脉冲方波,已知fosc=12MHZ。解: 计算定时初值 T1初值=28-200s/1s=256200=56=38H TH1=38H;TL1=38H 设置TMOD: 0 0 10 0000 B=20H T0控制位,与T1无关 T1方式2 T1定时器 T1启动与 无关第47页,共68页,2022年,5月20日,0点49分,星期三 编制程序如下: ORG0000H ;复位地址LJMPMAIN ;转主程序ORG001BH ;T1中断入口地址LJMPIT1 ;转T1中断服务程序 ORG0100H ;主程序首地址MAIN: MOVTMOD,#

29、20H ;置T1定时器方式2MOVTL1,#38H ;置定时初值MOVTH1,#38H ;置定时初值备份MOVIP,#00001000B;置T1高优先级MOVIE,#0FFH ;全部开中SETBTR1 ;T1运行SJMP$ ;等待T1中断 ORG 0200H ;T1中断服务程序首地址IT1: CPL P1.0 ;输出波形取反首地址RETI ;中断返回第48页,共68页,2022年,5月20日,0点49分,星期三【课堂练习题】 参照以上例题工作方式2,按下列要求分别修改程序: 脉冲方波从P3.0输出; fosc=6MHz; 脉冲方波脉宽为100s; 用定时/计数器T0;第49页,共68页,202

30、2年,5月20日,0点49分,星期三【例】已知晶振12MHZ,参阅图5-15,要求利用定时器T0使图中发光二极管D进行秒闪烁。 解:发光二极管进行秒闪烁。即一秒钟一亮一暗,亮500ms,暗500 ms。晶振12MHz,每机周1s,T0方式1最大定时只能65ms余。 取T0定时50ms,计数10次,即可实现500ms定时。 第50页,共68页,2022年,5月20日,0点49分,星期三 计算定时初值 T0初值 =216-50000s/1s =6553650000=15536=3CB0H TH0=3CH;TL0=B0H。 设置TMOD: 0000 0 0 01 B = 01H T0方式1 T0 与

31、 无关 T1控制位第51页,共68页,2022年,5月20日,0点49分,星期三 编制程序如下: ORG 0000H ;复位地址LJMP MAIN ;转主程序ORG 000BH ;T0中断入口地址LJMP IT0 ;转T0中断服务程序ORG 0100H ;主程序首地址MAIN:MOV TMOD,#01H ;置T0定时器方式1MOV TH0,#3CH ;置T0初值50msMOV TL0,#0B0H ;MOV IE,#10000010B;T0开中 MOV R7,#0AH ;置50ms计数器初值 SETB TR0 ;T0运行SJMP $ ;等待中断 ORG 0200HITO:MOV TH0,#3CH

32、 ;重置T0初值50ms MOV TLO,#0BOH DJNZ R7,GORET ;判500ms到否? CPL P1.7 ;500ms到,输出取反 MOV R7,#0AH ;恢复50ms计数器初值GORET:RETI 第52页,共68页,2022年,5月20日,0点49分,星期三【例】 已知fosc=6MHz,检测T0引脚上的脉冲数,并将1s内的脉冲数显示在显示屏上,每隔1s刷新一次显示值(设一秒内脉冲数65535个)。 根据题目要求,T0用作计数器方式1,T1用作定时器方式1,定时100ms。 第53页,共68页,2022年,5月20日,0点49分,星期三3)编制程序如下: ORG 0000

33、H LJMP MAIN ;转主程序 0RG 000BH LJMP IT0 ;转T0中断服务程序 ORG 001BH LJMP ITl ;转T1中断服务程序 ORG 0100H MAIN:MOV SP,#60H ;置堆栈 MOV TMOD,#15H ;置T0计数器方式1,T1定时器方式1 MOV TH0,#00H ;置T0初值 MOV TL0,#00H ; MOV TH1,#3CH ;置T1初值 MOV TL1,#0BOH ; SETB PT1 ;置T1为高优先级 MOV IE,#10001101B ;TO、串口不开中,其余开中 SETB TR0 ;TO启动 SETB TRl ;T1启动 MOV

34、 R7,#OAH ;置lOOms计数器初值LDIR:LCALL DIR ;调用显示子程序,并等待中断 SJMP LDIR ;循环显示T0中断服务程序没有编写.第54页,共68页,2022年,5月20日,0点49分,星期三 ORG 0200H ;T1中断服务程序首地址ITl: MOV THl,#3CH ;重置T1初值 MOV TL1,#0BOH ; DJNZ R7,GORET ;判1s到否? 1s未到转返回 CLR TR0 ;1s到,T0停 MOV 30H,TL0 ;记录ls内T0引脚脉冲个数 MOV 31H,THO ; MOV TLO,#00H ;脉冲计数器T0清0 MOV TH0,#00H

35、; SETB TR0 ;TO重新运行 MOV R7,#0AH ;恢复lOOms计数器初值 PUSH Acc ;保护现场 PUSH PSW ; PUSH DPH ; PUSH DPL ; LCALL WORK ;调用数据处理子程序 POP DPL ;恢复现场 POP DPH ; POP PSW ; POP Acc ;GORET:RETI ;T1中断返回 第55页,共68页,2022年,5月20日,0点49分,星期三【例】已知fosc=6MHz,试编写24小时模拟电子钟程序,秒分时数分别存在R1、R2、R3中,可直接调用显示程序DIR。解: ORG 0000H ;复位地址 LJMP IT0 ;转主

36、程序 ORG 000BH ;T0中断入口地址 LJMP IT0 ;T0中断,转T0中断服务子程序IT0 ORG 1000H ;主程序首地址START:MOV R1,#0 ;秒计数器清0 MOV R2,#0 ;分计数器清0 MOV R3,#0 ;时计数器清0 MOV R4,#0 ;500S计数器清0 MOV R5,#0 ;100ms计数器清0 MOV TMOD,#02H;置T0定时器方式2 MOV TL0,#06H ;置T0定时初值500S MOV TH0,#06H ;用于自动恢复定时初值 SETB TR0 ;启动T0WAIT: LCALL DIR ;显示时钟时分秒并等待中断 SJMP WAIT

37、 ;循环显示 ORG 0200H ;T0中断服务程序首地址IT0: MOV TH0,#3CH ;重置T0初值50mS MOV TL0,#0B0H; DJNZ R7,GORET ;判500mS到否? CPL P1.7 ;500mS 到,输出取反 MOV R7,#0AH ;恢复50mS计数器初值GORET:RETI ;第56页,共68页,2022年,5月20日,0点49分,星期三 ORG2000H ;T0中断服务子程序首地址IT0: INCR4;500S计数器计数 CJNER4,#200,IT01 ;判100ms满否?IT01: JCIT06;未满100ms,转返回 MOV R4,#0 ;满100

38、ms,500S计数器清0 INC R5;100ms计数器计数 CJNE R5,#10,IT02;判1s满否?IT02: JCIT06;未满1s,转返回 MOV R5,#0 ;满1s,100ms计数器清0 INCR1; 秒计数器加1 CJNE R1,#60,IT03;判60秒满否? IT03: JCIT06;未满60秒,转返回 MOVR1,#0 ;满60秒,秒计数器清0 INCR2; 分计数器加1 CJNER2,#60,IT04;判60分满否?IT04: JCIT06;未满60分,转返回 MOVR2,#0 ;满60分,分计数器清0 INCR3; 时计数器加1 CJNER3,#24,IT05;判2

39、4小时满否?IT05: JCIT06;未满24小时,转返回 MOVR3,#0 ;满24小时,时计数器清0IT06: RETI;返回第57页,共68页,2022年,5月20日,0点49分,星期三解:利用定时/计数器T0扩展成外中断时须有两个条件: 一是外部触发脉冲从P3.4输入(下降沿有效); 二是将定时/计数器设置成计数临界状态,即定时初值为FFH,再来一个脉冲即能溢出触发中断。【例】因外中断INT0、INT1已被占用,试利用定时/计数器T0扩展成外中断。第58页,共68页,2022年,5月20日,0点49分,星期三编程如下: ORG 0000H ;复位地址 LJMP START ;复位,转初

40、始化程序START ORG 000BH ;T0中断入口地址 LJMP IT0 ;转T0中断服务子程序IT0 ORG 1000H ;初始化程序首地址START: MOV SP,#60H ;置堆栈 MOV TMOD,#06H ;置T0计数器方式2(见P132) MOV TH0,#0FFH ;置T0初值 MOV TL0,#0FFH ; SETB PT0 ;置T0为高优先级(见P121) MOV IE,#0FFH ;全部开中 SETB TR0 ;T0启动 SJMP MAIN ;转主程序,并等待T0中断 ORG 2000H ;T0中断服务子程序首地址IT0: ;T0中断服务子程序 RETI ;第59页,共68页,2022年,5月20日,0点49分,星期三6-4、设系统时钟为6MHz,利用T0和P1.0产生连续矩形脉冲,高电平为50us,低电平为300us。根据题意,编写程序如下:ORG0000HLJMPMAINORG000BHLJMPIT0PMAIN:MOVTMOD,#00H;定时器/计

温馨提示

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

评论

0/150

提交评论