• <table id="vrevu"></table>

  • <table id="vrevu"><ruby id="vrevu"></ruby></table>
      <table id="vrevu"><option id="vrevu"></option></table>
      <track id="vrevu"><s id="vrevu"></s></track>
      <pre id="vrevu"><label id="vrevu"></label></pre>
    1. 專注電子技術學習與研究
      當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

      pic單片機采用定時器中斷的閃燈實驗報告

      作者:未知   來源:互聯網   點擊數:  更新時間:2014年08月15日   【字體:

      上接:http://www.minhschavespixxltau48h.com/mcu/3983.html

      1.  實驗目的

      學習如何使用中斷

      2.  任務要求

      用定時器中斷方式完成閃燈實驗

      設計驗證外部邊沿中斷/電平變化中斷

      睡眠喚醒

      3.  實驗器材

      單片機PIC16F886一片、LED燈一只、電阻任選、下載器(及相關的線)一個

      4.  實驗方案

      圖 1 硬件設計圖

       

       

       

       

      圖 2 定時器中斷軟件流程圖

       


      圖 3電平變化中斷流程圖

       

      圖 4 睡眠喚醒流程圖

      5.  實驗現象分析

      基礎實驗部分

      仿真模擬,在反轉PORTA代碼部分加上斷點,用STOP WATCH 觀察兩次運行至斷點所需的時間,

       

      。

      然后下載至芯片,LED燈閃動正常。

      電平變化中斷實驗:

      使用PORTBRB5作為輸入端口,RB5電平變化時,RA端口上的燈閃爍4次,從頭到尾RC端上的燈只有亮一種狀態。

      睡眠喚醒實驗:觸發一次喚醒,RA端燈亮滅四次,RC3改變一次狀態。

      做電平變化中斷和睡眠喚醒實驗時遇到兩個問題:1.電平變化中斷標志位清零前沒有對PORTB執行讀寫操作,導致清除無效;1,DELAY函數寫在中斷內部,總是提前RETURN破壞了現場且多執行了DELAY操作。

       

       

      附:

      定時器中斷代碼:

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0X04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保存現場

      BANKSEL INTCON

      BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位

      BANKSEL PORTA

      COMF PORTA,1 ;;;;;;;;;;;;;;PORTA翻轉

      BANKSEL TMR0

      MOVLW B'00001111' ;;;;;;;;;;;;;;TMR0預置數

      MOVWF TMR0

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢復現場

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

      MAIN

      MOVLW B'00001111'

      MOVWF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;TMR0預置數

      BANKSEL OPTION_REG

      MOVLW B'000011'

      MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為16分頻

       

      BANKSEL INTCON

      BSF INTCON,GIE

      BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能

      ;;;;;;;;;

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為310KHz,內部振蕩器

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA;

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA ;;;;;;;;;;;;;;;;;;;;;設置PORTA為輸出

      LP

      NOP

      GOTO LP

      END

       

      外部中斷代碼

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

      LP0 RES 1

      LP1 RES 1

      TIMES RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0x04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保護現場

      BANKSEL PORTB

      BSF PORTB,4

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB,清除中斷標志位

      MOVLW D'4'

      MOVWF TIMES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置亮燈次數為4

      MM COMF PORTA,F

      CALL DELAY

      COMF PORTA,F

      CALL DELAY

      DECFSZ TIMES,F

      GOTO MM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;閃爍4

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢復現場

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

       

      DELAY 

      MOVLW 01FH

      MOVWF LP0

      L0 MOVLW 01FH

      MOVWF LP1

      L1 DECFSZ LP1,F

      GOTO L1

      DECFSZ LP0,F

      GOTO L0

      RETURN

       

      MAIN

       

      BANKSEL TRISC

      MOVLW B'11110111'

      MOVWF TRISC

      BANKSEL PORTC

      MOVLW B'00001000'

      XORWF PORTC,F;;;;;;;;;;;;;;;;;;;;;;

      ;;;;;;;;;;;;;;;;;;;;;;設置RC3標志程序執行,用于判斷程序是否被重復執行

       

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;清除中斷標志位

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置振蕩器頻率31KHz

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA;BANK1

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置PORTA為輸出

       

      BANKSEL INTCON

      MOVLW B'11011000'

      MOVWF INTCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;使能電平變化中斷

       

      BANKSEL OPTION_REG

      MOVLW B'01010000'

      MOVWF OPTION_REG;;;;;;;;;;;;;;;;;;;;;;;;;;;使能PORTB上拉

       

      BANKSEL PORTB

      CLRF PORTB

      BANKSEL TRISB

      MOVLW B'00100000'

      MOVWF TRISB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置RB5為輸入

      BANKSEL ANSELH

      CLRF ANSELH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置模擬輸入模式為0

      BANKSEL IOCB

      MOVLW B'00100000'

      MOVWF IOCB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;允許PORTB5電平變化使能

       

      LOOP

      GOTO LOOP

       

      END

      睡眠喚醒代碼:

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

      LP0 RES 1

      LP1 RES 1

      TIMES RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0x04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保護現場

      BANKSEL PORTB

      BSF PORTB,4

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;PORTB并清除中斷標志位

      MOVLW D'4'

      MOVWF TIMES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置亮燈次數4

      MM COMF PORTA,F

      CALL DELAY

      COMF PORTA,F

      CALL DELAY

      DECFSZ TIMES,F

      GOTO MM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;燈閃爍四次

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢復現場

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

       

      DELAY 

      MOVLW 01FH

      MOVWF LP0

      L0 MOVLW 01FH

      MOVWF LP1

      L1 DECFSZ LP1,F

      GOTO L1

      DECFSZ LP0,F

      GOTO L0

      RETURN

       

      MAIN

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清除中斷標志位

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置振蕩器31KHz

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置PORTA輸出

       

      BANKSEL INTCON

      MOVLW B'11011000'

      MOVWF INTCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;使能總中斷使能和電平變化中斷使能

       

      BANKSEL OPTION_REG

      MOVLW B'01010000'

      MOVWF OPTION_REG;;;;;;;;;;;;;;;;;;;;;;;;

       

      BANKSEL PORTB

      CLRF PORTB

      BANKSEL TRISB

      MOVLW B'00100000'

      MOVWF TRISB

      BANKSEL ANSELH

      CLRF ANSELH

      BANKSEL IOCB

      MOVLW B'00100000'

      MOVWF IOCB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置PORTB5電平變化中斷使能

       

      BANKSEL PORTC

      MOVLW B'11110111'

      BANKSEL TRISC

      CLRF TRISC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;設置PORTC3為輸出

       

      loop 

      BANKSEL PORTC

      MOVLW B'00001000'

      XORWF PORTC,F

      CALL DELAY;;;;;;;;;;;;;;;;;;;;;;RC3改變一次狀態,執行一次SLEEP,顯示是否進入休眠

       

      SLEEP

      NOP

      GOTO loop

       

      END

       

      下一篇:  pic單片機走馬燈動態顯示實驗報告 http://www.minhschavespixxltau48h.com/mcu/4080.html

      關閉窗口
      一本久久伊人东京热加勒比,国产精品99久久99久久久,四虎影视永久在线精品,久久只有这里才是精品2020
    2. <table id="vrevu"></table>

    3. <table id="vrevu"><ruby id="vrevu"></ruby></table>
        <table id="vrevu"><option id="vrevu"></option></table>
        <track id="vrevu"><s id="vrevu"></s></track>
        <pre id="vrevu"><label id="vrevu"></label></pre>