在80C51单片机中,已知时钟频率为 6MHz,请编程使 P1.0 和 P1.1 分别输出周期为 2s 和 0.5s 的方波。
求答案,过程。
悬赏分:50 - 解决时间:2010-1-7 17:16
;=====================================
最佳答案:
;-------------------------------------
;下列程序,经过编译、仿真,符合要求:
;-------------------------------------
ORG 0000H
SJMP START
ORG 000BH
SJMP T0_INT
;-------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #9EH
MOV TL0, #58H ;50ms@6MHz
SETB TR0
SETB ET0
SETB EA
MOV R2, #5
MOV A, #0
CLR P1.0
CLR P1.1
SJMP $ ;原地转移,假死,等待中断
;-------------------------------------
T0_INT: ;50ms执行一次
MOV TH0, #9EH ;重新赋初始值
MOV TL0, #58H ;50ms@6MHz
DJNZ R2, T0_END ;不到5次,转到退出
; ;下列指令都是每隔250ms执行一次
MOV R2, #5 ;重新设置
INC A ;计数器加一
MOV C, ACC.0
MOV P1.1, C ;P1.1,每隔250ms,变化一次
MOV C, ACC.2
MOV P1.0, C ;P1.0,每隔1s,变化一次
T0_END:
RETI
;-------------------------------------
END
;-------------------------------------
回答者: 做而论道 - 十二级 2010-1-7 12:54
提问者对于答案的评价:xiexie
原文网址:
http://zhidao.baidu.com/question/132367773.html;-------------------------------------后记:题目要求输出两个波形的周期是个4倍的关系,这一点,被做而论道发现并巧妙的利用了。
程序中只使用了一个计数器ACC,它的相邻两位之间的变化时间,是呈2倍的关系;
而其第0位和第2位,就是4倍的关系,把它们输出,即可得到所需的周期波形。
呵呵,做而论道的程序,所使用的资源,是最低的;执行效率也最高,不知网友们认为如何?