51单片机定时器及其应用(其中有6道题).ppt

上传人:龙*** 文档编号:3790847 上传时间:2019-07-17 格式:PPT 页数:65 大小:702KB
下载 相关 举报
51单片机定时器及其应用(其中有6道题).ppt_第1页
第1页 / 共65页
51单片机定时器及其应用(其中有6道题).ppt_第2页
第2页 / 共65页
51单片机定时器及其应用(其中有6道题).ppt_第3页
第3页 / 共65页
51单片机定时器及其应用(其中有6道题).ppt_第4页
第4页 / 共65页
51单片机定时器及其应用(其中有6道题).ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、定时器/计数器及其应用,2,定时器/计数器及其应用,定时器/计数器的应用场合: 定时或延时控制、对外部事件的检测、计数等;MCS-51系列8031、8051单片机有两个16位定时器/计数器(即T0和T1);8032、8052单片机有3个16位定时器/计数器(即T0、 T1和T2);,3,定时器/计数器及其应用,所谓计数器就是对外部输入脉冲的计数;所谓定时器也是对脉冲进行计数完成的,计数的是MCS-51内部产生的标准脉冲,通过计数脉冲个数实现定时。所以,定时器和计数器本质上是一致的,在以后的叙述中将定时器/计数器笼统称为定时器。,4,5,第5章 定时器/计数器及其应用,5.1 定时器的结构及工作

2、原理5.2 定时器的TMOD和TCON寄存器5.3 定时器的工作方式5.3.1 方式05.3.2 方式15.3.3 方式25.3.4 方式35.4 定时器的编程和应用,6,第5章 定时器/计数器及其应用,5.1 定时器的结构及工作原理,7,5.1 定时器的结构及工作原理,组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;

3、单片机复位时,两个寄存器的所有位都被清0。,8051定时器内部结构框图,8,5.1 定时器的结构及工作原理,两个可编程的定时器/计数器T1、T0。每个定时器内部结构实际上就是一个可编程的加法计数器,由编程来设置它工作在定时状态还是计数状态。两种工作模式: (1) 计数器工作模式就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时,计数器(TH0,TL0或TH1,TL1)的值增1。计数的最高频率一般为振荡频率的1/24。Why?(2) 定时器工作模式也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1

4、,每个机器周期=12个振荡周期,因此计数频率为振荡频率的1/12。所以定时时间=计数值机器周期。4种工作方式 (方式0-方式3) 。,9,5.1 定时器的结构及工作原理,当控制信号 定时器工作在定时方式;加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器计满溢出; 因为 ,即一个计数脉冲的周期就是一个机器周期;计数器计数的是机器周期脉冲个数。从而实现定时。当控制信号 定时器工作在计数方式;加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器计满溢出;,10,控制信号K可以控制计数器的“启动”和“停止”,,11,振荡周

5、期:是振荡脉冲的周期,也成为“拍”,用P表示。就是晶体振荡器的周期,或外部振荡脉冲的周期。是MCS-51单片机的最小时序单位。,时钟周期:是振荡源信号经二分频后形成的时钟脉冲信号,用S表示。每个时钟周期分成P1、P2两个节拍,又被称为一个状态。是MCS-51单片机的最基本的时序单位。,机器周期:通常将完成一个基本操作所需的时间称为机器周期,由6个状态(12拍)组成,所以一个机器周期可以依次表示为S1P1、S2P2S6P1、S6P2。通常算术逻辑操作发生在节拍P1期间,而内部寄存器到寄存器的传送发生在节拍P2期间。,指令周期:是指CPU执行一条指令所需要的时间。是MCS-51单片机的最大的时序单

