定时器0延时程序
(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
附图:
定时器0延时程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)