新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 16F870單片機的中斷應(yīng)用程序

        16F870單片機的中斷應(yīng)用程序

        作者: 時間:2011-02-24 來源:網(wǎng)絡(luò) 收藏
        ; 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




        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 灌云县| 稻城县| 双柏县| 灵山县| 磐安县| 吐鲁番市| 靖远县| 靖安县| 迭部县| 右玉县| 利辛县| 东平县| 怀集县| 澄迈县| 仁寿县| 兴宁市| 巴中市| 青州市| 滨州市| 邵东县| 常山县| 仙居县| 娱乐| 象州县| 漳平市| 邯郸市| 社旗县| 杭州市| 买车| 民权县| 安塞县| 肥城市| 拉萨市| 大石桥市| 威远县| 南和县| 长汀县| 桐柏县| 中山市| 织金县| 施甸县|