用定时器来定时,分别使用中断和查询方法,设计流水灯

P2作输出端口,8个LED灯轮流亮,间隔为1秒。分别采用查询和中断编写源程序。
悬赏分:0 - 解决时间:2010-5-4 17:56
;--------------------------------------------
最佳答案:

假设晶振频率是12MHz;P2口输出低电平时LED发光。
下列两个程序,经过了PROTEUS仿真,能够满足要求。
;===================================================
;下面是查询方式

    ORG  0000H
    LJMP MAIN
    ORG  0050H
MAIN:
    MOV  TMOD, #01         ;令T0定时方式1
    MOV  TH0, #3CH
    MOV  TL0, #0B0H        ;50ms@12MHz
    SETB TR0               ;启动T0
;--------------------------------------------
    MOV  R7, #20
    MOV  A, #7FH
    MOV  P2, A
M_LOOP:
    JNB  TF0, M_LOOP      ;T0没有溢出,就在此循环不止.
    CLR  TF0
    MOV  TL0, #0B0H
    MOV  TH0, #3CH
    DJNZ R7, M_LOOP       ;溢出20次?
    MOV  R7, #20          ;才到1s
    RR   A
    MOV  P2, A

    SJMP M_LOOP
;--------------------------------------------
END
;===================================================
;下面是中断方式

    ORG  0000H
    LJMP MAIN
    ORG  000BH
    LJMP T0_INT
    ORG  0050H
MAIN:
    MOV  TMOD, #01        ;令T0定时方式1
    MOV  TH0, #3CH
    MOV  TL0, #0B0H       ;50ms@12MHz
    SETB TR0              ;启动T0
    MOV  IE, #82H         ;允许中断.
;--------------------------------------------
    MOV  R7, #20
    MOV  A, #7FH
    MOV  P2, A
M_LOOP:
    ;主程序, 空循环         
    SJMP M_LOOP
;--------------------------------------------
T0_INT:                   ;50ms执行一次.
    MOV  TL0, #0B0H
    MOV  TH0, #3CH
    DJNZ R7, T0_END       ;中断20次?
    MOV  R7, #20          ;才到1s
    RR   A
    MOV  P2, A
T0_END:
    RETI
;--------------------------------------------
END
;===================================================
回答者:  做而论道 - 十三级   2010-5-4 17:29
提问者对于答案的评价:非常感谢!!!
原题网址:http://z.baidu.com/question/151022680.html
;===================================================

你可能感兴趣的:(流水灯)