Problema con MOVF del puerto A a W.

Hola chicos, estoy programando una interfaz para una pesa electrónica, mediante puerto serial con un PIC16F870. A pesar de que tengo ya casi todo listo, simplemente no me funciona encender dos leds simultáneamente. Particularmente, necesito mover el contenido del puerto A a W con MOVF, pero el valor que se mueve es erróneo lo que hace que no me funcione. Aquí les dejo la imagen de antes de la instrucción y después.

ANTES DEL MOVF, fijense en los valores de PORT A, Y W.


DESPUÉS DEL MOVF, como se ve, el valor de PORT A no ha pasado como tal a W.


¿En qué podría estar fallando? Les agradezco de antemano.
 
Última edición:
La respuesta es sencilla, el pin A0 y A2 estan configurados como salidas, por lo que esos valores no son leidos, solo lee los pines que son entrada. Por eso antes del MOVF tenes en PORTA = 0b00010001 con el TRISA = 00111010 y luego del MOVF en W a parece solo lo que lee del pin A5,A4,A3 y A1 con lo cual resulta en W = 00010000
 
Gracias por responder. Intentando, lo solucioné de alguna forma. De hecho, las salidas [A0-A2] están configuradas como salidas, pero aunque cambiase particularmente el bit del puerto A con BSF, me seguía cambiando los valores. Pero lo pude solucionar inicializando el puerto A como entradas digitales. No sé realmente qué tiene que ver eso con mi problema, pero ya no sufre ese cambio de valor repentino.

Si hay más sugerencias, bienvenidas son!
 
Pues segun se ve en la primer imagen, el registro TRISA que es quien da la informacion de que pines son entradas y que pines son salidas y me dice que en ese momento el pin A0 y A2 son salidas, y el pin A1 es entrada junto con A3,A4 y A5. Me alegro que solucionaras tu problema

 
Sí, ahora que me fijo tienes razón y eso es muy extraño, porque los 3 bits más bajos los tengo configurados como salidas y no los cambio en ninguna parte más. Parece que si no configuro el puerto A con entradas y salidas digitales, se vuelve algo impredecible controlar las salidas. No sé si será un bug. Como sea, muchas gracias por responder!
 
En assembler, compilado con MPASM en Proteus 8.2. Probé de nuevo sin inicializar como digital y ocurre el error, pero sin eso, todo anda bien. Algo anda mal ahí...
 
Si vas a leer señales digitales, es necesario que los pines con ADC sean configurados como digitales.
De otra forma obtendrás lecturas erróneas.
Por otra parte, un MOVF, moverá todo el contenido del puerto, o sea, los 8 bits, no importando que unos sean entradas y otros salidas.
Es decir, no tomará en cuenta si son entradas o salidas, sino que tomará el valor completo de los 8 bits del puerto.

Lo que debes hacer, aparte de configurarlos como digitales, es omitir de la lectura los bits que no requieras que se lean.
Esto lo puedes hacer enmascarando los bits no requeridos.
 
Sí, todo lo que me dices lo hice. Me estaba dando lecturas erróneas de hecho por eso que dices, que no había configurado los pines ADC como digitales. Pero ahora todo va perfecto :) gracias!
 
Atrás
Arriba