6、位,由若干个振荡周期组成。一个指令周期通常含有14个机器周期,MCS-51典型的指令周期为一个机器周期。,振荡周期、时钟周期、机器周期和指令周期,12,5.1 定时器的结构及工作原理,在每个机器周期的S5P2期间采样检测引脚输入电平。若前一个机器周期采样值为“1”,后一个机器周期采样值为“0”,则计数器加1。新的计数值在检测到输入引脚电平发生“1”到“0”的负跳变(下降沿)后,于下一个机器周期的S3P1期间装入计数器中。由于CPU需要两个机器周期来识别一个“1”到“0”的跳变信号,所以最高的计数频率为振荡周期的1/24。,13,5.1 定时器的结构及工作原理,定时/计数器对输入信号的要求外部计

7、数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。输入信号的高、低电平至少要分别保持一个机器周期。如图所示,图中Tcy为机器周期。,14,可编程定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1 实现。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定好的工作方式独立工作,不再占用CPU,只有在计数器计满溢出时才向CPU申请中断,占用CPU。由此可见,定时器是单片机中工作效率高且应用灵活的部件。,5.1 定时器的结构及工作原理,15,第5章 定时器/计数器

8、及其应用,5.2 定时器的TMOD和TCON寄存器,16,5.2 定时器的TMOD和TCON寄存器,8051单片机定时器主要有几个特殊功能寄存器组成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:设置定时器的工作方式;TCON:控制定时器的启动和停止;TH0和TL0 :存放定时器T0的初值或计数结果; TH0存放高8位,TL0 存放低8位;TH1和TL1 :存放定时器T1的初值或计数结果; TH1存放高8位,TL1 存放低8位;,17,5.2.1 工作方式控制寄存器TMOD,8位分为两组,高4位控制T1,低4位控制T0。(1) GATE 门控位 0: 以TRX (X=0,1)

