Problema tmr0 PIC 16lf1783
Ciao a tutti!
Ho un problema con il tmr0 del PIC in oggetto (datasheet).
Il codice che sto utilizzando è questo:
Dovrebbe accendere e spegnere un led ogni 1ms... ma non funziona, non entra nella routine di interrupt
Nel ds non parla del fatto che il tmr0 debba essere accesso... quindi è sempre acceso? C'è qualcosa che mi sfugge?
Grazie per l'aiuto! 
Ho un problema con il tmr0 del PIC in oggetto (datasheet).
Il codice che sto utilizzando è questo:
- Codice: Seleziona tutto
#include <xc.h>
#pragma config FOSC = INTOSC
#pragma config LVP = OFF
#pragma config WDTE = OFF
unsigned char blink=1;
#define _XTAL_FREQ 8000000
#define LEDTX PORTAbits.RA0
void Interrupt(void);
void intmr0(void);
void Interrupt(void){
if(INTCONbits.TMR0IF){
INTCONbits.TMR0IF = 0;
TMR0 = 6;
PORTAbits.RA0 = blink;
blink = ~ blink;
INTCONbits.GIE = 1;
}
}
void intmr0(void){
OPTION_REG = 0x81;
TMR0 = 6;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 1;
}
void main(void) {
OSCCON = 0x72; //sel. clock - 8MHz
OPA1CON = 0xC0; //abil. opa1 con ni su RA5
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
INTCONbits.INTE = 0;
INTCONbits.INTF = 0; //reg INTCON
TRISAbits.TRISA0 = 0;
TRISAbits.TRISA1 = 0;
TRISAbits.TRISA5 = 1; //porta A
TRISCbits.TRISC3 = 0; //porta C
ADCON0bits.ADON = 0; //abil. ad
PIR1bits.ADIF = 0; //canc. flag
PIE1bits.ADIE = 0; //abil. interrupt on adc
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADCS1 = 0;
ADCON1bits.ADCS0 = 1; //sel. 1us TAD
ADCON0bits.CHS4 = 0;
ADCON0bits.CHS3 = 0;
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 1;
ADCON0bits.CHS0 = 1; //sel an3
intmr0();
LEDTX=0;
while(1){
PORTCbits.RC3 = 1;
__delay_ms(1);
PORTCbits.RC3 = 0;
__delay_ms(1);
}
}
Dovrebbe accendere e spegnere un led ogni 1ms... ma non funziona, non entra nella routine di interrupt
Nel ds non parla del fatto che il tmr0 debba essere accesso... quindi è sempre acceso? C'è qualcosa che mi sfugge?
