单片机第六章定时器计数器ppt课件

上传人:钟*** 文档编号:1558917 上传时间:2019-10-27 格式:PPT 页数:60 大小:788.50KB
返回 下载 相关 举报
单片机第六章定时器计数器ppt课件_第1页
第1页 / 共60页
单片机第六章定时器计数器ppt课件_第2页
第2页 / 共60页
单片机第六章定时器计数器ppt课件_第3页
第3页 / 共60页
点击查看更多>>
资源描述
第6章 AT89C51单片机的 定时器/计数器,1,1,内容概要 工业检测与控制,许多场合都要用到计数或定时功能。例如,对外部脉冲进行计数,产生精确的定时时间等。AT89C51片内有两个可编程的定时器/计数器T1、T0,可满足需要。 本章介绍定时器/计数器的结构与功能,2种工作模式和4种工作方式,以及相关的2个特殊功能寄存器TMOD和TCON各位的定义及其编程,最后介绍定时器/计数器的编程及应用实例。,2,定时/实现方式: 1.软件定时; 2.不可编程硬件定时; 3.可编程定时 。,3,定时/计数器的定时和计数功能,在TMOD中,各有一个控制位(CT),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。,1. 定时功能-计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。,2. 计数功能-计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。,定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 。,4,2个16位定时器/计数器 (52系列有3个16位Timer) 定时器:对片内机器时钟(周期方波)进行计数 计数器:对Tx引脚输入的负脉冲进行计数,与Timer工作有关的特殊功能寄存器: TCON 和 TMOD,5,6.1 定时器/计数器的结构 定时器/计数器结构如图6-1所示,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。,6,图6-1 AT89C51单片机的定时器/计数器结构框图,6,具有定时器和计数器2种工作模式,4种工作方式(方式0、方式1、方式2和方式3)。属于增计数器。 TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式。 TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。 T0、T1不论是工作在定时器模式还是计数器模式,都是对脉冲信号进行计数,只是计数信号的来源不同。 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数(见图6-1)。 定时器工作模式是对单片机的时钟振荡器信号经片内,7,7,12分频后的内部脉冲信号计数。由于时钟频率是定值,所以可根据计数值可计算出定时时间。 计数器的起始计数都是从计数器初值开始的。单片机复位时计数器的初值为0,也可用指令给计数器装入一个新的初值。AT89C51的定时器/计数器属于增1计数器。,8,Timer的2个特殊功能寄存器(TCON,TMOD),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,定时器控制寄存器TCON (88H),TFx: Timer0/1计数溢出标志位。 =1 计数溢出; =0 计数未满 TFx标志位可用于申请中断或供CPU查询。 在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。,TRx: Timer0/1运行控制位。 =1 启动计数; =0 停止计数,9,TR0/TR1:Timer0/1运行控制位: TR0/TR1 =0 时,Timer0/1停止计数 TR0/TR1 =1 时,Timer0/1启动计数,定时器T0/T1 中断申请过程, 在已经开放T0/T1中断允许且已被启动的前提下: T0/T1加满溢出时 TF0/TF1标志位自动置“1” 检测到TCON中TF0/TF1变“1”后,将产生指令: LCALL 000BH/LCALL 001BH 执行中断服务程序, TF0/TF1标志位会自动清“0”,以备下次中断申请。,定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON (88H),10,GATE C / T M1 M0 GATE C / T M1 M0,定时器方式寄存器TMOD (89H),T1,T0,M1,M0:工作方式定义位 ( 定义4 种方式 ):,C/T :计数器/定时器选择位 = 1 外部事件计数器。对Tx引脚的负脉冲计数; = 0 片内时钟定时器。对机器周期脉冲计数定时,0 0:13位 Timer用它无益,不要记它! 0 1:16位 Timer经常用到 1 0:可自动重装的 8位 Timer经常用到 1 1:T0 分为2个8位 Timer;T1 此时不工作 因为没有带来甚麽好处,几乎无用,11,GATE C / T M1 M0 GATE C / T M1 M0,T1,T0,GATE门控位: Timer可由软件与硬件两者控制 GATE = 0 普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制,定时器方式寄存器TMOD(续),(89H), GATE = 1 门控用法 Timer的启/停由软件对TRx位写“1”/“0” 和在INTx引脚上出现的信号的高/低共同控制,12,计数脉冲输入,定时器计数器的工作方式,定时器计数器共有四种工作方式,1. 方式013位方式,13位计数器,定时器,计数器,13,2. 方式116位方式,14,3. 方式28位自动装入时间常数方式,15,4. 方式32个8位方式,仅T0可以工作在方式3此时T0分成2个独立的计数器TL0和TH0 ,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。,16,6.3 对外部输入的计数信号的要求 当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。 当输入信号产生负跳变时,计数器的值增1。 每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1,17,期间,计数器加1。由于确认一次负跳变要花2个机器周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。 例如,选用6MHz频率的晶体,允许输入的脉冲频率最高为250kHz。如果选用12MHz频率的晶体,则可输入最高频率为500kHz的外部脉冲。 对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。,18,故对外部输入信号的要求如图6-12所示,图中,Tcy为机器周期。,19,图6-12 对外部计数输入信号的要求,19, THx/TLx赋初值:THx赋高8位,TLx赋低8位,工作方式1 的编程要点:, TMOD选方式: 写“M1,M0”=01 b 选方式1, 若不用门控位,直接用软件写TRx控制启/停 若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停, 若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序 若不用中断,可查询“计数溢出标志TFx” 的方式工作,但溢出标志TFx须软件清0,20, THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TL0 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx,工作方式 2 的编程:, TMOD寄存器选方式: 写“M1,M0” = 10 b 选中方式2, 其他用法与各种方式1完全相同,21,定时器小结: (2个16位加法计数器),运行/停止由TRx位控制,(当GATE=1时: 由TRx位和Tx引脚上的信号共同控制),工作方式由TMOD决定; 计数/定时由C/T位决定 工作方式0(13位) 永远不用 工作方式3(T0拆为双8位) 几乎无用 工作方式1(16位) 经常用到 工作方式2(8位自动重装) 经常用到,从初值按机器周期或外部脉冲递加,溢出位 TFx申请中断;中断允许由ETx位和EA位控制,,22,定时器初始化程序应完成如下工作: 对TMOD赋值,以确定T0和T1的工作方式。 计算初值,并将其写入TH0、TL0或TH1、TL1。 中断方式时,则对IE赋值,开放中断。 使TR0或TR1置位,启动定时/计数器定时或计数。,23,6.4 定时器/计数器的编程和应用 4种方式,方式0与方式1基本相同,只是计数位数不同。方式0初值计算复杂,一般不用方式0,而用方式1。 6.4.1 方式1的应用 【例6-1】假设系统时钟频率采用6MHz,在P1.0引脚上输出一个周期为2ms的方波,如图6-13所示。,24,图6-13 P1.0引脚上输出周期为2ms的方波,24,基本思想:方波周期T0确定,T0每隔1ms计数溢出1次,即T0每隔1ms产生一次中断,CPU响应中断后,在中断服务子程序中对P1.0取反,如图6-13所示。为此要做如下几步工作。 (1)计算计数初值X 机器周期 = 2s = 2 106s 设需要装入T0的初值为X,则有(216X)2106=1 103,216X=500,X=65036。 X化为十六进制数,即: 65036 = FE0CH 。 T0的初值为TH0 =FEH,TL0 = 0CH。,25,25,(2)初始化程序设计 采用定时器中断方式工作。包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中。 (3)程序设计 中断服务子程序除了完成所要求的产生方波的工作之外,还要注意将计数初值重新装入定时器,为下一次产生中断做准备。 本例,主程序用一条转至自身的短跳转指令来代替。,26,26,参考程序如下: ORG 0000H ;程序入口 RESET: AJMP MAIN ;转主程序 ORG 000BH ;T0中断入口 AJMP IT0P ;转T0中断处理程序IT0P ORG 0100H ;主程序入口 MAIN: MOV SP,#60H ;设堆栈指针 MOV TMOD,#01H ;设置T0为方式1定时 ACALL PT0M0 ;调用初始化子程序PT0M0 HERE: AJMP HERE ;原地循环,等待中断,27,27,PT0M0: MOV TL0,#0CH ;T0初始化,装初值的低8位 MOV TH0,#0FEH ;装初值的高8位 SETB ET0 ;允许T0中断 SETB EA ;总中断允许 SETB TR0 ;启动T0 RET IT0P: MOV TL0,#0CH ;中断子程序,T0重装初值 MOV TH0,#0FEH CPL P1.0 ;P1.0的状态取反 RETI 程序说明:当单片机复位时,从程序入口0000H跳向主程序MAIN处执行。其中调用了T0初始化子程序PT0M0。,28,28,子程序返回后,程序执行“AJMP HERE”指令,则循环等待。 当响应T0定时中断时,则跳向T0中断入口,再从T0中断入口跳向IT0P标号处执行T0中断服务子程序。 当执行完中断返回的指令“RETI”后,又返回断点处继续执行循环指令“AJMP HERE”。在实际的程序中,“AJMP HERE” 实际上是一段主程序。当下一次定时器T0的1ms定时中断发生时,再跳向T0中断入口,从而重复执行上述过程。 如CPU不做其他工作,也可用查询方式进行控制,程序要简单得多。,29,29,查询方式参考程序: MOV TMOD,#01H ;设置T0为方式1 LOOP: MOV TH0,#0FEH ;T0置初值 MOV TL0,# 0CH SETB TR0 ;接通T0 LOOP1:JNB TF0,LOOP1 ;查TF0,TF0 =0, T0未溢出; ;TF0 =1, T0溢出, CLR TR0 ;T0溢出, 关断T0 CPL P1.0 ;P1.0的状态求反 SJMP LOOP 查询程序虽简单,但CPU必须要不断查询TF0标志,工作效率低。,30,30,【例6-2】系统时钟为6MHz,编写定时器T0产生1s定时的程序。 基本思想:采用定时器模式。因定时时间较长,首先确定采用哪一种工作方式。时钟为6MHz的条件下,定时器各种工作方式最长可定时时间: 方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512s。 由上可见,可选方式1,每隔100ms中断一次,中断10次为1s。,31,31,(1)计算计数初值X 因为(216 X) 2 106 = 101,所以X = 15536 = 3CB0H。因此TH0 = 3CH,TL0 = B0H。 (2)10次计数的实现 对于中断10次的计数,采用B寄存器作为中断次数计数器。 (3)程序设计 参考程序如下: ORG 0000H ;程序运行入口 RESET:LJMP MAIN ;跳向主程序入口MAIN ORG 000BH ;T0的中断入口 LJMP IT0P ;转T0中断处理子程序IT0P ORG 1000H ;主程序入口,32,32,MAIN: MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设置T0工作在方式1定时 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB ET0 ;允许T0中断 SETB EA ;总中断允许 SETB TR0 ;启动T0 HERE: SJMP HERE ;原地循环,等待中断,33,33,IT0P: MOV TL0,#0B0H ;T0中断子程序,T0重装初值 MOV TH0,#3CH DJNZ B,RTURN ;B中断次数计数,减1非0则 ;中断返回 CLR TR0 ;1s定时时间到,停止T0工作 SETB F0 ;1s定时时间到标志F0置1 RTURN:RETI 程序说明:不论1s定时时间是否已到,都返回到“SJMP HERE”指令处。“SJMP HERE”指令实际是一段主程序。在这段主程序中再通过对F0标志的判定,可知1s定时是否到,再进行具体处理。,34,34,例 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 解:1、计算计数初值X: 由于晶振为12 MHz,所以机器周期Tcy为1 s。 所以: Nt/ Tcy 10103/110610000 X655361000055536D8F0H 即应将D8H送入TH0中,F0H送入TL0中 2、求T0的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;,35,采用查询方式,ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0100H MAIN:MOV TMOD,#01H ;置T0工作于方式1 LOOP:MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H SETB TR0 ;启动T0 JNB TF0, $ ; 查询TF0=0,等待;T0在工作,未计满 CLR TF0 ;清TF0; 此时,TF0=1,10ms定时到 CPL P1.0 ; P1.0取反,产生方波的半个周期 SJMP LOOP ;循环产生方波 END,36,ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN:MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP $ ;等待中断 DVT0:CPL P1.0 ;P1.0取反输出 MOV TH0,#0D8H ;重新装入计数值 MOV TL0,#0F0H RETI ;中断返回 END,采用中断方式,37,6.4.2 方式2的应用 方式2是一个可以自动重新装载初值的8位计数器/定时器。可省去重装初值指令。 当某个定时器/计数器不使用时,可扩展一个负跳沿触发的外中断源。 【例6-3】扩展一个负跳沿触发的外部中断源,把定时器/计数器T0脚作为外部中断请求输入端,溢出标志TF0作为外中断请求标志。 基本思想:设为方式2(自动装入常数方式)计数模式,TH0、TL0初值均为0FFH。当T0脚发生负跳变时,T0计数溢出,TF0置“1”,单片机发出中断请求。,38,38,初始化程序: ORG 0000H AJMP IINI ;跳到初始化程序 ORG 000BH AJMP IT0P ;跳到外中断处理程序 IINI: MOV TMOD,#06H ;设置T0为方式2 MOV TL0,#0FFH ;设T0初值 MOV TH0,#0FFH SETB ET0 ;允许T0中断 SETB EA ;总中断允许 SETB TR0 ;启动T0 IT0P: 外中断处理程序段 ,39,39,程序说明:当连接在P3.4(T0脚)的外部中断请求输入脚电平发生负跳变时,TL0加1,产生溢出,TF0置“1”,向单片机发出中断请求,同时TH0的内容0FFH送TL0,即TL0恢复初值0FFH。 P3.4脚相当于一个负跳沿触发的外中断请求源输入。对P3.5也可做类似的处理。 【例6-4】 当T0(P3.4)引脚上发生负跳变时,作为P1.0引脚产生方波的启动信号。开始从P1.0脚上输出一个周期为1ms的方波,如图6-14所示(系统时钟6MHz)。,40,40,基本思想:T0设为方式1计数,初值为FFFFH。当外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,向CPU发出中断请求,此时T0相当于一个负跳沿触发的外部中断源。 进入T0中断程序后,F0标志置“1”,说明T0引脚上已接收过负跳变信号。T1定义为方式2定时。在T0引脚产生一次负跳变后,启动T1每500s产生一次中断,在中断服务子程序中对P1.0求反,使P1.0产生周期1ms的方波。由于省去重新装初值指令,所以可产生精确的定时时间。,41,41,42,图6-14 负跳变触发输出一个周期为1ms的方波,42,(2)计算T1的初值 设T1的初值为x,则 (28 x) 2 106 = 5 104 x = 28 250 = 6 = 06H (3)程序设计 参考程序: ORG 0000H ;程序入口 RESET:LJMP MAIN ;跳向主程序MAIN ORG 000BH ;T0的中断入口 LJMP IT0P ;转T0中断服务程序 ORG 001BH ;T1的中断入口,43,43,LJMP IT1P ;转T1中断服务程序 ORG 0100H ;主程序入口 MAIN: MOV SP,#60H ;设堆栈指针 ACALL PT0M2 ;调用对T0,T1初始化子程序 LOOP: MOV C,F0 ;T0是否产生过中断,若产生 ;过,F0置1 JNC LOOP ;T0未产生中断,C=0,则跳 ;到LOOP,等待T0中断 SETB ET1 ;允许T1产生定时中断 SETB TR1 ;启动T1 HERE: AJMP HERE,44,44,PT0M2: MOV TMOD,#26H ;对T0,T1初始化,T0方式1 ;计数,T1方式2定时 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB ET0 ;允许T0中断 MOV TL1,#06H ;T1置初值 MOV TH1,#06H CLR F0 ;把T0已发生中断标志F0清0 SETB EA ;总中断允许 SETB TR0 ;启动T0 RET,45,45,IT0P: CLR TR0 ;T0中断服务程序,停止T0计数 SETB F0 ;把T0引脚接收过负脉冲标志F0置1, ;即接收过负跳变 RETI IT1P: CPL P1.0 ;T1中断服务程序,P1.0位取反 RETI 程序说明:当单片机复位时,从0000H跳向主程序MAIN处执行程序。其中调用了对T0,T1初始化子程序PT0M2。子程序返回后执行标号LOOP处指令,循环等待T0引脚上负脉冲的到来。由于负脉冲到来的标志位F0的复位初始值为0,所以程序就在标号LOOP处循环等待。,46,46,当T0(P3.4)脚发生负跳变时,由于T0计数溢出,则跳向T0中断服务子程序。此时停止T0计数,并把T0引脚接收过负脉冲的标志F0置1。 当中断返回时,由于F0已被置1,则程序跳出LOOP处的循环等待。此时执行指令来允许T1中断,并启动T1定时,然后执行“AJMP HERE”指令,循环等待,等待T1的500s定时中断到来。 当T1的500s定时中断产生时,则进入T1的中断服务子程序IT1P,把P1.0脚电平取反。由于是自动装初值,省去对T1重装初值指令。中断返回后,到“AJMP HERE” 处等待T1的500s定时中断。如此重复,即得到图6-14波形。,47,47,【例6-5】 利用定时器T1的方式2计数,每计满100个数,将P1.0取反。本例是方式2计数模式的应用举例。 (1)选择工作方式 外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器便加1,每输入100个脉冲,计数器将产生溢出中断,在中断服务程序中将P1.0取反一次。 T1工作在方式2的控制字TMOD = 60H。不使用T0时,TMOD低4位任取,但不能使T0为方式3,这里取全0。 (2)计算T1的初值 X = 28 100 = 156 = 9CH TL1的初值为9CH,重装初值寄存器TH1 = 9CH。,48,48,(3)参考程序: ORG 0000H ;程序运行入口 LJMP MAIN ;跳向主程序MAIN ORG 001BH ;T1中断服务程序入口 CPL P1.0 ;P1.0位取反 RETI ORG 0100H ;主程序入口 MAIN: MOV TMOD,#60H ;设置T1为方式2计数 MOV TL0,#9CH ;T0置初值 MOV TH0,#9CH SETB TR1 ;启动T1 HERE: AJMP HERE END,49,49,6.4.4 门控制位GATEx的应用测量脉冲宽度 介绍门控制位GATE的具体应用,测量 (P3.3)引脚上正脉冲的宽度。 【例6-7】 门控位GATE1可使T1的启动计数受 的控制,当GATE1 = 1,TR1=1时,只有 INT1*引脚输入高电平时,T1才被允许计数。可测量 引脚 (P3.3)上正脉冲的宽度。其方法如图6-16所示。,50,图6-16 利用GATE位测量正脉冲的宽度,50,参考程序: ORG 0000H RESET: AJMP MAIN ;复位入口转主程序 ORG 0100H ;主程序入口 MAIN: MOV SP,#60H MOV TMOD,#90H ;向TMOD写控制字,T1为方 ;式1定时,GATE1 = 1 MOV TL1,#00H MOV TH1,#00H LOOP0: JB P3.3,LOOP0 ;等待 低 SETB TR1 ;如 为低,启动T1,51,51,LOOP1:JNB P3.3,LOOP1;等待 升高 LOOP2:JB P3.3,LOOP2 ; 为高, 此时计数器计数, ;等待 降低 CLR TR1 ;停止T1计数 MOV A,TL1 ;T1计数值送A ;将T1计数值送显示器 END 执行以上程序,使 引脚上出现的正脉冲宽度以机器周期数的形式显示在显示器上。,52,将A中的T1计数值送到显示器显示,52,6.4.5 实时时钟的设计 介绍使用定时器/计数器实现时钟。 1实现实时时钟的基本思想 最小计时单位是秒,如何获得1s的定时时间呢?从前面介绍知,定时器方式1,最大定时时间也只能131ms。可将定时器的定时时间定为100ms,中断方式进行溢出次数的累计,计满10次,即得秒计时。而计数10次可用循环程序的方法实现。初值的计算如例6-2。 片内RAM规定3个单元为秒、分、时单元: 42H:“秒”单元;41H:“分”单元;40H:“时”单元,53,53,从秒到分,从分到时是通过软件累加并比较来实现。要求每满1秒,则“秒”单元42H中的内容加1;“秒”单元满60,则“分”单元41H中的内容加1;“分”单元满60,则“时”单元40H中的内容加1;“时”单元满24,则将42H、41H、40H的内容全部清“0”。 2程序设计 (1)主程序设计 进行定时器T0初始化,并启动T0,然后反复调用显示子程序,等待100ms中断到来。流程如图6-17所示。 (2)中断服务程序的设计 实现秒、分、时的计时处理。流程如图6-18所示。,54,54,55,图6-17 时钟主程序流程,55,56,图6-18 中断服务程序流程,56,参考程序: ORG 0000H AJMP MAIN ;上电,跳向主程序 ORG 000BH ;T0的中断入口 AJMP IT0P ORG 1000H MAIN: MOV TMOD,#01H ;设T0为方式1 MOV 20H, #0AH ;装入中断次数 CLR A MOV 40H, A ;“时”单元清“0” MOV 41H, A ;“分”单元清“0” MOV 42H, A ;“秒”单元清“0”,57,57,SETB ET0 ;允许T0申请中断 SETB EA ;总中断允许 MOV TH0,#3CH ;给T0装入计数初值 MOV TL0,#0B0H SETB TR0 ;启动T0 HERE: SJMP HERE ;等中断(也可调用显示子程序) IT0P: PUSH PSW ;T0中断子程序入口, 保护现场 PUSH Acc MOV TH0,#3CH ;重新装入初值 MOV TL0,#0B0H DJNZ 20H,RETURN ;1秒时间未到, 返回 MOV 20H, #0AH ;重置中断次数 MOV A, #01H ;“秒”单元增1,58,58,ADD A,42H DA A ;“秒”单元十进制调整 MOV 42H,A ;“秒”的BCD码存回“秒”单元 CJNE A,#60H,RETURN ;是否到60秒,未到则返回 MOV 42H, #00H ;计满60秒,“秒”单元清“0” MOV A, #01H ;“分”单元增1 ADD A,41H DA A ;“分”单元十进制调整 MOV 41H,A ;“分”的BCD码存回“分”单元 CJNE A,#60H,RETURN ;是否到60分,未到则返回,59,59,MOV 41H, #00H ;计满60分,“分”单元清“0” MOV A, #01H ;“时”单元增1 ADD A,40H DA A ;“时”单元十进制调整 MOV 40H,A CJNE A,#24H,RETURN ;是否到24小时,未 ;到则返回 MOV 40H, #00H ;到24小时,“时”单元清“0” RETURN:POP Acc ;恢复现场 POP PSW RETI ;中断返回 END,60,60,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!