SOGO論壇

標題: 8051計時中斷(組語) [列印本頁]

作者: 奇幻人    時間: 2011-5-22 22:06:47     標題: 8051計時中斷(組語)

請問為甚麼要設兩次的計數值和計時啟動,還有RETI是返回主程式的哪一行,可以順便幫我解釋計時中斷整的的動作流程嗎 ,謝謝
  ORG    0000H
AJMP   MAIN
ORG    000BH
AJMP   TIMER0


MAIN: MOV  TMOD,#00000001B
         MOV  TH0,#01100011B
         MOV  TL0,#11000000B
         MOV  IE,#10000010B
         MOV  A,#0
         MOV  P2,#11111111B
         MOV  R0,#25
         SETB  TCON.4
LOOP: AJMP LOOP   

TIMER0: MOV TH0,#01100011B
            MOV TL0,#11000000B
            SETB TCON.4
            DJNZ  R0,CONT
            INC A
            CPL A
            MOV P2,A
            CPL A
            MOV  R0,#25
CONT:  RETI
作者: begti20    時間: 2011-5-28 04:46:13

51啟動時直接跳到main
main:做timer0計時中斷的設定        
        mov     tmod,#00000001b;set timer0 mode1
                               ; timer0 gate=0
                               ;        C/T=0 : is timer
                               ;        m1,m0=01 : mode 1
        mov     ie,#10000010b  ;set interrupt enable
        setb    tr0            ;set timer0 enable
        mov     tl0,#01100011B ;設定timer0在40000us後產生中斷
        mov     th0,#11000000B
啟動timer0於40ms後會跳到timer0中斷程式執行
之後就進入LOOP: AJMP LOOP的無窮迴路.
當timer0中斷產生時,會到timer0執行,遇到reti再回到這LOOP: AJMP LOOP  

timer0:中斷副程式
重設timer0在40000us後產生中斷
TIMER0: MOV TH0,#01100011B
            MOV TL0,#11000000B
            SETB TCON.4


DJNZ  R0,CONT,r0計數25次(25*40ms)後執行
            INC A
            CPL A
            MOV P2,A
            CPL A
            MOV  R0,#25

CONT:  RETI 中斷副程式返回

整個程式的動作是每隔1Sec(25*40ms),p2的輸出值加一(低態動作)


《 本帖最後由 begti20 於 2011-5-28 04:56 編輯 》




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM