hola comunidad:
Bueno, ya soy un veterano en esto de los PICs, y la verdad es que me gustan mucho. Siempre los he programado en assembler. El proyecto en el que estoy trabajando actualmente ocupa 1/4 de la memoria del F876.
Si bien todo el codigo funciona perfectamente, hubo una parte que no funcionaba logicamente.
El codigo:
Cargo un valor entre 1 y 8 a una variable que llame MEMOZONE, o sea que el numero contenido en MEMOZONE no puede ser mayor a 9 ni menor a 1.
(0<MEMOZONE<9 con MEMOZONE perteneciente a N.)
Ok
eso perfecto
hago que me lo muestre el valor en un display de 7 segmentos y me lo muestra Ok.
Ahora lo quiero multiplicar por 2 y aqui viene el problema....
Lo primero que hice fue:
movf MEMOZONE,W
ADDWF MEMOZONE,F
Bien, luego de eso surgio todo el problema, al valor obtenido se lo agregaba al PCL para que ejecute una linea deseada y resulta que el PCL parecia que se iba mucho mas alla de lo posible(consideremos que el maximo de entrada es el 8, por lo que al multiplicarlo por 2, el maximo obtenible es de 16...)
En fin: no funcionaba.
entonces pense en otra forma de multiplicar el numero por dos, entonces cambie las 2 lineas de arriba por esta:
rlf MEMOZONE,F
Intente nuevamente ...y otra vez sopa...el PCL salia volando...Rarisimo
Cansado, entonces decidi hacer que mostrara el valor obtenido en el PUERTO B.
los 8 bits de la variable MEMOZONE saldrian y quedarian representados en los 8 bits del PUERTOB.
Hice que mostrara el valor inicial, por ejemplo tome el 4, y comprobe que RB tenia el valor 00000100, lo que es correcto. Luego de aplicar de a uno ambos metodos de multiplicacion, el puerto B mostraba valores mayores a cien!!!! Como puede ser?
Pense que el dañado era el PIC y lo probe en otro 16F876 virgen, y paso exactamente el mismo error.!!!!!
En fin, no tuve mas alternativa que no multiplicar el numero y hacer un IF para cada numero del 1 al 8, lo que quedo desprolijo y me hizo desperdiciar lineas de codigo.
Mi pregunta: PORQUEEE!???? ERROR DE MICROCHIP?
Ahora estoy teniendo un error similar con otra parte del codigo.Tengo un error loco que a veces sucede y otras no....presiono la tecla C del teclado y muestra en el DISPLAY un simbolo que corresponde a ese valor, por lo que leyo correctamente la tecla, pero luego hago
movlw 0x0C
XORWF TECLAPRES,W ;TECLAPRES TIENE EL VALOR 0x0C por lo que el display
;muestra
BTFSS STATUS,Z
GOTO NOESTECLAC
GOTO SIESTECLAC