Activar un PIC desde el modo de suspensión utilizando Interruptor Timer1

0

Intenté activar un PIC (16F88) desde el modo de suspensión con Timer1 Interrupt con un cristal externo. Pero no funciona. Lo probé usando el reloj temporizador y funciona. Pero quiero usar Timer1 Interrupt. No se despierta. Mi código está aquí. Usé PIC 16F88, (también marcado 12F683) y 4MHz Crystal.

unsigned short cnt; void interrupt() { if (TMR1IF_bit) { T1CON.TMR1ON = 0; cnt++; TMR1H = 0x00; TMR1L = 0x00; T1CON.TMR1ON = 1; TMR1IF_bit = 0; // clear TMR0IF } }

void main() { ANSEL = 0; // Configure AN pins as digital TRISA = 0x00; PORTA = 0x00; TRISB = 0; PORTB = 0x00; cnt=0; T1CON = 0b10110101; // Timer1 settings, No Sync with internal oscillator TMR1IF_bit = 0; // clear TMR1IF T1CON.TMR1ON = 0; TMR1H = 0x00; // Initialize Timer1 values again TMR1L = 0x00; T1CON.TMR1ON = 1; TMR1IE_bit = 1; // enable Timer1 interrupt INTCON = 0xC0; // Set GIE, PEIE //OSCCON.IDLEN = 0; do { asm SLEEP asm nop //asm nop if (cnt>=1) { PORTB=~PORTB; cnt=0; } } while (1); }

Lo probé cambiando T1CON como 0b00110111. No funciona ¿Qué está mal en mis códigos? Por favor, ayúdame. Gracias.

    
pregunta PLAA Hemantha

1 respuesta

1

Bueno, la razón por la que no funciona es el valor que ha elegido en sus dos intentos para el registro T1CON.

T1CON = 0b10110101;
T1CON = 0b00110111;

ElproblemaesconelbitT1OSCEN,dondesiempreseestableceen'0'.ElT1OSCENlepermitehabilitarodeshabilitarelosciladorqueusaelTimer1cuandodeseaquefuncioneenuncristalexterno.

Sielosciladorestádesactivado,comoensucaso,elTimer1nopuedefuncionarenelcristalexterno.

VerifiquetambiéneldiagramadebloquesdeTimer1,dondeestaráclaro:

    
respondido por el nickagian

Lea otras preguntas en las etiquetas