
Iniciado por
14matias13
Si el código anda perfectamente en el PROTEUS. Me estube fijando que usando la funcion 'while(input(pin_X))' funciona aparentemente, le grabe este programa:
Código:
#include "16F877A.h"
#use delay (clock = 4M)
void main (void)
{
set_tris_a(000000);
set_tris_b(11111111);
while(true)
{
principio:
while(input(pin_B4)) // si existe un '1' en el pin B4 prendo el LED
{
delay_ms(500);
output_high(pin_A0);
}
while(input(pin_B5)) // si existe un '1' en el pin B5 apago el LED
{
delay_ms(500);
output_low(pin_A0);
}
goto principio;
}
} El problema persiste si en lugar de prender o apagar un LED dependiendo del pulsador, quiero hacer un parpadeo con el LED..
Tienes idea de como se puede hacer con interrupciones? Te agradecería mucho.
Gracias compañero.
Hola 14matias13
te comento que he visto varios errores(según mi criterio) en tu código que proporcionas
así que en mi humilde opinión te proporciono 3 códigos que te podrían funcionar, 2 son como yo lo haría
y el ultimo es como tu lo estas haciendo
Código:
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,MCLR
#use delay (clock = 4M)
void main (void){
set_tris_a(0X00);
set_tris_b(0XFF);
while(true){
if ((input(pin_B4))==1){
output_high(pin_A0);
}else if {((input(pin_B4))==0){
output_low(pin_A0);
}
delay_ms(500);
}
} Código:
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,MCLR
#use delay (clock = 4M)
void main (void){
set_tris_a(0X00);
set_tris_b(0XFF);
while(true){
if ((input(pin_B4))==1){
output_high(pin_A0);
}else if {((input(pin_B5))==1){
output_low(pin_A0);
}
delay_ms(500);
}
}
Código:
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,MCLR
#use delay (clock = 4M)
void main (void){
set_tris_a(0X00);
set_tris_b(0XFF);
while(true){
while(input(pin_B4)==1){
delay_ms(500);
output_high(pin_A0);
}
while(input(pin_B5)==1){
delay_ms(500);
output_low(pin_A0);
}
}
} ahora preguntas que con interrupciones, que yo sepa el 877 solo tiene 1 interrupción
externa no sé si necesites más de una interrupción.
Saludos!!