久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

請指正程序錯誤

本程序是要求設(shè)定一個時間,精確到千分之一秒,從00.000--99.999秒可手動調(diào)整,手動調(diào)整有十個鍵,5個加5個減,按一下對應(yīng)的位就加(減)1.時間設(shè)好開始計時,時間終結(jié)就產(chǎn)生中斷,并且在計時過程中還要顯示時間(倒計時).例如:設(shè)定時間為20.000,則一開始就顯示20.000秒,按了開關(guān)啟動后開始倒計時,并不斷顯示當(dāng)前倒計時時間(從20.000一直到00.000),倒計時為0時產(chǎn)生中斷.
    程序和電路原理圖如下:為了方便看程序,在程序中加了注釋

;==============================================
        ORG   0000H
        LJMP  START
;===========================================
        ORG   0003H
        MOV   R7,A    
        MOV   R7,A
        MOV   R7,A
        MOV   R7,A
        MOV   R7,A
        MOV   R7,A
        MOV   R7,A
        MOV   R7,A
TIME:   LJMP  INTERRUPT                
;===========================================
START:  MOV   SP,#5FH
        MOV   TMOD,#01H   ;定時器0設(shè)定為工作方式1
        MOV   TH0,#FCH
        MOV   TL0,#17H    ;定時器初值為FC17H,即          
                              ;64535,當(dāng)計數(shù)到65536時
                              ;時器產(chǎn)生溢出中斷,共計數(shù)1001次
         SETB  EA
        SETB  ET0
        MOV   R7,#00H
        MOV   R6,#00H
        MOV   R5,#00H
        MOV   R4,#00H
        MOV   R3,#00H
        MOV   P1,#FFH
        MOV   P2,#FFH
        MOV   P3,#FFH
        CLR   24H.0
DETECT: ACALL DISPLAY   ;連續(xù)兩次檢測有無按鍵輸入,
                            ;以消除按鍵抖動
        MOV   A,#FEH
        MOV   P1,A
        ACALL DELAY                
        MOV   A,P1
        ORL   A,#03H
        CPL   A
        JNZ    DETECT0
        ACALL DISPLAY
        MOV   A,#FDH
        MOV   P1,A
        ACALL DELAY
        MOV   A,P1
        ORL   A,#03H
        CPL   A
        JNZ   DETECT1
DETECT0:ACALL DISPLAY
        MOV   A,#FEH
        MOV   P1,A
        ACALL DELAY
        MOV   A,P1
        ORL   A,#03H
        CPL   A
        JNZ   JUDGE0
DETECT1:ACALL DISPLAY
        MOV   A,#FDH
        MOV   P1,A
        ACALL DELAY
        MOV   A,P1
        ORL   A,#03H
        CPL   A
        JNZ   JUDGE1              
        AJMP  DETECT
JUDGE0: CJNE  A,#04H,NEXT  ;判斷哪一位為1則表示對應(yīng)的時間
                               ;位加1
        AJMP  TENA
NEXT:   CJNE  A,#08H,NEXT1          
        AJMP  ONEA
NEXT1:  CJNE  A,#10H,NEXT2
        AJMP  POINT1A
NEXT2:  CJNE  A,#20H,NEXT3
        AJMP  POINT2A
NEXT3:  CJNE  A,#40H,NEXT4
        AJMP  POINT3A
NEXT4:  CJNE  A,#80H,BACK
        AJMP  SAVE
BACK:   AJMP  DETECT
JUDGE1: CJNE  A,#04H,NEXT0  ;判斷哪一位為1則表示對應(yīng)的時間
                                 ;位減1
        AJMP  TEND
NEXT0:  CJNE  A,#08H,NEXT5          
        AJMP  ONED
NEXT5:  CJNE  A,#10H,NEXT6
        AJMP  POINT1D
NEXT6:  CJNE  A,#20H,NEXT7
        AJMP  POINT2D
NEXT7:  CJNE  A,#40H,NEXT8
        AJMP  POINT3D
NEXT8:  CJNE  A,#80H,BACK
        AJMP  SAVE
RELESE: ACALL DISPLAY   ;確定按鍵是否釋放
        MOV   A,P1
        ORL   A,#03H
        CPL   A
        JNZ   RELESE
        AJMP  DETECT
