me funciona raro el 16f628a

hola a todos, ojala que alguien me pueda ayudar con este prob que me aqueja, he programado el 16f628a para que segun se active los pines A1 o A2 parpadee 4 les en orden un orden e inverso respectivamente, el roteus me simula bien, pero al armarlo, los leds se prenden y apagan en orden aleatorio y si llego a pulsar uno de los dos botones o no pasa nada o se queda congelado el led, aca les pongo el codigo en ccs avr si me pueden ayudar, desde ya muchas gracias

#include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000)


#DEFINE DERECHA FALSE
#DEFINE IZQUIER TRUE
#DEFINE DER PIN_A0
#DEFINE IZQ PIN_A1
#DEFINE RES PIN_A2

//#use fast_io (A)
//#use fast_io (B)

INT8 POS=7;
INT1 DIR;

VOID MOT(INT8 VAL)
{
OUTPUT_HIGH(RES);
OUTPUT_B(VAL);
delay_MS(100);
OUTPUT_LOW(RES);
}

VOID CAD(INT8 &POS,INT1 DIR)
{
IF (DIR)
{POS=POS-1;}
ELSE
{POS=POS+1;}

IF ((POS>7)&&(POS<10)){POS=0;}
IF (POS>10){POS=7;}

SWITCH(POS)
{
CASE 0:MOT(1);break;
CASE 1:MOT(3);break;
CASE 2:MOT(2);break;
CASE 3:MOT(6);break;
CASE 4:MOT(4);break;
CASE 5:MOT(12);break;
CASE 6:MOT(8);break;
CASE 7:MOT(9);break;
}
}

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);
//disable_interrupts(GLOBAL);
//*************************************
SET_TRIS_A(0X03);
SET_TRIS_B(0X00);
OUTPUT_A(0x00);
OUTPUT_B(0x00);

while (true)
{

//DELAY_MS(100);
//OUTPUT_HIGH(PIN_B0);
//DELAY_MS(100);
//OUTPUT_LOW(PIN_B0);

IF (input(DER)==TRUE)
{
DIR=DERECHA;
CAD(POS,DIR);
}
IF (input(IZQ)==TRUE)
{
DIR=IZQUIER;
CAD(POS,DIR);
}

}
//*************************************
}
 
hola a todos, ojala que alguien me pueda ayudar con este prob que me aqueja, he programado el 16f628a para que segun se active los pines A1 o A2 parpadee 4 les en orden un orden e inverso respectivamente, el roteus me simula bien, pero al armarlo, los leds se prenden y apagan en orden aleatorio y si llego a pulsar uno de los dos botones o no pasa nada o se queda congelado el led, aca les pongo el codigo en ccs avr si me pueden ayudar, desde ya muchas gracias

#include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000)


#DEFINE DERECHA FALSE
#DEFINE IZQUIER TRUE
#DEFINE DER PIN_A0
#DEFINE IZQ PIN_A1
#DEFINE RES PIN_A2

//#use fast_io (A)
//#use fast_io (B)

INT8 POS=7;
INT1 DIR;

VOID MOT(INT8 VAL)
{
OUTPUT_HIGH(RES);
OUTPUT_B(VAL);
delay_MS(100);
OUTPUT_LOW(RES);
}

VOID CAD(INT8 &POS,INT1 DIR)
{
IF (DIR)
{POS=POS-1;}
ELSE
{POS=POS+1;}

IF ((POS>7)&&(POS<10)){POS=0;}
IF (POS>10){POS=7;}

SWITCH(POS)
{
CASE 0:MOT(1);break;
CASE 1:MOT(3);break;
CASE 2:MOT(2);break;
CASE 3:MOT(6);break;
CASE 4:MOT(4);break;
CASE 5:MOT(12);break;
CASE 6:MOT(8);break;
CASE 7:MOT(9);break;
}
}

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);
//disable_interrupts(GLOBAL);
//*************************************
SET_TRIS_A(0X03);
SET_TRIS_B(0X00);
OUTPUT_A(0x00);
OUTPUT_B(0x00);

while (true)
{

//DELAY_MS(100);
//OUTPUT_HIGH(PIN_B0);
//DELAY_MS(100);
//OUTPUT_LOW(PIN_B0);

IF (input(DER)==TRUE)
{
DIR=DERECHA;
CAD(POS,DIR);
}
IF (input(IZQ)==TRUE)
{
DIR=IZQUIER;
CAD(POS,DIR);
}

}
//*************************************
}


a mi me ha pasado eso cuando no he polarizado los pines no utilizados es, decir , debes colocar resistencias de 10k hacia tierra en todos esos pines que no utilices.
 
Atrás
Arriba