PIC10F200 oppvåkning ved pin endring

Dette er ett kjapt prosjekt for å teste oppvåkning av mikrokontrolleren ved pin endring.

Mål

Målet er å sette en LED høy ved sovemodus og når den våkner sette den til lav, vente 10 sekunder og sette den til høy igjen.

Krets

pic10f200-wakeup-on-pin-change

Video

 

Kode

Koden kan lastes ned her.

 

    /**
     * OPTION registeret. Bit 7 er satt lav for å våkne på pin endring.
     */
    OPTION = 0b01111111;
    /**
     * TRISGPIO registeret er satt med GP0 som utgang og GP1 som inngang.
     */
    TRISGPIO = 0b00001110;
    /**
     * Henter status registeret og sjekker bit 7 om den er høy. Hvis den er 
     * det så betyr det at restarten er gjort på grunn av pin endring.
     */
    unsigned char status = STATUS & 0b10000000;
    if (status) {
        /**
         * Sett GP0 til lav.
         */
        GPIO = GPIO & 0b11111110;
        __delay_ms(DELAY);
    }
    while (true) {
        /**
         * Sett GP0 til høy.
         */
        GPIO = GPIO | 0b00000001;
        /**
         * Dette er gjort på grunn av en anbefaling i dataarket som sier at 
         * testen er gjort på bakgrunn av siste lesing.
         */
        unsigned char readValue = GPIO;
        /**
         * Sov.
         */
        SLEEP();
    }