找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1647|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机汇编:求大佬们帮我看看这个汇编程序,关于倒计时的

[复制链接]
跳转到指定楼层
楼主
所要实现的功能:
1.外部放置的键盘不少于四个,用来设定不同的倒计时时间;
2.当时间到达设定值时,发光二极管和蜂鸣器发出信;(这个还没加进去)
3在数码管上显示倒计时时间。
问题描述:
当第一次按下电源键再按所需要倒计时的时间时,可以正常倒计时,暂停键也正常。但当我想要重置并且选择另一个时间作为倒计时时,数码管只显示那个时间,但是没有进行倒计时,然后再按下其他按键也没有反应了。
代码如下:
        ORG   0000H
                LJMP  MAIN
        ORG   0003H
        LJMP  TINT0 ;转向外部中断子程序(暂停功能)
                ORG   0013H
                LJMP  TINT1        ;转向外部中断1服务程序
                ORG   000BH
                LJMP  T0INT ;转向定时中断0服务程序
                ORG   0030H
                ;P0口接数码管的段选(高电平有效)
                ;P2.0-P2.3接数码管的位选(低电平有效)
MAIN:
     MOV P2,#00H ;初始化P2口
     MOV P0,#3FH ;让6位数码管显示0
     SETB EA;中断允许
     SETB ET0;定时器0中断允许
     SETB EX0;外部中断0允许
         SETB EX1 ;外部中断1允许
         ;SETB IE1
         SETB PX1 ;外部中断1为高优先级
         SETB PX0 ;外部中断0位高优先级
         ;SETB PS
         CLR  PT0 ;定时器中断0位低优先级
     MOV TMOD,#01H;置定时器0为工作方式1
     MOV TH0,#3CH  ;12MHz50ms初值
     MOV TL0,#0B0H
     MOV R5,#00H
     MOV R6,#00H
         JB P1.0,MAIN
     SETB TR0  ;启动定时器
         JNB                P3.0, S1OK        ;若按下P3.0,则跳转至S1OK
         JNB                P3.1, S2OK        ;若按下P3.1,则跳转至S2OK
         JNB                P3.4, S3OK        ;若按下P3.4,则跳转至S3OK
         JNB                P3.6, S4OK        ;若按下P3.6,则跳转至S4OK
         JMP                MAIN  

S1OK:
         MOV R4,#2
         ACALL DISP
         SJMP MAIN

S2OK:
         MOV R4,#3
         ACALL DISP
         SJMP MAIN

S3OK:
         MOV R4,#4
         ACALL DISP
         SJMP MAIN

S4OK:
         MOV R4,#5
         ACALL DISP
         SJMP MAIN




;==========================================
;=========键盘扫描程序=====================
DISP:
         
    ;计时显示扫描
    ;R4为时钟,R5为分,R6为秒
    ;显示小时的十位
     MOV A,R4
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#03EH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;显示小时的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#03DH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;显示分钟的十位
     MOV A,R5
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#03BH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;显示分钟的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#037H
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;显示秒钟的十位
     MOV A,R6
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#02FH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;显示秒钟的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#01FH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
//         JNB                P3.0, S1OK        ;若按下P3.0,则跳转至S1OK
//         JNB                P3.1, S2OK        ;若按下P3.1,则跳转至S2OK
//         JNB                P3.4, S3OK        ;若按下P3.4,则跳转至S3OK
//         JNB                P3.6, S4OK        ;若按下P3.6,则跳转至S4OK
         CJNE R0,#20,DISP
         MOV R0,#00H
         DEC R6
         CJNE R6,#0FFH,DISP
         MOV R6,#59
     DEC R5
     CJNE R5,#0FFH,DISP
     MOV R5,#59
     DEC R4
     CJNE R4,#0FFH,DISP
         MOV R4,#0
     CLR TR0
         RET

         
//     RET

;====================================
DELAY1:                MOV                20H,        #1                 ;延时20ms
                        AJMP    DEL1
DELAY2:                MOV     20H,    #100         ;延时2s
                        AJMP    DEL1
DEL1:                MOV                40H,        #125         ;延时子程序的跳转程序
DEL11:                MOV                30H,        #20
DEL12:                DJNZ        30H,        DEL12
                        DJNZ        40H,        DEL11
                        DJNZ        20H, DEL1
               
                        RET
;==================================
;查表指令
CHABIAO:
     MOV DPTR,#TAB
     MOVC A,@A+DPTR
     RET
;============================
;定时中断子程序

T0INT:
         INC R0
     MOV TH0,#3CH
     MOV TL0,#0B0H
     RETI     
EXIT:
     RETI
;================================================
;外部中断0子程序
TINT0:
   
     CPL TR0     
     RETI

TINT1:
         JMP MAIN
         RETI

TAB:        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
                DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H

                END

Pet.png (91.22 KB, 下载次数: 47)

Pet.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:786805 发表于 2020-6-26 21:07 | 只看该作者
不好意思,发了才发现程序没整理整齐
回复

使用道具 举报

板凳
ID:235200 发表于 2020-6-28 01:33 | 只看该作者
R5 R6寄存器在按不同的键时未进行重新初始化
回复

使用道具 举报

地板
ID:786805 发表于 2020-6-28 09:52 | 只看该作者
csmyldl 发表于 2020-6-28 01:33
R5 R6寄存器在按不同的键时未进行重新初始化

您的意思是说在下面的每个按键里面加上“MOV R5,#0    MOV R6,#0” 吗?或者说应该怎么改?麻烦大佬再帮我看看,谢谢了。
S1OK:
         MOV R4,#2
         ACALL DISP
         SJMP MAIN

S2OK:
         MOV R4,#3
         ACALL DISP
         SJMP MAIN

S3OK:
         MOV R4,#4
         ACALL DISP
         SJMP MAIN

S4OK:
         MOV R4,#5
         ACALL DISP
         SJMP MAIN
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表