TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: frank150 en 28 de Enero de 2020, 14:38:19
-
hola que tal, un saludo para todos los del foro, soy nuevo aqui y estoy comenzando a familiarizarme con los pic, la cuestion principal es que estoy haciendo un codigo para que el pic16lf18313, para que se duerma despues de un tiempo de inactividad (3 segundos), para poder salir del modo sleep usare una interrupcion on change, este va resetear un contadorque hará que el pic permanezca activo, mientras el pic este activo, se encendera un led, cuando entre a modo sleep, este led se apagará, ya declare todo pero sigue sin funcionar.....
les agradecería su ayuda
saludos...
les dejo el codigo..
#include<16LF18313.h>
//Configuracion de fuses
#fuses NOMCLR //Master Clear pin used for I/O
#fuses NOPUT //No Power Up Timer
#fuses NOWDT //No Watch Dog Timer
#fuses NOBROWNOUT //No brownout reset
#fuses NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#fuses NOPROTECT //Code not protected from reading
#use delay(internal=31KHz)
//pines e interrupciones
#define LED PIN_A0 //led conectado en el pin A0
//variables
int8 contador = 0;
int8 tfs = 3; //tiempo para irse a dormir (segundos)
//funcion principal
void main (){
set_tris_a(0b010000);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32|RTCC_8_BIT); //1.0 s overflow
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_IOC);
enable_interrupts(GLOBAL);
output_high(led);
//funcion loop
while(true){
if(contador >= tfs){
output_low(led);
//sleep();
}
if(contador < tfs){
output_high(led);
}
}
}
#INT_TIMER0
void TIMER0_isr(void) {
contador += 1;
}
#INT_IOC
void IOC_isr(void) {
//SI SE DETECTA UNA INTERRUPCION RESETEA EL CONTADOR Y DESPIERTA
if (interrupt_active(INT_IOC_A4)) {
contador = 0;
clear_interrupt(INT_IOC_A4);
}
}