TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Mauricio Padilla en 15 de Abril de 2021, 13:59:05
-
HOLA, BUENAS TARDES.
ESTOY COMENZANDO EN ESTE MUNDO DE PROGRAMCION DE MICROCONTROLADORES.
MI OBJETIVO ES: PRENDER UN LED DESPUES DE HABER DEJADO PRESIONADO 5 SEGUNDOS UN PULSADOR. NO LOGRO HACERLO, YA QUE TRATO DE USAR TIMER1.
EN ESTE CODIGO SOLAMENTE PUDE ENCENDER EL LED PRESIONANDO 5 VECES EL PULSADOR.
AYUDAAAA!!!
#include <18F4550.h> //Incluimos la librería 18F4550
#device ADC=10 //Conversor Analógico digital a 10 bits.
#fuses HS, NOWRT, NOWDT,NOPROTECT, NOPUT, NOLVP //Configuración de fusibles.
#use delay(crystal=4MHz) //Frecuencia de oscilador 4MHz. Para el 18F4550 Cristal externo escribir "crystal"
#use fast_io(d) //Define el Puerto D para respuesta rápida.
#INT_Timer1 //Habilitamos la función de interrupción por desbordamiento de timer1
void Desbordamiento_TIMER1() //Función de interrupción por desbordamiento de timer1
{
IF(INPUT(PIN_c0)==1){ //Si el boton está presionado
output_toggle(pin_d1);
output_toggle(pin_d2);
output_toggle(pin_d3);
output_toggle(pin_d4);
output_toggle(pin_d5);
output_toggle(pin_d6);
set_timer1(65531); //Cargamos a TMR1 con 65531 para que despues de 5 pulsos llegue a 65536 y se desborde el timer1.
}
}
void main (void) //Función Principal.
{
If(input(pin_c0)==1)
setup_adc_ports(NO_ANALOGS, VSS_VDD); //No se utilizará Entradas Analógicas.
set_tris_b(0x00); //Configuramos el puerto B como salida.
set_tris_d(0x00); //Configuramos el puerto D como salida.
output_d(0x00); //Configuramos los pines del puerto D a nivel bajo.
output_b(0x00); //Configuramos los pines del puerto B a nivel bajo.
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); //Timer1 como contador | Pre escaler a 1.
set_timer1(65531); //Cargamos a TIMR1 con 65531 para que despues de 5 pulsos llegue a 65536 y se desborde el timer1.
enable_interrupts(INT_Timer1); //Habilitamos la interrupción por desbordamiento de timer1.
enable_interrupts(GLOBAL); //Habilitamos las interrupciones Globales.
while(true) //Bucle infinito.
{
output_low(PIN_D0); //Ponemos a nivel bajo el pin RD0.
delay_ms(500); //Retardo de 500 ms.
output_high(PIN_D0); //Ponemos a nivel alto el pin RD0.
delay_ms(500); //Retardo de 500 ms.
}
}
-
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); //Timer1 como contador | Pre escaler a 1.
set_timer1(65531); //Cargamos a TIMR1 con 65531 para que despues de 5 pulsos llegue a 65536 y se desborde el timer1.
Con eso va a desbordar a los 5us.