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;
}
}
}