Sida 1 av 1

Får inte Timer 1 med 16F877A att fungera. [C]

Postat: 18 februari 2005, 21:30:38
av Andi04
Hej.

Försökte göra en litet program så får LEDar att blinka på PORTB var sekund. Jag använder mig av Timer 1 samt CCP1. Koden är skriven i C och jag använde microC compilatorn från mikroElektronika då jag använder deras picEasy 2 test platta. Jag har kollat så att jag har satt PORTB till output och satt nödvändiga flagor till 1. Men jag får det fortfarande inte till att funger. Skulle någon kolla i koden och se om ni hittar något fel för jag hittar inget.

Använder PIC16F877A med en 8MHz klocka.

//Andi

Här är koden jag använder:

Kod: Markera allt

char num_10ths  = 0x00;
char new_second = 0x00;

void interrupt(){
    char CARRY;

    num_10ths++;

    if( !(num_10ths ^ 0x64) ){
        num_10ths   = 0x00;
        new_second  = 0xFF;
    }

    CCPR1L  += 0x20;            // Change to 0x50 if 20MHz OSC

    CARRY    = ( STATUS & 0x01 );

    if( CARRY ) CCPR1H++;

    CCPR1H  += 0x4E;            // Change to 0xC3 if 20MHz OSC

    // Next Interrupt will happen in 10ms with 8MHz OSC

    PIR1    &= 0xFB;             // Reset CCP1IF

}

void init_PCB(){
    TRISA    = 0x00;            // Port A output
    TRISB    = 0x00;            // Port B output
    PORTA    = 0x00;            // Port A reset
    PORTB    = 0x00;            // Port B reset
}

void init_Timer1(){
    T1CON    = 0x01;            // Timer 1 Enabled
}

void init_CCP1(){
    CCP1CON  = 0x0A;            // CCP1 in compare mode
    PIE1    |= 0x05;            // CCP1IE, TMR1IE Enabled
    INTCON  |= 0xC0;            // PEIE, GIE Enabled
}

void main(){
    init_PCB();
    init_Timer1();
    init_CCP1();
    
    while( 1 ){
        if( new_second == 0xFF ){
            new_second  = 0x00;
            PORTB      ^= 0xFF;
            PORTA       = 0x01;
        }
    }
    
}