《AT89S51单片机的定时器和计数器.ppt》由会员分享,可在线阅读,更多相关《AT89S51单片机的定时器和计数器.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6 6章章 AT89S51AT89S51单片机的单片机的 定时器定时器/计数器计数器单片机原理及应用单片机原理及应用主讲人:贺伟主讲人:贺伟业精于勤荒于嬉,行成于思毁于随业精于勤荒于嬉,行成于思毁于随内容概要内容概要工业检测与控制,许多场合都要用到计数计数或定时定时功能。例如,对外部脉冲进行计数,产生精确的定时时间等。AT89S51片内有两个可编程的定时器/计数器T1、T0,可满足需要。本章介绍定时器/计数器的结构结构与功能功能,2种工作模式工作模式和4种工作方式工作方式,以及相关的2个特殊功能寄存器个特殊功能寄存器TMOD和TCON各位的定义及其编程,最后介绍定时器/计数器的编程及应用实
2、例。实现定时一般有三种方法:实现定时一般有三种方法:1 1、利用软件实现(延时程序)、利用软件实现(延时程序);优点:优点:简单,控制方便;简单,控制方便;缺点缺点:CPUCPU效率低。效率低。2 2、硬件实现,专门设计一个单稳态定时器:、硬件实现,专门设计一个单稳态定时器:优点:优点:CPUCPU效率高;效率高;缺点:缺点:修改参数麻烦。修改参数麻烦。3 3、利用计数器实现、利用计数器实现单片机一般利用第三种方法实现单片机一般利用第三种方法实现计数器计数器溢出溢出输入脉冲输入脉冲1us8位位256us预置数预置数AT89S51内部设有两个内部设有两个16位的定位的定时器时器/计数器,可用软件
3、控制。计数器,可用软件控制。定时器定时器:对机器周期计数,对机器周期计数,每每过一个机器周期,计数器内容过一个机器周期,计数器内容加加1;计数器:计数器:对外来脉冲进行计数,对外来脉冲进行计数,T0、T1引脚上从高电平到低引脚上从高电平到低电平跳变时,计数器内容加电平跳变时,计数器内容加1。外来脉冲外来脉冲T0机器周期机器周期片内计数器片内计数器单片机单片机6.1定时器定时器/计数器的结构计数器的结构定时器/计数器结构结构如图图6-1所示所示,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。图6-1 AT89S51单片机的定时器/计数
4、器结构框图具有定时器和计数器2种工作模式种工作模式,4种工作方式(种工作方式(方式0、方式1、方式2和方式3)。属于增计数器增计数器。TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。T0、T1不论是工作在定时器模式还是计数器模式,都是对脉冲信号进行计数,只是计数信号的来源不同。计数器模式计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数(见图6-1)。定时器工作模式定时器工作模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。由于时钟频率是定值,所以可根据计数值根据
5、计数值可计算出定计算出定时时间时时间。计数器的起始计数都是从计数器初值开始从计数器初值开始的的。单片机复位时计数器的初值为0,也可用指令给计数器装入一个新的初值。AT89S51的定时器/计数器属于增1计数器。二、定时器/计数器的工作原理 16 16位的定时器位的定时器/计数器实质上是一个加计数器实质上是一个加1 1计数器,计数器,可实现可实现定时定时和和计数计数两种功能,其功能由软件控制和两种功能,其功能由软件控制和切换。定时器属硬件定时和计数,是单片机中效率切换。定时器属硬件定时和计数,是单片机中效率高而且工作灵活的部件。高而且工作灵活的部件。在定时器在定时器/计数器开始工作之前,计数器开始
6、工作之前,CPUCPU必须将一必须将一些命令些命令(称为控制字称为控制字)写入定时器写入定时器/计数器。将控制计数器。将控制字写入定时器字写入定时器/计数器的过程叫计数器的过程叫定时器定时器/计数器的初计数器的初始化始化。在初始化程序中,要将在初始化程序中,要将工作方式控制字工作方式控制字写入定写入定时器方式寄存器时器方式寄存器(TMOD)(TMOD),工作状态控制字工作状态控制字(或相关或相关位位)写入定时器控制寄存器写入定时器控制寄存器(TCON)(TCON),赋,赋定时定时/计数初计数初值值给给TH0(TH1)TH0(TH1)和和TL0(TL1)TL0(TL1)。1 1、定时器、定时器/
7、计数器的定时功能计数器的定时功能:计数器的加计数器的加1 1信号由振荡器的信号由振荡器的1212分频信号产生,分频信号产生,即即每过一个机器周期,计数器加每过一个机器周期,计数器加1 1,直至计满溢出。,直至计满溢出。定时器的定时时间与系统的时钟频率有关。因一定时器的定时时间与系统的时钟频率有关。因一个机器周期等于个机器周期等于1212个时钟周期,所以个时钟周期,所以计数频率应为系计数频率应为系统时钟频率的十二分之一。统时钟频率的十二分之一。如果晶振频率为如果晶振频率为12MHz12MHz,则,则机器周期为机器周期为1 1 s s。通过改变定时器的定时初值,并适。通过改变定时器的定时初值,并适
8、当选择定时器的长度当选择定时器的长度(8(8位、位、1313位或位或1616位位),可以调整定,可以调整定时时间。时时间。2 2、定时器、定时器/计数器的计数功能计数器的计数功能:通过外部计数输入引脚通过外部计数输入引脚T0(P3.4)T0(P3.4)和和T1(P3.5)T1(P3.5)对外对外部信号计数,外部脉冲的下降沿将触发计数。计数器部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的在每个机器周期的S5P2S5P2期间采样引脚输入电平,若一期间采样引脚输入电平,若一个机器周期个机器周期S5P2S5P2期间采样值为期间采样值为1 1,下一个机器周期,下一个机器周期S5P2S5P
9、2期间采样值为期间采样值为0 0,则计数器加,则计数器加1 1,再下一个机器周期,再下一个机器周期S3P1S3P1期间,新的计数值装入计数器。期间,新的计数值装入计数器。因检测一个由因检测一个由1 1至至0 0的跳变需要两个机器周期,故的跳变需要两个机器周期,故外部信号的最高计数频率为时钟频率的二十四分之外部信号的最高计数频率为时钟频率的二十四分之一。一。如果晶振频率为如果晶振频率为12MHz12MHz,则最高计数频率为,则最高计数频率为0.5MHz0.5MHz。虽然对外部输入信号的占空比无特殊要求,。虽然对外部输入信号的占空比无特殊要求,但为了确保给定电平在变化前至少被采样一次,但为了确保给
10、定电平在变化前至少被采样一次,外外部计数脉冲的高电平与低电平保持时间均需在一个部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。机器周期以上。如图如图6-106-10所示,图中所示,图中TcyTcy为为机器周期。机器周期。各位的功能说明:各位的功能说明:TF1(TCON.7,8FH位)位)-T1溢出标志位。溢出标志位。TF0(TCON.5,8DH位)位)-T0溢出标志位。溢出标志位。TR1(TCON.6,8EH位)位)-T1运行控制位。运行控制位。0:关闭:关闭T1;1:启动:启动T1运行。运行。TR0(TCON.4,8CH位)位)-T0运行控制位。运行控制位。0:关闭:关闭T0;1:
11、启动:启动T0运行。运行。1.1.定时器控制寄存器定时器控制寄存器 定时器控制寄存器定时器控制寄存器TCONTCON的作用是控制定时器的启动与停止,的作用是控制定时器的启动与停止,并保存并保存T0T0、T1T1的溢出和中断标志。的溢出和中断标志。TCONTCON的格式的格式:可按位寻址可按位寻址6.1.1 6.1.1 工作方式寄存器和控制寄存器工作方式寄存器和控制寄存器AT89S51单片机的定时器为可编程定时器,在定时器工作之单片机的定时器为可编程定时器,在定时器工作之前必须先进行初始化,即将控制命令写入定时器控制寄存器。前必须先进行初始化,即将控制命令写入定时器控制寄存器。定时器方式寄存器定
12、时器方式寄存器TMODTMOD的作用是设置的作用是设置T0T0、T1T1的工作方式。的工作方式。TMODTMOD的格式:的格式:2.2.定时器工作方式寄存器定时器工作方式寄存器TMODTMOD各位的功能说明:各位的功能说明:(1)(1)GATEGATE:门控位。:门控位。GATE=0 GATE=0:软件启动定时器软件启动定时器,即用指令使,即用指令使TCONTCON中的中的TR1(TR0)TR1(TR0)置置1 1即可启动定时器即可启动定时器1(1(定时器定时器0)0)。GATE=1 GATE=1:软件和硬件共同启动定时器软件和硬件共同启动定时器,即用指令使,即用指令使TCONTCON中的中的
13、TR1(TR0)TR1(TR0)置置1 1时,只有外部中断时,只有外部中断INT0(INT1)INT0(INT1)引脚输入高电平时才引脚输入高电平时才能启动定时器能启动定时器1(1(定时器定时器0)0)。(2)(2)C/TC/T:功能选择位。:功能选择位。C/T=0 C/T=0时,以定时器方式工作。时,以定时器方式工作。C/T=1 C/T=1时,以计数器方式工作。时,以计数器方式工作。M1M0工作方式工作方式功能描述功能描述00方式方式013位位计计数器数器01方式方式116位位计计数器数器10方式方式2自自动动重装初重装初值值8位位计计数器数器11方式方式3定定时时器器0:分:分为为两个独立
14、的两个独立的8位位计计数器数器定定时时器器1:无中断的:无中断的计计数器数器定时器工作方式选择位定义定时器工作方式选择位定义(3)M1M1、M0M0:方式选择位。:方式选择位。定时定时/计数器有四种工计数器有四种工作方式,由作方式,由M1M0进行设置。进行设置。二、二、定时器工作方式:定时器工作方式:由方式选择位由方式选择位M1M1、M0M0设定。设定。1 1 1 1、方式、方式、方式、方式0 0 0 0(M1M0=00M1M0=00M1M0=00M1M0=00):):):):13131313位定时位定时位定时位定时/计数器。计数器。计数器。计数器。THx8THx8THx8THx8位和位和位和
15、位和TLxTLxTLxTLx低低低低5 5 5 5位组成加位组成加位组成加位组成加1 1 1 1计数器。计数器。计数器。计数器。计数外部脉冲个数:计数外部脉冲个数:1 181928192(2(21313)定时时间定时时间(若若T=1T=1 s)s):1 1 s s8.19ms8.19msfoscfoscT=12/foscT=12/fosc1616位定时位定时/计数器。计数器。THx8THx8位和位和TLx8TLx8位组成位组成1616位加位加1 1计数器。计数器。计数外部脉冲个数:计数外部脉冲个数:1 16553665536(2(21616)定时时间定时时间(若若T=1T=1 s)s):1 1
16、 s s(65536T=65.54ms)(65536T=65.54ms)2 2 2 2、方式、方式、方式、方式1 1 1 1(M1M0=01M1M0=01M1M0=01M1M0=01):):):):T=12/foscT=12/fosc3 3 3 3、方式、方式、方式、方式2 2 2 2(M1M0=10M1M0=10M1M0=10M1M0=10):):):):自动恢复初值自动恢复初值8 8位定时位定时/计数器。计数器。TLxTLx为为8 8位加位加1 1计数器,计数器,THxTHx为为8 8位初值暂存器。位初值暂存器。用于需要重复定时和计数的场合。用于需要重复定时和计数的场合。最大计数值:最大计
17、数值:256(2256(28 8)最大定时时间最大定时时间(若若T=1T=1 s)s):256256 s sT=12/foscT=12/fosc计数满后自动装入计数初值计数满后自动装入计数初值。省去用户软件中重装初值的程序,精确的定时。省去用户软件中重装初值的程序,精确的定时。4 4 4 4、方式、方式、方式、方式3 3 3 3(M1M0=11M1M0=11M1M0=11M1M0=11):):):):T0T0分成分成2 2个个8 8位定时器:位定时器:TL0TL0定时定时/计数器和计数器和TH0TH0定时器;定时器;TL0TL0占用占用T0T0控制位:控制位:C/TC/T,TR0TR0,GAT
18、EGATE;TH0TH0占用占用T1T1控制位:控制位:TR1TR1、TF1TF1;T1T1不能使用方式不能使用方式3 3工作,常作串口的波特率发生器使用。工作,常作串口的波特率发生器使用。foscfosc振荡器振荡器T1工作在方式工作在方式1T1工作在方式工作在方式2T1工作在方式工作在方式0T0处于方式处于方式3时,时,T1可定为方式可定为方式0、方式、方式1和方式和方式2,用来,用来作作为串行口的波特率发生器,为串行口的波特率发生器,或不需要中断的场合。或不需要中断的场合。4 4种工作方式中,种工作方式中,方式方式0 0与方式与方式1 1基本相同,由于基本相同,由于方式方式0 0是为兼容
19、是为兼容MCS-48MCS-48而设,初值计算复杂,在实际而设,初值计算复杂,在实际应用中,一般不用方式应用中,一般不用方式0 0,而采用方式,而采用方式1 1。方式方式2 2省去程序中重装初值的指令,并可省去程序中重装初值的指令,并可产生相当产生相当精确的定时时间精确的定时时间。当当T1T1作串行口波特率发生器时,作串行口波特率发生器时,T0T0才设置为才设置为方式方式3 3。6.4 6.4 定时器定时器/计数器的编程和应用计数器的编程和应用 AT89S51AT89S51的定时计数器是可编程的,因此,在进的定时计数器是可编程的,因此,在进行定时或计数之前也要用对其进行初始化。初始化一行定时或
20、计数之前也要用对其进行初始化。初始化一般应包括以下几个步骤:般应包括以下几个步骤:1 1、对、对TMODTMOD寄存器赋值,以确定定时器的工作方式。寄存器赋值,以确定定时器的工作方式。2 2置置定时计数器初值定时计数器初值,直接将初值写入寄存器的,直接将初值写入寄存器的TH0TH0,TL0TL0或或TH1TH1,TL1TL1。3 3根据需要,对寄存器根据需要,对寄存器IEIE置初值,开放定时器中断。置初值,开放定时器中断。4 4对对TCONTCON寄存器中的寄存器中的TR1TR1或或TR0TR0置位,启动定时计数置位,启动定时计数器。启动以后,计数器即按规定的工作方式和初值进器。启动以后,计数
21、器即按规定的工作方式和初值进行计数或开始定时。行计数或开始定时。定时定时/计数器初值的计算计数器初值的计算 2 2计数器初值的计算计数器初值的计算 在在计计数数器器模模式式下下,此此时时计计数数器器就就计计数数引引脚脚上上到到来来的的脉脉冲冲个个数数,每每检检测测到到一一个个脉脉冲冲下下降降沿沿,就就加加1 1一一次次。其其计计数脉冲个数数脉冲个数S S为:为:S=M-XS=M-X 式式中中,M M为为计计数数器器模模值值,该该值值和和计计数数器器工工作作方方式式有有关关,在在方方式式0 0时时M M为为2 21313;在在方方式式1 1时时M M为为2 21616;在在方方式式2 2和和方方
22、式式3 3时时M M为为2 28 8。X X是是计计数数器器的的计计数数初值。初值。1 1定时器初值的计算定时器初值的计算 在定时器模式下,计数器由在定时器模式下,计数器由单片机主脉冲经单片机主脉冲经1212分频后计数,分频后计数,即就是对机器周期进行计数。即就是对机器周期进行计数。则定时器定时时间则定时器定时时间t t的公式:的公式:t=t=(M-XM-X)T T定时初值:定时初值:X=M-t/TX=M-t/T式中,式中,M M为模值,和定时器的工为模值,和定时器的工作方式有关作方式有关,在方式在方式0 0时时M M为为2 21313;在方式在方式1 1时时M M为为2 21616;在方式;
23、在方式2 2和方和方式式3 3时时M M为为2 28 8 。T T是机器周期;是机器周期;X X是定时器的定时初值。是定时器的定时初值。例例2:例:例:T0T0运行于定时器状态,时钟振荡周期为运行于定时器状态,时钟振荡周期为12MH12MHZ Z,要求定时,要求定时100100 s s。求不同工作方式时的定时初值。求不同工作方式时的定时初值X X并并计算在计算在不同工不同工 作方式下作方式下最大的定时时间最大的定时时间tmax。解:解:fosc=12MHz T=1fosc=12MHz T=1 s s 由公式由公式 X=M-t/TX=M-t/T 得得 :方式方式0 0(13(13位方式位方式):
24、X=2X=21313-100-100 s/1s/1 s=1F9Cs=1F9C当当T0的初值的初值=0时为最大定时时间时为最大定时时间:tmax=(213-0)*1 s s=8.192ms方式方式1 1(16(16位方式位方式):X=2X=21616-100-100 s/1s/1 s=FF9CH s=FF9CH tmax=(216-0)*1 s s=65.536ms 方式方式2 2、3 3(8(8位方式位方式):X=2X=28 8-100-100 s/1s/1 s=9CHs=9CHtmax=(213-0)*1 s s=256 s s 注意:注意:工作方式工作方式0 0的初值装入方法:的初值装入方
25、法:1F9CH=0001 1111 1001 1100 B1F9CH=0001 1111 1001 1100 B 可见,可见,TH0=FCHTH0=FCH,TL0=1CHTL0=1CHTL0TL0的低的低5 5位位TH0TH0的的8 8位位MOVMOVTH0TH0,#0FCH#0FCHMOVMOVTL0TL0,#1CH#1CHT=12/foscT=12/fosc定时器初始化编程:定时器初始化编程:使使用用定定时时器器工工作作之之前前,先先写写入入控控制制寄寄存存器器,确确定定好好定定时时器器工作方式。工作方式。初始化编程格式:初始化编程格式:MOVTMOD,#方式字方式字;选择方式;选择方式M
26、OVTHx,#XH;装入;装入Tx时间常数时间常数MOVTLx,#XL(SETBEA);开;开Tx中断中断(SETBETx)SETBTRx ;启动;启动Tx定时器定时器需考虑:需考虑:1.按实际需要选择定时按实际需要选择定时/计数功能;计数功能;2.按时间或计数长度选择工作方式;按时间或计数长度选择工作方式;3.3.计算时间常数:计算时间常数:计算时间常数:计算时间常数:计算时间常数计算时间常数X(X(计算初值计算初值):计数功能:计数功能:X=2X=2n n-计数值计数值 (n n:8/13/168/13/16)定时功能:定时功能:X=2X=2n n-t/T-t/T (t t:定时时间;:定
27、时时间;T T:机器周期):机器周期)方法方法1:用延时程序实现:用延时程序实现1mS的延时。的延时。UP:SETBP1.0LCALLD2MSCLRP1.0LCALLD2MSSJMPUP方法方法2:用:用T0定时定时1mS,查询,查询TF0 确定工作方式 方式方式0 计算初值 E018H 编程 MOVTMOD,#00HSETBTR0LOOP:MOVTH0,#0E0HMOVTL0,#18HJNBTF0,$CPLP1.0CLRTF0SJMPLOOP例例1使使P1.0输出一个周期为输出一个周期为2mS的方波。的方波。方法方法3:用:用T0定时定时1mS,中断。,中断。ORG0000HLJMPMAIN
28、ORG000BHLJMPAT0MAIN:MOVTMOD,#00HMOVTH0,#0E0HMOVTL0,#18HSETBEASETBET0SETBTR0SJMP$AT0:MOVTMOD,#00HMOVTH0,#0E0HCPLP1.0RETIfosc=12MHzfosc=12MHz(1 1)T0T0工作方式的确定工作方式的确定 定时时间较长,采用哪一种工作方式?定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:由各种工作方式的特性,可计算出:方式方式0 0最长可定时最长可定时16.38416.384msms;方式方式1 1最长可定时最长可定时131.072131.072msms;方
29、式方式2 2最长可定时最长可定时512512 s s。欲欲定定时时1 1秒秒,这这个个值值已已经经超超过过了了定定时时器器的的最最大大定定时时时时间间。为为此此,我我们们只只有有采用采用定时器定时和软件计数相结合的方法定时器定时和软件计数相结合的方法才能解决问题。才能解决问题。选方式选方式1 1,每隔,每隔100100msms中断一次,中断中断一次,中断1010次为次为1 1s s。(2 2)计算计数初值)计算计数初值 因为:因为:(2(21616-X)210X)210-6-6=10=10-1-1 所以:所以:X=15536=3CB0HX=15536=3CB0H 因此:因此:TH0=3CHTH
30、0=3CH,TL0=B0H TL0=B0H(3 3)1010次计数的实现次计数的实现 采用循环程序法。采用循环程序法。(4 4)程序设计)程序设计 参考程序参考程序:例例2假设假设系统时钟为系统时钟为6 6MHzMHz,编写定时器编写定时器T0T0产生产生1 1秒定时秒定时的程序。的程序。ORG 0000HORG 0000HRESETRESET:LJMP MAIN LJMP MAIN ;上电,转主程序入口;上电,转主程序入口MAINMAIN ORG 000BHORG 000BH ;T0T0的中断入口的中断入口 LJMP IT0PLJMP IT0P ;转;转T0T0中断处理程序中断处理程序IT0
31、PIT0P ORG 1000HORG 1000H MAIN MAIN:MOV SP,#60HMOV SP,#60H ;设堆栈指针;设堆栈指针 MOV B,#0AH MOV B,#0AH ;设循环次数;设循环次数1010次次 MOV TMOD,#01H MOV TMOD,#01H ;设;设T0T0工作在方式工作在方式1 1 MOV TL0,#0B0H MOV TL0,#0B0H ;给;给T0T0设初值设初值 MOV TH0,#3CHMOV TH0,#3CH SETB TR0 SETB TR0 ;启动;启动T0T0 SETB ET0 SETB ET0 ;允许;允许T0T0中断中断 SETB EA
32、SETB EA ;CPUCPU开放中断开放中断 HERE HERE:SJMP HERE SJMP HERE ;等待中断;等待中断 ITOPITOP:MOV TL0,#0B0H MOV TL0,#0B0H ;T0T0中断子程序,重装初值中断子程序,重装初值 MOV TH0,#3CH MOV TH0,#3CH ;DJNZ B DJNZ B,LOOPLOOP CLR TR0 CLR TR0 ;1s1s定时时间到,停止定时时间到,停止T0T0工作工作 LOOP LOOP:RETI RETI 6.4.4 6.4.4 门控制位门控制位GATEGATE的应用的应用测量脉冲宽度测量脉冲宽度GATE1GATE1
33、可使定时器可使定时器/计数器计数器T1T1的的启动计数启动计数受受INT1INT1*的控制,的控制,可测量引脚可测量引脚INT1INT1*(P3.3P3.3)上正脉冲的宽度)上正脉冲的宽度(机器周(机器周期数)。期数)。参考程序:参考程序:ORG 0000HORG 0000HRESET:AJMP MAIN RESET:AJMP MAIN ;复位入口转主程序;复位入口转主程序 ORG 0100HORG 0100H MAIN:MOV SP,#60H MAIN:MOV SP,#60H MOV TMOD,#90H MOV TMOD,#90H ;T1T1为方式为方式1 1定时控制字定时控制字 MOV T
34、L1,#00HMOV TL1,#00H MOV TH1,#00H MOV TH1,#00HLOOP0:JB P3.3,LOOP0 LOOP0:JB P3.3,LOOP0 ;INT1INT1*高高,则循环则循环 SETB TR1SETB TR1 ;如;如INT1INT1*为低,启动为低,启动T1T1LOOP1:JNB P3.3,LOOP1 LOOP1:JNB P3.3,LOOP1 ;INT1INT1*低,则循环低,则循环LOOP2:JB P3.3,LOOP2 LOOP2:JB P3.3,LOOP2 ;INT1INT1*高高,则循环则循环 CLR TR1 CLR TR1 ;停止;停止T1T1计数计
35、数 MOV A,TL1MOV A,TL1 ;T1T1计数值送计数值送A A 将将A A中的中的T1T1计数值计数值 送显示缓冲区送显示缓冲区 转换成显示的代码转换成显示的代码 LOOP3:LCALL DIR LOOP3:LCALL DIR ;调用显示子程序;调用显示子程序DIR,DIR,显示显示T1T1计数值计数值 AJMP LOOP3 AJMP LOOP3 ;执行程序,使执行程序,使INT1INT1*引脚上出现的引脚上出现的正脉冲宽度以机器周期数的形式显示在显示器上。正脉冲宽度以机器周期数的形式显示在显示器上。6.4.5 6.4.5 实时时钟的设计实时时钟的设计 1 1实时时钟实现的基本思想
36、实时时钟实现的基本思想 如如何何获获得得1 1秒秒的的定定时时,可可把把定定时时时时间间定定为为100100msms,采采用用中中断断方方式式进进行行溢溢出出次次数数的的累累计计,计计满满1010次次,即即得到秒计时。得到秒计时。片内片内RAMRAM中规定中规定3 3个单元个单元作作为秒、分、时单元为秒、分、时单元,具,具体安排如下:体安排如下:4242H H:“秒秒”单元单元 ;4141H H:“分分”单元;单元;4040H H:“时时”单元单元 从秒到分,从分到时是通过软件累加并进行比较从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。的方法来实现的。2 2程序设计程序设计 (1
37、1)主程序的设计)主程序的设计流程如图所示。流程如图所示。(2 2)中断服务程序的设计)中断服务程序的设计中断服务程序的主要功能是实中断服务程序的主要功能是实现秒、分、时的计时处理。参现秒、分、时的计时处理。参考程序略。考程序略。6.4.6 6.4.6 运行中读定时器运行中读定时器/计数器计数器在在读读取取运运行行中中的的定定时时器器/计计数数器器时时,需需注注意意:若若恰恰好好出出现现TLXTLX溢溢出出向向THXTHX进进位位的的情情况况,则则读读得得的的(TLXTLX)值值就就完完全全不不对对。同同样样,先先读读(THXTHX)再再读读(TLXTLX)也也可可能能出错。出错。方法:先读(
38、方法:先读(THXTHX),后读(),后读(TLXTLX),再读(),再读(THXTHX)。若)。若两次读得(两次读得(THXTHX)相同,则读的内容正确。)相同,则读的内容正确。若前后两次读的(若前后两次读的(THXTHX)有变化,则再重复上述过程,)有变化,则再重复上述过程,若重复读得的内容相同,就应是正确的。下面是有若重复读得的内容相同,就应是正确的。下面是有关的程序,读得的(关的程序,读得的(TH0TH0)和()和(TL0TL0)放置在)放置在R1R1和和R0R0内。内。RDTIME:RDTIME:MOV A,TH0MOV A,TH0;读(;读(TH0TH0)MOV R0,TL0MOV R0,TL0;读(;读(TL0TL0)CJNE CJNE A,TH0,RDTIMEA,TH0,RDTIME;比较;比较2 2次读得的(次读得的(TH0TH0);不相等则重复读;不相等则重复读 MOV R1,AMOV R1,A;(;(TH0TH0)送入)送入R1R1中中 RETRET