POINT3A:JB    24H.0,RELESE
        CLR   C                    
        MOV   A,R3
        ADD   A,#01H
        DA    A                    
        ANL   A,#0FH   ;BCD十進制數(shù)只用后4位,前4位清0以防
                           ;出錯
        MOV   R3,A
        AJMP  RELESE
POINT2A:JB    24H.0,RELESE
        CLR   C
        MOV   A,R4
        ADD   A,#01H
        DA    A
        ANL   A,#0FH
        MOV   R4,A
        AJMP  RELESE
POINT1A:JB    24H.0,RELESE
        CLR   C
        MOV   A,R5
        ADD   A,#01H
        DA    A
        ANL   A,#0FH
        MOV   R5,A
        AJMP  RELESE
ONEA:   JB    24H.0,RELESE
        CLR   C
        MOV   A,R6
        ADD   A,#01H
        DA    A
        ANL   A,#0FH
        MOV   R6,A
        AJMP  RELESE
TENA:   JB    24H.0,RELESE        
        CLR   C
        MOV   A,R7
        ADD   A,#01H
        DA    A
        ANL   A,#0FH
        MOV   R7,A
        AJMP  RELESE
POINT3D:JB    24H.0,RELESE
        CLR   C                    
        MOV   A,R3
        DEC   A,#01H
        ANL   A,#0FH                        
        MOV   R3,A
        AJMP  RELESE
POINT2D:JB    24H.0,RELESE
        CLR   C
        MOV   A,R4
        DEC   A,#01H
        ANL   A,#0FH
        MOV   R4,A
        AJMP  RELESE
POINT1D:JB    24H.0,RELESE
        CLR   C
        MOV   A,R5
        DEC   A,#01H
        ANL   A,#0FH
        MOV   R5,A
        AJMP  RELESE
ONED:   JB    24H.0,RELESE
        CLR   C
        MOV   A,R6
        DEC   A,#01H
        ANL   A,#0FH
        MOV   R6,A
        AJMP  RELESE
TEND:   JB    24H.0,RELESE        
        CLR   C
        MOV   A,R7
        DEC   A,#01H
        ANL   A,#0FH
        MOV   R7,A
        AJMP  RELESE
SAVE:   MOV   A,R7     ;確定已經(jīng)手動置入了數(shù)則跳轉(zhuǎn)把定時數(shù)
                          ;據(jù)保存,否則返回繼續(xù)等待輸入定時數(shù)
        JNZ   DONE
        MOV   A,R6
        JNZ   DONE
        MOV   A,R5
        JNZ   DONE
        MOV   A,R4
        JNZ   DONE
        MOV   A,R3
        JNZ   DONE
        AJMP  RELESE
DONE:   MOV   37H,R7
        MOV   36H,R6
        MOV   35H,R5
        MOV   34H,R4
        MOV   33H,R3
        SETB  TR0       ;啟動計數(shù)器
        CLR   P2.7      ;點亮計數(shù)器指示燈
        SETB  24H.0
WAIT:   ACALL DISPLAY
        JB    24H.0,WAIT
        AJMP  RELESE
DISPLAY:SETB  P2.4      ;以掃描顯示方式顯示時間
        SETB  P2.3
        SETB  P2.2
        SETB  P2.1
        SETB  P2.0
        MOV   DPTR,#DATAS
        MOV   A,R7
        MOVC  A,@A+DPTR
        MOV   P0,A
        CLR   P2.4
        ACALL DELAY
        SETB  P2.4
        MOV   A,R6
        MOVC  A,@A+DPTR
        MOV   P0,A
        CLR   P0.7
        CLR   P2.3
        ACALL DELAY
        SETB  P2.3
        MOV   A,R5
        MOVC  A,@A+DPTR
        MOV   P0,A
        CLR   P2.2
        ACALL DELAY
        SETB  P2.2
        MOV   A,R4
        MOVC  A,@A+DPTR
        MOV   P0,A
        CLR   P2.1
        ACALL DELAY
        SETB  P2.1
        MOV   A,R3
        MOVC  A,@A+DPTR
        MOV   P0,A
        CLR   P2.0
        ACALL DELAY
        SETB  P2.0
        RET
;===========================================
DELAY:  MOV   R1,#02H    ;延時程序
LOOP:   MOV   R2,#FAH
        DJNZ  R2,$
        DJNZ  R1,LOOP
        RET
