Problema con Pic 16F877A

Buenas companeros este tengo una duda con este pic 16F877 espero puedan ayudarme la pregunta es esta hize un programa en el MPlap muy senillo de loscuales estoy practicando, pero lo extrano es que cuando uso los puertos RA0,RA2,RA3 como entrada no funciona y si
utilizo cualquiera de los demas puertos del puertoA todo trabaja como deberia ser RA1, RA4, RA5, me trabajan bien pero los demas no.

Esto en modo simulacion por lo q no creo q sea problema del pic el data sheet de este pic dice que todos los puertos de A se pueden usar como entradas digitales o analogicas esepto el RA 4 no mas como digital ya sean entradas o salidas.

el proyectito trata de solamente con un boton en cender 7 led de RB0 a RB7 y dejar el RB7 encendido y al pulsarotro boton este empieze de RB7 a RB0 y asi pero si coloco un pulsador en cualquiera de estos RA0,RA2,RA3 puerto no trabaja no mas cambio a los otros y todo anda bien. el proyecto trabaja pero quisiera saber si alguien tiene o a tenido esta clase de problema.



Estara el problema en el programa?...
 
Un problema en la simulacion no es, pero lo que si puede ser es que en el programa no allas usado trisa o
trisb para declarar que datos entran y que datos salen!
 
OK MIRA POSTEO EL PROGRAMA Y VEAN LO QUE HE HECHO ESO SI LO E DECLARADO.

#include <htc.h>
#define _XTAL_FREQ 4000000
unsigned char x;
void main ()
{
ADCON1= 0x0F;//Todos entrada/salida digitales.-
TRISB = 0X00;
TRISA = 0XFF;
PORTB = 0X00;
loop:
if (RA1==1)
goto first;
else if (RA5==1)
goto second;
goto loop;
first:
PORTB = 0b00000001;
__delay_us(50000);//Demora 300ms
PORTB = 0b00000010;
__delay_us(50000);//Demora 300ms
PORTB = 0b00000100;
__delay_us(50000);//Demora 300ms
PORTB = 0b00001000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00010000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00100000;
__delay_us(50000);//Demora 300ms
PORTB = 0b01000000;
__delay_us(50000);//Demora 300ms
PORTB = 0b10000000;
goto loop;
second:
PORTB = 0b01000000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00100000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00010000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00001000;
__delay_us(50000);//Demora 300ms
PORTB = 0b00000100;
__delay_us(50000);//Demora 300ms
PORTB = 0b00000010;
__delay_us(50000);//Demora 300ms
PORTB = 0b00000001;
__delay_us(50000);//Demora 300ms
goto loop;
}*/
 
Saludos. jann
Esa no es la configuración adecuada del registro ADCON1 para que trabajen en modo digital todos los pines.
Cambia...
ADCON1= 0x0F;//Todos entrada/salida digitales.-
Por esto...
ADCON1= 0x06;// (Puertos A y E digitales)

Más información la podrás encontrar en la hoja de datos. :estudiando:

Suerte.
 
Ok no me queda nada mas que agradecerte a un que no me gusto eso de la hoja de datos para mas informacion creo que la e estado viendo pero no lo suficiente verdad, jajaj y pues si con eso fue suficiente GRACIAS.


y pues a inbvestigar un poco mas e las hojas de datos.

lo que no entiendo es que segun yo al poner eso de adcon1 = 0x0fes decir que todos lo pines son declarados como I/O digitales que no y eso de 0x06 en exadecimal el 6 solamente que no?
 
Ok no me queda nada mas que agradecerte a un que no me gusto eso de la hoja de datos para mas informacion creo que la e estado viendo pero no lo suficiente verdad, jajaj y pues si con eso fue suficiente GRACIAS.
Pues de nada, jann.
Siempre hay cosas que pasan desapercibidas y son las causantes de muchas fallas en los programas.
Solo es cuestión de poner más atención al mirar la hoja de datos. :cool:
lo que no entiendo es que segun yo al poner eso de adcon1 = 0x0fes decir que todos lo pines son declarados como I/O digitales que no y eso de 0x06 en exadecimal el 6 solamente que no?
Si, también se puede poner solo un 6
Mira bien la hoja de datos en la página 128 y veras estos datos de configuración A/D
AD Port Configuration Control Bits.jpg
Si miras la primera enmarcación veras que puede ser 0x06 ó 0x07 (Todos los pines digitales)
Ahora mira tu selección 0x0F y podrás saber en donde estaba el error. :eek:hno:

Suerte jann. Hasta pronto. :apreton:
 
Atrás
Arriba