立即注册 登录
返回首页

uid:59980的个人空间

日志

秒表主程序

已有 592 次阅读2014-3-24 23:25 |个人分类:时控类| 主程序

 ORG     00H                  ;  起始标号

START:
        MOV     P0,#00H              ;  显示00
        JB      P1.0,  $             ;  检测P1.0开关是否按下,当按钮按下则继续(低电平是按下)
        CALL    FILTER               ;  消除开关的抖动
        JNB     P1.0,  $             ;  判断, 有没有放开按钮(高电平是放开)
        MOV     R0,#00H              ;  设置计时初始值

PRESS_1:
         MOV    A,R0                  ;  将初始值载入ACC
         MOV    P0,A                  ;  输出至P0口
         MOV    R5,#10                ;  延时1秒

ADD_1:                                ;  加法程序
         MOV    R6,#200               ;  延时用寄存器
         CALL   DELAY                 ;  调用延时子程序
         DJNZ   R5,PRESS_1            ;  将R5的值减1,不小于零就回PRESS继续执行
         MOV    A,R0                  ;  将初始值载入ACC
         ADD    A,#01H                ;  计时值加1
         DA     A                     ;  十进制调整
         MOV    R0, A                 ;  返回计时用寄存器
         JMP    PRESS_1               ;  重复计时动作

PRESS_2:                              ;  第二次按按钮
         CALL  FILTER                 ;  消除开关的抖动
         JB    P1.0, PRESS_3          ;  如果放开按钮,则跳至PRESS_3
         JMP   PRESS_2                ;  不是放开按钮,则重复PRESS_2

PRESS_3:                              ;  第三次按按钮
         JB    P1.0,$                 ;  当按下则继续,低电平有效
         CALL  FILTER                 ;  消除开关的抖动

PRESS_4:
         JB    P1.0, START            ;  放开按钮则跳至START清零,由低电平变高电平有效
         JMP   PRESS_4                ;  否则重复PRESS_4

DELAY:                                ;  延时子程序
         MOV   R7,#248                ;  将立即数248载入R7寄存器,则R7的值为248
         JNB   P1.0, PRESS_2          ;  判断, 有没有放开按钮(高电平是放开)放开则跳至PRESS_2执行
         DJNZ  R7, $                  ;  将R7的值减1,不小于0就重复执行该程序,否则执行下一程序
         DJNZ  R6, DELAY              ;  将R6的值减1,不小于0就跳至DELAY处执行,否则执行下一程序
         RET                          ;  子程序执行完毕后返回主程序

FILTER:
         MOV   R6,#60                 ;  消除抖动,30ms延时子程序
         
D1:      
         MOV   R7,#248                ;  使R7等于248
         DJNZ  R7,$                   ;  将R7的值减1,不小于0就重复执行该程序,否则执行下一程序
         DJNZ  R6,D1                  ;  将R6的值减1,不小于0就跳至D1处执行,否则执行下一程序
         RET                          ;  子程序执行完毕后返回主程序
         END                          ;  程序结束

                 
         

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部