以定时/计数器1进行外部事件计数。每计数1000个脉冲后,定时/计数器1转为定时工作方式,定时10ms后,又

以定时/计数器1进行外部事件计数。每计数1000个脉冲后,定时/计数器1转为定时工作方式,定时10ms后,又转为计数方式,如此循环。设单片机的晶振频率为6MHz。
可以的话画个流程图,这样会明白一点,另外用汇编语言编程序

解:
T1方式0作计数器,计数预装值X = 2^13 - 1000 =7192D =1C18H
TH1←1CH, TL1←18H
机器周期 T = 12/Fosc = 12/(6x10^6) = 2x10^-6s =2μ s
10ms周期对应的计数满值 = 10000μ s/2μ s = 5000
T1方式0作10ms定时器,计数初值 = 2^13 -5000 =3192D = 0C78H
TH1←0CH, TL1←78H
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H ;;堆栈指针初值
LP0: MOV TMOD, #40H ;;T1方式0作计数器
MOV TH1, #1CH ;;T1计数预装值高8位
MOV TL1, #18H ;;T1计数预装值低8位
SETB TR1 ;;启动T1计数
LP1: JBC TF1, DLAY ;;若T计数溢出,转DLAY延时10ms
SJMP LP1 ;;若T1计数未溢出,继续查询
DLAY: CLR TR1 ;;关闭T1
MOV TMOD, #00H ;;T1改作方式0作定时器
MOV TH1, #0CH ;;T1定时计数预装值高8位
MOV TL1, #78H ;;T1定时计数预装值低8位
SETB TR1 ;;启动T1计数延时
LP2: JBC TF1, LP3 ;;若T1计数延时至10ms,转LP3
SJMP LP2 ;;若T1计数延时未达10ms,继续查询
LP3: CLR TR1 ;;关闭T1
AJMP LP0 ;;转LP0,使T1重新作定时器
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-25
俞先锋 好样的
第2个回答  2011-04-20
TMOD与TCON两个寄存器看懂了就会了