编写一段程序,让单片机的P1.7输出1ms的方波(用定时器T1完成),晶振频率12MHz.

如题所述

机器周期 T = 12/Fosc = 12/(12x10^6) = 2x10^-6s =1μs
1ms方波的半周期 =500μs ,计数值=500μs/1μs =500d
约定T1工作方式0,是13位计数器,2^13 =8192d -500d = 7692d =1E0Ch
TH1←1EH, TL1←0CH
汇编程序如下:
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H ;;堆栈指针初值
MOV TMOD, #00H ;;T1方式0作定时器
LP1 MOV TH0, #1EH ;;T1计数预装值高8位
MOV TL0, #0CH ;;T1计数预装值低8位
SETB TR1 ;;启动T1计数
LP2: JBC TF1, LP3 ;;若T1计数溢出,转LP3
SJMP LP2 ;;若未溢出,继续查询
LP3: CPL P1.7 ;;P1.7输出电平高低置反
AJMP LP1 ;;循环,进入另一半周期
END
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-29
;
ORG 0000H
MOV TMOD, #20H ;T1定时方式2
MOV TH1, #6 ;定时250us
SETB TR1 ;启动T1
LP1:JNB TF1, $
CLR TF1
CPL F0
JNB F0, LP1
CPL P1.7 ;500us高电平500us低电平
SJMP LP1
END
第2个回答  2014-11-27

给你做Proteus仿真吧

追问

是at89c52

追答

丘上说吧

相似回答