• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 16F870單片機的中斷應用程序

    16F870單片機的中斷應用程序

    作者: 時間:2011-02-24 來源:網絡 收藏
    ; Filename: WK_PCHG.asm *
    ; Date: Mar/13/2001 *

    ;**********************************************************************
    list p=16f870
    #include p16f870.inc>

    ; __CONFIG _CP_OFF _WDT_ON _BODEN_ON _PWRTE_ON _RC_OSC _WRT_ENABLE_ON _LVP_OFF _CPD_OFF


    FLAG EQU 0x20
    Var1 EQU 0x21
    Var2 EQU 0x22

    INT_Var1 EQU 0x30
    INT_Var2 EQU 0x31

    W_Temp EQU 0x72
    STATUS_Temp EQU 0x73
    FSR_Temp EQU 0x74

    #define VAL_1MS .248

    #define FLAG_INC 0
    #define FLAG_DEC 1


    org 0x00 ; RESET  0x000
    nop
    clrf PCLATH
    goto Main

    org 0x004
    INT_ISRs
    ;***************************************************************
    movwf W_Temp ; save off current W register contents
    movf STATUS,W ; move status register into W register
    bcf STATUS,RP0 ; ensure file register bank set to 0
    movwf STATUS_Temp ; save off contents of STATUS register
    movf FSR,W
    movwf FSR_Temp

    BANKSEL PORTB
    movf PORTB,W
    bcf INTCON,RBIF
    bcf INTCON,RBIE ; RBIE Disable

    call Bounce_Delay

    btfsc PORTB,4
    goto Check_DEC_KEY

    bsf FLAG,FLAG_INC ; FLAG_INC  1
    goto Exit_ISRs

    Check_DEC_KEY
    btfss PORTB,5
    bsf FLAG,FLAG_DEC

    Exit_ISRs
    movf FSR_Temp,W
    movwf FSR
    bcf STATUS,RP0 ; ensure file register bank set to 0
    movf STATUS_Temp,w ; retrieve copy of STATUS register
    movwf STATUS ; restore pre-isr STATUS register contents
    swapf W_Temp,F
    swapf W_Temp,W ; restore pre-isr W register contents
    retfie ; return from interrupt

    ;******************************************************************************
    ;**** Delay 10 ms 
    ;******************************************************************************
    Bounce_Delay
    movlw .10
    movwf INT_Var1

    Bounce_Loop1
    movlw .248
    movwf INT_Var2
    Bounce_Loop2
    nop
    decfsz INT_Var2,F
    goto Bounce_Loop2
    decfsz INT_Var1,F
    goto Bounce_Loop1
    return

    ******************************************
    Main

    BANKSEL TRISB
    movlw B'11110000'
    movwf TRISB ; RB4..RB7
    clrf TRISC
    movlw B'00000000' ; Enable PORTB  Pull UP
    movwf OPTION_REG

    BANKSEL PORTB
    movlw B'11111111'
    movwf PORTB
    clrf PORTC

    bsf INTCON,GIE
    clrf FLAG
    bsf FLAG,FLAG_INC

    Prog_Loop
    btfss FLAG,FLAG_INC
    goto Dec_Process

    Inc_Process
    call Delay_50ms
    incfsz PORTC,F
    goto Inc_Process
    goto SLEEP_Process

    Dec_Process
    call Delay_50ms
    decfsz PORTC,F
    goto Dec_Process

    SLEEP_Process
    clrf PORTC
    clrf FLAG
    movf PORTB,W
    bcf INTCON,RBIF
    bsf INTCON,RBIE
    SLEEP
    nop
    nop
    goto Prog_Loop


    ;****************************************************************************
    ;**** Delay 50ms 
    ;****************************************************************************
    Delay_50ms
    movlw .50
    movwf Var2
    Delay_200ms_Loop
    call Delay_1ms
    decfsz Var2,F
    goto Delay_200ms_Loop
    return

    ;****************************************************************************
    ;**** Delay 1ms 
    ;****************************************************************************
    Delay_1ms
    nop
    nop
    nop
    movlw VAL_1MS
    movwf Var1
    Delay_1ms_Loop nop
    decfsz Var1,F
    goto Delay_1ms_Loop
    return


    END




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 通海县| 会昌县| 兴海县| 盘锦市| 法库县| 镇坪县| 榆社县| 万宁市| 咸阳市| 壤塘县| 桦甸市| 肥东县| 尉犁县| 措美县| 馆陶县| 措美县| 新竹市| 潍坊市| 丽江市| 大理市| 德安县| 东台市| 从化市| 永州市| 昔阳县| 东辽县| 五台县| 昌宁县| 丹巴县| 葫芦岛市| 前郭尔| 旺苍县| 双鸭山市| 仁化县| 新乐市| 尉氏县| 龙州县| 剑河县| 钟山县| 宜都市| 衡东县|