设晶振频率为6MHZ,试用T0为外部计数器,编程实现每当记到1000个脉冲?
2022-12-11 · 百度认证:北京惠企网络技术有限公司官方账号
解:T0方式0作计数器,计数初值A0 = 2^13 - 1000 =7192D =1C18H
TH0←1CH, TL0←18H
机器周期 T = 12/Fosc = 12/(6x10^6) = 2x10^-6s =2μ s
2ms周期对应的计数满值 = 2000μ s/2μ s = 1000
T1方式1作2ms定时器,计数初值A1 = 2^16 -1000 =64536D =FC18H
TH1←FCH, TL1←18H
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H ;;堆栈指针初值
MOV TMOD, #14H ;;T0方式0作计数器,T1方式1作定时器
LP0 MOV TH0, #1CH ;;T0计数初值高8位
MOV TL0, #18H ;;T0计数初值低8位
SETB TR0 ;;启动T0计数
LP1: JBC TF0, DLAY ;;若T0计数溢出,转DLAY延时2ms
SJMP LP1 ;;若T0计数未溢出,继续查询
DLAY: CLR TR0 ;;关闭T0
MOV TH1, #FCH ;;T1计数初值高8位
MOV TL1, #18H ;;T1计数初值低8位
SETB TR1 ;;启动T1计数延时
LP2: JBC TF1, LP3 ;;若T1计数延时至2ms,转LP3
SJMP LP2 ;;若T1计数延时未达2ms,继续查询
LP3: CLR TR1 ;;关闭T1
AJMP LP0 ;;转LP0,使T0重新计数
END