;===========================================
DATAS: DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H   ;七段BCD譯
                                                    ;碼顯示表
DB 80H,90H                       
;===========================================
INTERRUPT:PUSH  A     ;定時器每經(jīng)過1001*12/12M=1001微秒則
                          ;產(chǎn)生一次中斷,把手動置入的秒數(shù)減去
                          ;0.001秒
          PUSH  PSW                
          MOV   TH0,#FCH              
          MOV   TL0,#17H
          MOV   A,R7  ;檢查最高位是否已經(jīng)為0,為0則跳轉(zhuǎn)檢查
                         ;次高位.
          JZ    BITE2
          MOV   A,R3  ;檢查最低位是否為0,不為0則跳轉(zhuǎn)進行操
                         ;作減1,為0則檢查上一位是否可以借位
          JNZ   WRITE5
          MOV   A,R4  ;上一位為0則繼續(xù)檢查再上一位是否可借
                        ;位,不為0則跳轉(zhuǎn)把上一位減1,把最低位
                         ;置9
          JNZ   WRITE4
          MOV   A,R5   ;與上同理
          JNZ   WRITE3
          MOV   A,R6    ;與上同理
          JNZ   WRITE2
          AJMP  WRITE1
BITE2:    MOV   A,R6   ;檢查次高位是否已經(jīng)為0,為0則跳轉(zhuǎn)檢查下一位.
          JZ    BITE3
          MOV   A,R3   ;檢查最低位是否為0,不為0則跳轉(zhuǎn)進行
                         ;操作減1,為0則檢查上一位是否可以借位
          JNZ   WRITE5
          MOV   A,R4   ;上一位為0則繼續(xù)檢查再上一位是否可借
                      ;位,不為0則跳轉(zhuǎn)把上一位減1,把最低位置9
          JNZ   WRITE4
          MOV   A,R5
          JNZ   WRITE3
          AJMP  WRITE2
BITE3:    MOV   A,R5    ;檢查第三位是否已經(jīng)為0,為0則跳轉(zhuǎn)
                            ;檢查第四位.
          JZ    BITE4
          MOV   A,R3
          JNZ   WRITE5
          MOV   A,R4
          JNZ   WRITE4
          AJMP  WRITE3
BITE4:    MOV   A,R4     ;檢查第四位是否已經(jīng)為0,為0則跳轉(zhuǎn)
                             ;最后位減1.
          JZ    BITE5
          MOV   A,R3
          JNZ   WRITE5
          AJMP  WRITE4
BITE5:    MOV   A,R3     ;前四位都為0,只有最低位不為0,則
                             ;把最低位減1
          DEC   A
          MOV   R3,A
          JNZ   RETURN   ;最低位減1后是否也已為0,不為0則
                              ;中斷返回繼續(xù)
          SETB  P2.7     ;為0則定時時間已到,關(guān)閉定時器,并
                        ;把手動置入的數(shù)再次調(diào)出準備下一次定時
          CLR   24H.0
          CLR   TR0
          MOV   R7,37H              
          MOV   R6,36H
          MOV   R5,35H
          MOV   R4,34H
          MOV   R3,33H
          MOV   TH0,#FCH
          MOV   TL0,#17H
          AJMP  RETURN
WRITE5:   MOV   A,R3     ;最低位減1
          DEC   A
          MOV   R3,A
          AJMP  RETURN
WRITE4:   MOV   R3,#09H  ;次低位借1,最低位置9
          MOV   A,R4
          DEC   A
          MOV   R4,A
          AJMP  RETURN
WRITE3:   MOV   R3,#09H   ;第三位借1,低兩位都置9
          MOV   R4,#09H
          MOV   A,R5
          DEC   A
          MOV   R5,A
          AJMP  RETURN
WRITE2:   MOV   R3,#09H    ;次高位借1,后三位都置9
          MOV   R4,#09H
          MOV   R5,#09H
          MOV   A,R6
          DEC   A
          MOV   R6,A
          AJMP  RETURN
WRITE1:   MOV   R3,#09H    ;最高位借1,后四位都置9
          MOV   R4,#09H
          MOV   R5,#09H
          MOV   R6,#09H
          MOV   A,R7
          DEC   A
          MOV   R7,A
RETURN:   POP   PSW
          POP   ACC
          RETI
;===========================================
全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)