您的位置:首页 > 编程语言

51 汇编语言编程:0.00~99.9 秒表

2016-01-25 12:06 309 查看
;设计一个 00.0 ~ 99.9 的秒表。

; P1.0 接一个按键,按一下开始,按第二下暂停,按第三下就清零。

电路图如下:



图片链接:http://xiangce.baidu.com/picture/detail/a25c9c6836dbfcba6faf52a902dfde5ded1931a6

做而论道为此编写的程序如下:

    ORG   0000H
    LJMP  MAIN
    ORG   000BH
    LJMP  T0_INT
;--------------------------------
MAIN:                  ;初始化
    MOV   DPTR, #TAB
    MOV   TMOD, #01H
    MOV   IE, #82H
    MOV   R2, #1
LP1:MOV   TH0, #(65536 - 50000) / 256
    MOV   TL0, #(65536 - 50000) MOD 256
    MOV   R3, #2
    MOV   R4, #10
    MOV   R5, #10
    MOV   R6, #10
LP2:CLR   TR0
M_LOOP:   CALL  DISP
    JNB   P1.0, KK     ;检测到按键则转移
    SJMP  M_LOOP       ;循环
;--------------------------------
KK: CALL  DISP         ;延时
    JB    P1.0, M_LOOP ;消抖
K1: CALL  DISP
    JNB   P1.0, K1     ;等待释放
    DJNZ  R2, K2       ;按键次数
    MOV   R2, #3
    SETB  TR0          ;启动
    SJMP  M_LOOP
K2: CJNE  R2, #1, LP2  ;暂停
    SJMP  LP1          ;清零
;--------------------------------
DISP:                  ;显示
    MOV   P3, #07H
    MOV   A, R4
    MOVC  A, @A + DPTR
    MOV   P2, A
    CALL  DELAY

    MOV   P3, #0BH
    MOV   A, R5
    MOVC  A, @A + DPTR
    SETB  ACC.7        ;小数点
    MOV   P2, A
    CALL  DELAY

    MOV   P3, #0DH
    MOV   A, R6
    MOVC  A, @A + DPTR
    MOV   P2, A
    CALL  DELAY
    RET
TAB:
    DB  0, 6FH, 7FH, 07H, 7DH, 6DH, 66H, 4FH, 5BH, 06H, 3FH
DELAY:
    DJNZ  R7, $
    DJNZ  R7, $
    RET
;--------------------------------
T0_INT:                ;50ms中断一次
    MOV   TH0, #(65536 - 50000) / 256
    MOV   TL0, #(65536 - 50000) MOD 256
    DJNZ  R3, EE
    MOV   R3, #2
    DJNZ  R4, EE       ;修改各个时间变量
    MOV   R4, #10
    DJNZ  R5, EE
    MOV   R5, #10
    DJNZ  R6, EE
    MOV   R6, #10
EE:
    RETI               ;尽快退出中断程序
;--------------------------------
END

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

提问者评价:谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: