单片机编程,输出周期为2S和0.5S的方波

2019-04-15 13:56发布

在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倍的关系,把它们输出,即可得到所需的周期波形。
呵呵,做而论道的程序,所使用的资源,是最低的;执行效率也最高,不知网友们认为如何?