您的位置 首页 IC

定时器0延时程序

本程序主要实现的是用DA指令进行10进制调整,使得两位数码管循环显示0-99,延时1s。(1):工作方式0下延时1s查询方式:ORG0000HJMPMAI…

本程序首要完成的是用DA指令进行10进制调整,使得两位数码管循环显现0-99,延时1s。

(1):作业方法0下延时1s

查询方法:

ORG 0000H
JMP MAIN
ORG 30H
MAIN:
MOV TMOD,#00H ;设置TIMER0作业在MODE0
MOV R4,#00H ;设置数码管显现初值
;SETB EA
;SETB ET0

START:
MOV R2,#200;延时1s
MOV P2,R4 ;计数初值送P2显现
LCALL DELAY
XCH A,R4
ADD A,#01H
DA A ;R4送A累加,并做十进制调整
XCH A,R4 ;调整后回送R4

;CJNE R4,#60H,START ;若要显现60进制,需加判别句子
;MOV R4,#00H
JMP START

DELAY:
SETB TR0
REINIT:
MOV TL0,#(8192-5000)%256
MOV TH0,#(8192-5000)/256 ;守时5ms
LOOP:JBC TF0,LOOP1 ;TF0是否为1,是则跳到LOOP1,并铲除TF0
SJMP LOOP ;不是则跳到LOOP持续查询TF0溢出标志位状况
LOOP1:
DJNZ R2,REINIT ;R2不为0持续装入初值,持续守时
CLR TR0
RET
END

中止方法:

ORG 0000H
JMP MAIN
ORG 000BH;守时器0中止的进口地址
JMP INT_0
ORG 30H
MAIN:
MOV TMOD,#00H
MOV R4,#00H
SETB EA
SETB ET0
MOV TL0,#(8192-5000)%256
MOV TH0,#(8192-5000)/256
SETB TR0
START:
MOV P2,R4
MOV R2,#200
CJNE R2,#0,$
MOV R2,#200
XCH A,R4
ADD A,#01H
DA A
XCH A,R4
JMP START

INT_0:
CLR TF0
MOV TL0,#(8192-5000)%256
MOV TH0,#(8192-5000)/256
DEC R2
RETI
END

假如选用方法1的话,只需要重设TMOD为#01H,TH0=0D8H,TL0=0F0H即可。

(2):守时器0作业方法2延时1s

因为作业方法2下一次守时的最大时刻为256us,所以设定一次循环的话,寄存器中循环初值设置最大也达不到延时1s的意图,因而选用了用两个寄存器来循环守时。

查询方法:

ORG 0000H
JMP MAIN
ORG 30H
MAIN:
MOV TMOD,#02H ;作业方法2
MOV R4,#00H

START:
MOV R2,#200 ;推迟50ms
MOV R3,#20 ;推迟1s
COUNT:

MOV P2,R4
LCALL DELAY
DJNZ R3,COUNT;循环守时
XCH A,R4
ADD A,#01H
DA A
XCH A,R4
JMP START

DELAY:
SETB TR0

REINIT:
MOV TL0,#6
MOV TH0,#6 ;守时250us

LOOP:JBC TF0,LOOP1
SJMP LOOP

LOOP1:
DJNZ R2,REINIT
CLR TR0
RET
END

中止方法:

ORG 0000H
JMP MAIN
ORG 000BH
JMP INT_0
ORG 30H
MAIN:
MOV TMOD,#02H
MOV R4,#00H
SETB EA
SETB ET0
MOV TL0,#6
MOV TH0,#6
SETB TR0
START:
MOV R3,#20
MOV R2,#200
LOOP:
MOV P2,R4
CJNE R2,#0,$
MOV R2,#200
DJNZ R3,LOOP ;循环守时
XCH A,R4
ADD A,#01H
DA A
XCH A,R4
JMP START

INT_0:
CLR TF0
MOV TL0,#6
MOV TH0,#6
DEC R2
RETI
END

附图:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/275016.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部