Luego le damos a aceptar y nos generará el siguiente codigo. Recuerden el truco de los FUSES para que no tengan problemas al compilar en otros computadores.
-----------------------------------------------------------------------------------------
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=4000000)
#int_EXT
void EXT_isr(void)
{
//Aqui va el codigo cuando se genere una pulsacion en RB0
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
}
--------------------------------------------------------------------------------
En este ejemplo pondremos un pulsador en RB0 y al pulsarlo sumara +1 al conteo, cuando llegue a 5 cambiará de estado un led conectado en RA0.
Aqui ocuparemos la condicion if la cual es igual que en C.
if(condicion){
}else{
}
Y la instrucción output_toggle(pin_xy) para cambiar el estado de algun pin y del puerto x.
Con esto completamos nuestro codigo así.
-----------------------------------------------------------------------------------------
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=4000000)
int conteo=0; //se declara conteo como variable entera
#int_EXT
void EXT_isr(void)
{
conteo++; //sumamos +1 a la variable conteo
delay_ms(200); //tiempo para que el operador suelte el pulsador
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
while(true){
if(conteo==5){ //preguntamos si conteo es 5
output_toggle(pin_a0); //cambiamos de estado el pin a0 si conteo es 5
conteo=0; //reseteamos la cuenta
}
}
}
--------------------------------------------------------------------------------
La implementacion en Proteus quedará asi:
yo quisiera hacer un contador que cada 5 pulsacione cuete 1, como hago?
ResponderEliminar