找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2155|回復(fù): 3
收起左側(cè)

51單片機(jī)匯編:求大佬們幫我看看這個(gè)匯編程序,關(guān)于倒計(jì)時(shí)的

[復(fù)制鏈接]
ID:786805 發(fā)表于 2020-6-26 21:02 | 顯示全部樓層 |閱讀模式
所要實(shí)現(xiàn)的功能:
1.外部放置的鍵盤不少于四個(gè),用來設(shè)定不同的倒計(jì)時(shí)時(shí)間;
2.當(dāng)時(shí)間到達(dá)設(shè)定值時(shí),發(fā)光二極管和蜂鳴器發(fā)出信;(這個(gè)還沒加進(jìn)去)
3在數(shù)碼管上顯示倒計(jì)時(shí)時(shí)間。
問題描述:
當(dāng)?shù)谝淮伟聪码娫存I再按所需要倒計(jì)時(shí)的時(shí)間時(shí),可以正常倒計(jì)時(shí),暫停鍵也正常。但當(dāng)我想要重置并且選擇另一個(gè)時(shí)間作為倒計(jì)時(shí)時(shí),數(shù)碼管只顯示那個(gè)時(shí)間,但是沒有進(jìn)行倒計(jì)時(shí),然后再按下其他按鍵也沒有反應(yīng)了。
代碼如下:
        ORG   0000H
                LJMP  MAIN
        ORG   0003H
        LJMP  TINT0 ;轉(zhuǎn)向外部中斷子程序(暫停功能)
                ORG   0013H
                LJMP  TINT1        ;轉(zhuǎn)向外部中斷1服務(wù)程序
                ORG   000BH
                LJMP  T0INT ;轉(zhuǎn)向定時(shí)中斷0服務(wù)程序
                ORG   0030H
                ;P0口接數(shù)碼管的段選(高電平有效)
                ;P2.0-P2.3接數(shù)碼管的位選(低電平有效)
MAIN:
     MOV P2,#00H ;初始化P2口
     MOV P0,#3FH ;讓6位數(shù)碼管顯示0
     SETB EA;中斷允許
     SETB ET0;定時(shí)器0中斷允許
     SETB EX0;外部中斷0允許
         SETB EX1 ;外部中斷1允許
         ;SETB IE1
         SETB PX1 ;外部中斷1為高優(yōu)先級(jí)
         SETB PX0 ;外部中斷0位高優(yōu)先級(jí)
         ;SETB PS
         CLR  PT0 ;定時(shí)器中斷0位低優(yōu)先級(jí)
     MOV TMOD,#01H;置定時(shí)器0為工作方式1
     MOV TH0,#3CH  ;12MHz50ms初值
     MOV TL0,#0B0H
     MOV R5,#00H
     MOV R6,#00H
         JB P1.0,MAIN
     SETB TR0  ;啟動(dòng)定時(shí)器
         JNB                P3.0, S1OK        ;若按下P3.0,則跳轉(zhuǎn)至S1OK
         JNB                P3.1, S2OK        ;若按下P3.1,則跳轉(zhuǎn)至S2OK
         JNB                P3.4, S3OK        ;若按下P3.4,則跳轉(zhuǎn)至S3OK
         JNB                P3.6, S4OK        ;若按下P3.6,則跳轉(zhuǎn)至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:
         
    ;計(jì)時(shí)顯示掃描
    ;R4為時(shí)鐘,R5為分,R6為秒
    ;顯示小時(shí)的十位
     MOV A,R4
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#03EH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
     ;顯示小時(shí)的個(gè)位
     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
     ;顯示分鐘的個(gè)位
     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
     ;顯示秒鐘的個(gè)位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#01FH
     MOV P0,A
     LCALL DELAY1
     MOV P2,#03FH
//         JNB                P3.0, S1OK        ;若按下P3.0,則跳轉(zhuǎn)至S1OK
//         JNB                P3.1, S2OK        ;若按下P3.1,則跳轉(zhuǎn)至S2OK
//         JNB                P3.4, S3OK        ;若按下P3.4,則跳轉(zhuǎn)至S3OK
//         JNB                P3.6, S4OK        ;若按下P3.6,則跳轉(zhuǎn)至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                 ;延時(shí)20ms
                        AJMP    DEL1
DELAY2:                MOV     20H,    #100         ;延時(shí)2s
                        AJMP    DEL1
DEL1:                MOV                40H,        #125         ;延時(shí)子程序的跳轉(zhuǎn)程序
DEL11:                MOV                30H,        #20
DEL12:                DJNZ        30H,        DEL12
                        DJNZ        40H,        DEL11
                        DJNZ        20H, DEL1
               
                        RET
;==================================
;查表指令
CHABIAO:
     MOV DPTR,#TAB
     MOVC A,@A+DPTR
     RET
;============================
;定時(shí)中斷子程序

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
回復(fù)

使用道具 舉報(bào)

ID:786805 發(fā)表于 2020-6-26 21:07 | 顯示全部樓層
不好意思,發(fā)了才發(fā)現(xiàn)程序沒整理整齊
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-6-28 01:33 | 顯示全部樓層
R5 R6寄存器在按不同的鍵時(shí)未進(jìn)行重新初始化
回復(fù)

使用道具 舉報(bào)

ID:786805 發(fā)表于 2020-6-28 09:52 | 顯示全部樓層
csmyldl 發(fā)表于 2020-6-28 01:33
R5 R6寄存器在按不同的鍵時(shí)未進(jìn)行重新初始化

您的意思是說在下面的每個(gè)按鍵里面加上“MOV R5,#0    MOV R6,#0” 嗎?或者說應(yīng)該怎么改?麻煩大佬再幫我看看,謝謝了。
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
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表