欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2325|回復: 3
收起左側

51單片機匯編:求大佬們幫我看看這個匯編程序,關于倒計時的

[復制鏈接]
ID:786805 發表于 2020-6-26 21:02 | 顯示全部樓層 |閱讀模式
所要實現的功能:
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
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表