51 汇编语言编程:走道灯控制程序


按一下按键灯就亮,延时 10s 后自动灭。在亮灯期间再按一下键,灯立即就灭。


用定时器及中断实现。


题目链接:http://zhidao.baidu.com/question/1302357964153805259.html


提问者采纳    2013-12-09 13:47


LED   EQU   P3.3

KEY   EQU   P3.7


    ORG   0000H

    LJMP  START

    ORG   000BH

    LJMP  T0_INT

    ORG   0030H

;--------------------------------

START:

    MOV   TMOD, #01H

    MOV   TH0, #HIGH(65536-62500)

    MOV   TL0, #LOW(65536-62500)

    MOV   IE, #82H

;--------------------------------

LP1:

    SETB  LED        ;关灯

    JB    KEY, LP1   ;等待第一次按键

    CALL  DELAY

    JB    KEY, LP1

    JNB   KEY, $

;-------------------

    MOV   R2, #160   ;10s

    SETB  TR0        ;启动定时器

    CLR   LED        ;开灯

LP2:

    JNB   TR0, LP1   ;如果已经定时结束,就去等待第一次按键

    JB    KEY, LP2   ;等待第二次按键

    CALL  DELAY

    JB    KEY, LP2

    JNB   KEY, $


    SJMP  LP1        ;如果发生了第二次按键,就去等待第一次按键

;--------------------------------

T0_INT:

    MOV   TH0, #HIGH(65536-62500)

    MOV   TL0, #LOW(65536-62500)

    DJNZ  R2, T0_E   ;定时10s

    CLR   LED        ;时间到了,关灯

    CLR   TR0

T0_E:

    RETI

;--------------------------------

DELAY:               ;延时约10ms(fosc=12MHz)

    MOV   R6, #20

    DJNZ  R7, $

    DJNZ  R6, $ - 2

    RET

;--------------------------------

END


提问者评价:谢谢了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值