9、来启动定时器/计数器运行。1: 用外中断引脚 (INT0*或INT1*) 上的高电平和TRX来启动定时器/计数器运行。,(2) M1、M0 工作方式选择位 M1 M0 工 作 方 式 0 0 方式0,13位定时器/计数器。 0 1方式1,16位定时器/计数器。 1 0 方式2,8位常数自动重新装载 1 1 方式3,仅适用于T0,T0分成两个8位计数器,T1停止计数。,(3) C/T* 计数器模式和定时器模式选择位0: 定时器模式。 1: 计数器模式。,(4) TMOD无位地址,不能位寻址。(5) 复位时,TMOD所有位均为“0”。,18,低4位与外部中断有关,后面介绍。高4位的功能如下: (1

10、) TF1、TF0 计数溢出标志位 定时器T0或T1计数溢出时,由硬件自动将此位置“1”;TFx可以由程序查询,也是定时中断的请求源;(2) TR1、TR0 计数运行控制位 TRx=1: 启动定时器/计数器工作 TRx=0: 停止定时器/计数器工作,5.2.2 控制寄存器TCON,19,20,5.2.3 定时/计数器的初始化,MCS-51单片机的定时器/计数器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)对TMOD赋值,以确定定时器的工作模式;(2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;(3)根据需要,对IE置初值,开放定时器中断

11、;(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。,21,5.2.3 定时/计数器的初始化,初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0: M为213,模式1: M为216,模式2和3: M为28),例如:机器周期为1s 时, 若工作在模式0,则最大定时值为:2131s =8.192ms 若工作在模式1,则最大定时值为: 2161s =65.536ms,22,第5章 定时器/计数器及其应

12、用,5.3 定时器的工作方式,23,MCS-51的定时器T0有4种工作方式:即:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作方式:即:方式0,方式1,方式2。,5.3 定时器的工作方式,24,5.2.1 方式0 M1、M0设置为00 ,为13位计数器,以T1为例,其框图如下:,5.3 定时器的工作方式方式0,计数脉冲输入,加1计数器,25,5.3 定时器的工作方式方式0,在这种方式下,16位寄存器TH1和TL1只用13位,由TH1的8位和TL1的低5位组成。TL1的高3位不定。当TL1的低5位计数溢出时,向TH1进位。而TH1计数溢出时,则向中断标志位TF1进位(即硬件将

13、TF1置1),并请求中断。可通过查询TF1是否置“1”或考察中断是否发生来判定定时器T1的操作完成与否。,26,5.3 定时器的工作方式方式0,当C/T=0时,为定时工作模式,开关接到振荡器的12分频器输出上,计数器对机器周期脉冲计数。其定时时间为:(213-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时时间为(213-0)(1/12)12us=8.191ms当C/T=1时,为计数工作模式,开关与外部引脚T1(P3.5)接通,计数器对来自外部引脚的输入脉冲计数。当外部信号发生负跳变时计数器加1。,27,5.3 定时器的工作方式方式0,GATE控制定时器Tx(T1或T0)的条件:(

14、1) 当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。TRx=1;计数启动;TRx=0;计数停止;(2) 当GATE=1时, “与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRxINTx),当且仅当TRx=1且INTx=1(高电平)时,计数启动;否则,计数停止。,返回,28,5.3.2 方式1 M1、M0=01,为16位的计数器,除位数外,其他与方式0相同。其定时时间为:(216-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时时间为(216

15、-0)(1/12)12us=65.536ms,5.3 定时器的工作方式方式1,29,5.3.3 方式2 M1、M0=10 ,为自动恢复初值的8位计数器,等效框图如下: TLx作为8位计数器,THx作为重置初值的缓冲器。,5.3 定时器的工作方式方式2,THx作为常数缓冲器,当TLx计数溢出时,在置“1”溢出标志TFx的同时,还自动的将THx中的初值送至TLx,使TLx从初值开始重新计数。定时器/计数器的方式2工作过程如图 (x=0, 1) 。,30,优点:方式0和方式1用于循环重复定时或计数时,在每次计数器挤满溢出后,计数器复0。若要进行新一轮的计数,就得重新装入计数初值。这样一来不仅造成编程

16、麻烦,而且影响定时精度。而方式2具有初值自动装入的功能,避免了这个缺点,可实现精确的定时。缺点:只有8位计数器,定时时间短、计数范围小。其定时时间为: (28-初值)振荡周期12若晶振频率为12MHz,则最长的定时时间为(28-0)(1/12)12us=0.256ms,5.3 定时器的工作方式方式2,方式2工作过程图 (x=0, 1) 。,31,5.3.4 方式3 只适用于定时器/计数器T0。T1不能工作在方式3。如果将T1置为方式3,则相当于TR1=0,停止计数 (此时T1可用来作串行口波特率产生器) 。1. 工作方式3下的T0 T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。8位

17、计数器TL0使用T0的状态控制位C/T*、GATE、TR0、INT0,它既可以工作在定时方式,也可以工作在计数方式。8位定时器TH0被固定为一个8位定时器(不能作外部计数模式) ,并使用定时器T1的状态控制位TR1,同时占用定时器T1的中断请求源TF1。此时,定时器TH0的启动或停止只受TR1控制。TR1=1时,启动TH0的计数; TR1=0时,停止TH0的计数,5.3 定时器的工作方式方式3,32,5.3 定时器的工作方式,各引脚与T0的逻辑关系如图所示:,33,2. T0工作在方式3下T1的各种工作方式 注意:当T0处于方式3时, T1仍可设置为方式0、方式1和方式2。当时由于TR1、TF

18、1和T1的中断源都已被定时器T0(中的TH0)占用,所以定时器T1 仅有控制位C/T来决定其工作在定时方式或计数方式。当计数器计满溢出时,不能置位“TF1”,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或不需要中断的场合。(1) T1工作在方式0,5.3 定时器的工作方式,34,(2) T1工作在方式1,(3) T1工作在方式2,5.3 定时器的工作方式,35,第5章 定时器/计数器及其应用,5.4 定时器的编程和应用,36,5.4 定时器的编程和应用,编程说明MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)确定工作

19、方式字:对TMOD寄存器正确赋值;(2)确定定时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0 M为213,模式1 M为216,模式2和3 M为28)(3)根据需要,对IE置初值,开放定时器中断;(4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。,37,5.4 定时器的编程和应用,例5-1 要在P1.0上输出一个周期为2m

20、s的方波,假设系统振荡频率采用12MHz。 利用T0方式0产生1ms的定时方波的周期用T0来确定,让T0每隔1ms计数溢出1次,即TF0=1;查询到TF0=1 则CPU对P1.0取反。,即要使P1.0每隔1ms取反一次。,38,5.4 定时器的编程和应用,第一步: 确定工作方式字 方式0 (13位)最长可定时 8.192ms; 方式1 (16位)最长可定时 65.536ms; 方式2 (8位)最长可定时 256s。T0为方式0, M1M0=00 定时工作状态, C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H,39,5.4 定时器的编程和应用,第二步: 计算

21、1ms定时的初值X 设初值为X,则有: (213-X) 1210-6 1/12=110-3可求得:X=8192-1000=7192X化为16进制,即X=1C18H=1,1100,000 1,1000B。所以,T0的初值为: TH0=E0H TL0=18H,40,第三步: 程序设计 采用查询TF0的状态来控制P1.0的输出,同时要重新装入初值。,5.4 定时器的编程和应用,41,参考程序: ORG 0100HMAIN:MOV TMOD, #00H;设置T0为方式0MOVTL0,#18H;送计数初值 MOVTH0,#0E0H;送计数初值SETB TR0 ;启动T0LOOP:JBC TF0,NEXT

22、 ;查询定时时间到,转NEXT,同时清TF0SJMPLOOP;重复循环NEXT:MOV TL0, #18H ;T0重置初值 MOV TH0, #0E0H ;T0重置初值 CPL P1.0 ;P1.0的状态取反SJMPLOOP;重复循环END,42,例5-2 将例5-1中的输出方波周期改为1秒。 分析: 周期为1s的方波要求500ms的定时。 (1) T0工作方式的确定因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出: 方式0 (13位)最长可定时 8.192ms; 方式1 (16位)最长可定时 65.536ms; 方式2 (8位)最长可定时 256s。 所以采用定时器定时加软

23、件计数的方法来实现延长定时。选方式1,定时50ms,软件计数10次。50ms 10=500ms。 所以,TMOD=01H,5.4 定时器的编程和应用,以上各方式都不满足要求,43,(2) 计算计数初值因为: (216-X)1210-6 1/12=5010-3所以: X=15536=3CB0H因此: TH0=3CH,TL0=B0H (3) 10次计数的实现设计一个软件计数器,初始值设为10。每隔50ms定时时间到,产生溢出标志TF0,程序查询到TF0=1,则软件计数器减1。这样减到0时就获得了500ms的定时。,5.4 定时器的编程和应用,44,(4) 程序设计(参考程序) MAIN: MOV

24、TMOD,#01H ;设T0工作在方式1MOV TL0,#0B0H ;给T0设初值MOV TH0,#3CHMOVR7,#10;软件计数器初值SETB TR0 ;启动T0LOOP:JBCTF0, NEXT;查询定时时间到,转NEXT,同时清TF0SJMP LOOP NEXT: DJNZ R7,EXIT;R7不等于0,则不对P1.0取反CPLP1.0MOVR7,#10;重置软件计数器初值EXIT:MOV TL0,#0B0H ;T0中断子程序,重装初值MOV TH0,#3CH SJMPLOOPEND,45,以上的定时程序中,程序都要重置计时器初值,这样从定时器溢出发出溢出标志,到重装完定时器初值,在

25、开始计数,之间总会有一段时间间隔,使定时时间增加了若干微秒,造成定时不够精确。为了减小这种定时误差,单片机中设置了工作方式2(自动重装初值),则可避免上述因素,省去程序中重装初值的指令,实现精确定时。但是工作方式2的缺点是只有8位计数器,定时时间受到很大限制。,5.4 定时器的编程和应用,46,例5-3 利用T0方式2产生250us的定时,在P1.0引脚上输出周期为500us的方波(要求精确定时)。(设系统振荡为12MHz)(1) 工作方式选择实现精确定时,采用方式2。对于12MHz晶振,方式2的最大计数时间为28=256us, 所以可实现250us的精确定时。故,设置TMOD=02H。(2)

26、 计算初值设初值为X: 则 (28-X) 1210-61/12=25010-6 X=28-250=6=06H(3) 程序设计采用查询TF0的状态来控制P1.0的输出。,5.4 定时器的编程和应用,47,(4) 参考程序MAIN: MOVTMOD, #02H ;置T0方式2MOVTH0,#06H ;送计数初值MOVTL0,#06HSETB TR0 ;启动T0LOOP: JBCTF0,NEXT ;查询定时时间到,转NEXT,同时清TF0SJMP LOOPNEXT:CPLP1.0;输出取反SJMPLOOP;重复循环END,5.4 定时器的编程和应用,48,GATE门可使定时器Tx(T0或T1)的启动

27、计数受INTx*的控制,可测量引脚INTx*(P3.2或P3.3) 上正脉冲的宽度(机器周期数) 。以T1为例:,门控制位GATE的应用测量脉冲宽度,回顾,当GATE=1时,K=TRxINTx,K,49,例5-4 利用T1门控位GATE测试INT1*(P3.3)引脚上出现的正脉冲的宽度。分析:根据设计要求,将T1设定为定时工作模式、方式1、GATE=1;当TR1=1时,一旦INT1*(P3.3)引脚上出现高电平就开始计数,直到出现低电平为止。然后读取TH1、TL1中的计数值,分别送到寄存器A和B中。由于T1工作在定时方式,计数器计数的是机器周期的脉冲数;将脉冲数转化成时间,就可得到正脉冲的宽度

28、。,门控制位GATE的应用测量脉冲宽度,50,ORG 0100HMAIN: MOV TMOD, #90H ;T1为方式1定时控制字MOV TL1, #00H;计数器初值为0MOV TH1, #00HLOOP: JB P3.3, LOOP;等待INT1*低SETB TR1;如INT1*为低,启动T1LOOP1: JNB P3.3, LOOP1;等待INT1*升高,开始计数LOOP2: JB P3.3, LOOP2 ;等待INT1*降低,停止计数CLR TR1;停止T1计数MOV A, TL1;T1计数值的低8位送AMOV B, TH1;T1计数值的高8位送B由于定时器最长为16位计数器,因此被测

29、脉冲高电平的宽度不能超过65536个机器周期。,参考程序:,51,例5-5 当T0(P3.4) 引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统振荡为6MHz) 两个计数器同时使用,5.4 定时器的编程和应用,52,(1) 工作方式选择T0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4) 发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0引脚上已接收了负跳变信号。T1定义为方式2定时。在T0引脚产生一次负跳变后,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,

