Dette er ett prosjekt for å programmere avbrudd(interrupt) ved endring på en inngang på en PIC12F629.

Mål

Målet er å programmere en PIC12F629 med en avbruddsrutine som lyser opp en lysdiode når en knapp trykkes. Lysdioden skal holdes oppe to sekunder.

Krets

avbrudd-ved-endring-pa-inngang

20161010_001232

Video

Kode

Koden finnes her.

    /**
     * Slå av komparatoren.
     */
    CMCONbits.CM0 = 1;
    CMCONbits.CM1 = 1;
    CMCONbits.CM2 = 1;
    /**
     * Setter GP0 som utgang.
     */
    TRISIObits.TRISIO0 = 0;
    /**
     * Setter bit 5 som inngang.
     */
    TRISIObits.TRISIO5 = 1;
    /**
     * Tillat avbrudd på GPIO endringer.
     */
    INTCONbits.GPIE = 1;
    /**
     * Slå på global avbrudd.
     */
    INTCONbits.GIE = 1;
    /**
     * Slå på avbrudd på GP5.
     */
    IOCBbits.IOC5 = 1;
    /**
     *  Sjekk om avbrudd ble gjort av endring på inngang.
     */
    if (INTCONbits.GPIF) {
        /**
         * Slå på lysdioden ved å sette GP0 høy.
         */
        GPIObits.GP0 = 1;
        /**
         * Vent to sekunder.
         */
        __delay_ms(2000);
        /**
         * Resett avbrudds registeret.
         */
        INTCONbits.GPIF = 0;
        /**
         * Slå av lysdioden ved å sette GP0 lav.
         */
        GPIObits.GP0 = 0;
    }

Andre lærdommer.

Siden GP5 ble brukt som inngang og jeg hadde satt FOSC til LP, noe som gjorde at den ble satt som oscillator inngang. Ved å sette den til INTRCCLK så ble GP5 tilgjengelig som inngang.

 

Sendt av Kjetil Fjellheim