91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

請指正程序錯誤

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

;==============================================
        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設定為工作方式1
        MOV   TH0,#FCH
        MOV   TL0,#17H    ;定時器初值為FC17H,即          
                              ;64535,當計數到65536時
                              ;時器產生溢出中斷,共計數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   ;連續兩次檢測有無按鍵輸入,
                            ;以消除按鍵抖動
        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則表示對應的時間
                               ;位加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則表示對應的時間
                                 ;位減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十進制數只用后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     ;確定已經手動置入了數則跳轉把定時數
                          ;據保存,否則返回繼續等待輸入定時數
        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       ;啟動計數器
        CLR   P2.7      ;點亮計數器指示燈
        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     ;定時器每經過1001*12/12M=1001微秒則
                          ;產生一次中斷,把手動置入的秒數減去
                          ;0.001秒
          PUSH  PSW                
          MOV   TH0,#FCH              
          MOV   TL0,#17H
          MOV   A,R7  ;檢查最高位是否已經為0,為0則跳轉檢查
                         ;次高位.
          JZ    BITE2
          MOV   A,R3  ;檢查最低位是否為0,不為0則跳轉進行操
                         ;作減1,為0則檢查上一位是否可以借位
          JNZ   WRITE5
          MOV   A,R4  ;上一位為0則繼續檢查再上一位是否可借
                        ;位,不為0則跳轉把上一位減1,把最低位
                         ;置9
          JNZ   WRITE4
          MOV   A,R5   ;與上同理
          JNZ   WRITE3
          MOV   A,R6    ;與上同理
          JNZ   WRITE2
          AJMP  WRITE1
BITE2:    MOV   A,R6   ;檢查次高位是否已經為0,為0則跳轉檢查下一位.
          JZ    BITE3
          MOV   A,R3   ;檢查最低位是否為0,不為0則跳轉進行
                         ;操作減1,為0則檢查上一位是否可以借位
          JNZ   WRITE5
          MOV   A,R4   ;上一位為0則繼續檢查再上一位是否可借
                      ;位,不為0則跳轉把上一位減1,把最低位置9
          JNZ   WRITE4
          MOV   A,R5
          JNZ   WRITE3
          AJMP  WRITE2
BITE3:    MOV   A,R5    ;檢查第三位是否已經為0,為0則跳轉
                            ;檢查第四位.
          JZ    BITE4
          MOV   A,R3
          JNZ   WRITE5
          MOV   A,R4
          JNZ   WRITE4
          AJMP  WRITE3
BITE4:    MOV   A,R4     ;檢查第四位是否已經為0,為0則跳轉
                             ;最后位減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則
                              ;中斷返回繼續
          SETB  P2.7     ;為0則定時時間已到,關閉定時器,并
                        ;把手動置入的數再次調出準備下一次定時
          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
;===========================================
全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法
主站蜘蛛池模板: 松原市| 旅游| 阿合奇县| 司法| 塔城市| 方城县| 宁乡县| 田阳县| 铁岭市| 九龙县| 贵溪市| 西宁市| 南木林县| 尚志市| 界首市| 榆中县| 营口市| 彭泽县| 团风县| 巨鹿县| 兴安盟| 依兰县| 铁岭县| 宜兴市| 巨鹿县| 乌兰察布市| 南漳县| 明光市| 从化市| 体育| 昭苏县| 乌鲁木齐市| 兴隆县| 合水县| 庄河市| 方城县| 紫云| 宝丰县| 丽水市| 龙岩市| 仁化县|