30、使P1.0产生周期1ms的方波。TMOD=0010,0101=25H(2) 计算T1初值设T1的初值为X: 则 (28-X) 210-6=510-4 X=28-250=6=06H,5.4 定时器的编程和应用,53,MAIN: MOV TMOD, #25H ;初始化,T1为方式2定时,T0为方 式1计数MOV TL0, #0FFH ;T0置初值 MOV TH0, #0FFHSETB TR0 ;启动T0MOV TL1, #06H ;T1置初值MOV TH1, #06HLOOP0:JBCTF0,NEXT0;查询T0有无负跳变,有则转到NEXT0SJMP LOOP0NETX0:CPLP1.0;P1.0

31、取反SETB TR1;启动T1LOOP1:JBCTF1,NEXT1 ;查询T1定时时间到否,到则转到NEXT1SJMP LOOP1NEXT1:CPLP1.0;P1.0取反SJMP LOOP1END,(3) 程序设计,54,5.4 定时器的编程和应用,T0 方式3时,TL0和TH0被分成两个独立的8位定时器/计数器。其中, TL0: 8位定时器/计数器; TH0: 8位定时器。当T1作串行口波特率发生器时,T0才设置为方式3。,55,以上例题均采用查询的方法,这种方法很简单,但是在定时器整个计数的过程中,CPU要不断地查询溢出标志TFx的状态,很难执行其他操作,占用了CPU的工作时间,使得CPU

32、的工作效率不高。若采用中断的方式来实现,可大大提高CPU的工作效率。我们下一章学习中断,学习完之后再返回来分析和比较两者的区别与特点。,5.4 定时器的编程和应用,56,本 章 结 束!,57,5.4 定时器的编程和应用,例5-6 假设某MCS-51应用系统的两个外中断源已被占用,设置T1工作在方式2,作波特率发生器用。现要求增加一个外部中断源,并控制P1.0引脚输出一个5kHz的方波。设系统振荡为6MHz。,58,(1) 选择工作方式TL0为方式3计数,把T0引脚(P3.4) 作附加的外中断输入端,TL0初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0溢出,申请中断,这相当于跳沿触

33、发的外部中断源。TH0为8位方式3定时,控制P1.0输出5kHz的方波信号。如图所示。,5.4.3 方式3的应用,59,(2) 初值计算TL0的初值设为0FFH。5kHz的方波的周期为200s,TH0的定时时间为100s。TH0初值X计算如下: (28-X) 210-6=110-4X=28-100=156=9CH(3) 程序设计ORG 0000HLJMP MAINORG 000BH ;T0中断入口LJMP TL0INT;跳T0中断服务程序ORG 001BH ;在T1方式3时,TH0占用T1的中断LJMP TH0INT;跳TH0中断服务程序,5.4.3 方式3的应用,60,ORG 0100HMA

34、IN: MOV TMOD, #27H ;T0方式3计数,T1方式2定时MOV TL0, #0FFH ;置TL0初值MOV TH0, #9CH;置TH0初值MOV TL1, #dataL ;data为波特率常数MOV TH1, #dataHMOV TCON, #55H;启动T0、T1,设置外部中断为跳沿触发MOV IE, #9FH;开中断TL0INT: MOV TL0, #0FFH ;TL0中断服务程序,TL0重新装入初值 中断处理 TH0INT: MOV TH0, #9CH;TH0中断服务程序,TH0重新装入初值CPL P1.0 ;P1.0位取反输出RETI,5.4.3 方式3的应用,61,1

35、. 实时时钟实现的基本思想 如何获得1秒的定时,可把定时时间定为100ms,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。片内RAM中规定3个单元作为秒、分、时单元,具体安排如下: 42H: “秒”单元 ;41H: “分”单元;40H: “时”单元从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。,5.4.5 实时时钟的设计,62,2. 程序设计 (1) 主程序的设计流程如图所示。,5.4.5 实时时钟的设计,63,(2) 中断服务程序的设计中断服务程序的主要功能是实现秒、分、时的计时处理。参考程序略。,5.4.5 实时时钟的设计,64,在读取运行中的定时器/计数器时,需注

36、意: 若恰好出现TLX溢出向THX进位的情况,则读得的(TLX) 值就完全不对。同样,先读(THX) 再读(TLX) 也可能出错。方法: 先读(THX) ,后读(TLX) ,再读(THX) 。若两次读得(THX) 相同,则读的内容正确。若前后两次读的(THX) 有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,读得的(TH0) 和(TL0) 放置在R1和R0内。,5.4.6 运行中读定时器/计数器,65,RDTIME: MOV A, TH0;读(TH0) MOV R0, TL0;读(TL0) CJNE A, TH0, RDTIME;比较2次读得的(TH0) ;不相等则重复读MOV R1, A;(TH0) 送入R1中 RET,5.4.6 运行中读定时器/计数器,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。