Autor Tema: COMPORTAMIENTO ILOGICO DEL 16F876  (Leído 1674 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
COMPORTAMIENTO ILOGICO DEL 16F876
« en: 17 de Mayo de 2005, 13:03:00 »
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?Ardiendo
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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #1 en: 17 de Mayo de 2005, 17:20:00 »
Buenas Bruno.

El problema que tienes está relacionado con el registro pc y pclath respectivamente. En el primer caso, quieres sumar al pc un valor. Todo bien excepto que el dato que vas a sumar es de 8 bits y el pc tiene 14 bits. ¿Que está ocurriendo entonces? pues que si sumas un número de 8 bits en la ALU del PIC de , que es de 8 bits, y lo guardas en el pc de 14 bits, tan sólo los 8 bits LSB son modificados en el pc, por lo que pueden ocurrir dos cosas: 1.- que la suma no tenga acarreo y el pc se carga con el valor correctamente, 2.- que la suma tenga acarreo y el pc se va a donde le da la gana. Te pongo un ejemplo:

Para el primer caso, tenemos el pc = 00F4h y le sumamos 8, nos queda pc = 00FCh todo correcto y funciona.

Para el segundo caso, tenemos el pc = 00F4h y le sumamos 16, nos queda pc = 0004h el pc salta hacia atrás en vez de a la dirección 0104h.

No se si lo has entendido. Por eso tienes que tener cuidado de no hacer saltos con el pc de esta forma, es decir, asegurarte de que no saltas más allá de lo permitido, es decir de 256 en 256 posiciones.

Tu segundo problema tiene que ver con el pclath y los saltos de página de programa. Al igual que ocurre con la alu de 8 bits, las instrucciones goto y call sólo tienen información de salto de 12 bits, es decir, que tú sólo puedes modificar los 12 bits LSB del pc con una instrucción de este tipo. para poder modificar los 2 últimos bits del pc se utiliza el registro "pclath", que contiene los 5 bits MSB del pc. Cuando el PIC detecta la instrucción goto o call, carga los 12 bits que hay en la instrucción en el pc y los 2 últimos los toma del pclath. Entonces para saltar a una zona de programa que esté por encima de los 2KBs (el 16F876 tiene 8KBs) hay que modificar previemante el contenido del pclath. Este hecho te lo advierte el compilador cuando haces saltos de página de la siguiente forma:

Codigo:
Message[306] C:AMP.ASM 253 : Crossing page boundary -- ensure page bits are set.


Fíjate cuando compiles tu programa si te aparece este tipo de mensajes.

Recuerda que para volver de una subrrutina tambien debes cargar el pclath correctamnete antes del "return"

Ya nos contarás como han ido esos programas.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #2 en: 17 de Mayo de 2005, 21:24:00 »
hola antoniof. muchas gracias por la respuesta. seguramente el primer error sucedia por el pc y el pclatch.
El segundo problema es distinto, no es el mismo problema. Pero no importa, voy a ver si lo puedo solucionar...Mmmmm...
El compilador no me muestra ningun Mensaje de ese tipo. Solo del tipo 302.
Ahora, como hago para saber en que linea el programa pasa a la siguiente pagina??
Hay algun programa que lo muestre? saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #3 en: 18 de Mayo de 2005, 03:35:00 »
En el MPLab menu --> view -> program memory

Primera página direcciones de la   0000h hasta la 07FFh
Segunda página direcciones de la 0800h hasta la 0FFFh
Tercera página direcciones de la   1000h hasta la 17FFh
Cuarta página direcciones de la    1800h hasta la 1FFFh

Me acabo de dar cuenta que meti la gamba en mi explicación anterior. corrijo: las instrucciones call y goto tienen información sobre los 11 bits LSB del pc, y el pc es de 13 bits (no de 14). Me he confundido con las instrucciones que si son de 14 bits.

Desconectado roc364

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 108
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #4 en: 18 de Mayo de 2005, 09:13:00 »
Hola Brunof!..   Esto no tiene nada que ver con el post, pero... si con la firma de tus mensajes!!!   Esto es un robo!!!!!!!  jejej   hacia un tiempito que no andaba por aca y.....   jejejej
usted sabra que hacer...

un Saludo!!
Hay solo 10 tipos de personas, los que entienden el codigo binario, y los que no.

Viva La Patagonia Argentina!!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #5 en: 20 de Mayo de 2005, 02:08:00 »
JAJAJA! OHHH! NO SABIA QUE YA HABIA ALGUIEN QUE LO TENIA! ES QUE ME GUSTA TANTO....OK OK. VAMOS A TENER QUE APLICAR LA CLAUSULA DE ANTIGUEDAD...Enfurruñado
JEJE. SALUDOS Y PERDON. Giño
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #6 en: 20 de Mayo de 2005, 02:13:00 »
RE: COMPORTAMIENTO ILOGICO DEL 16F876[/b]

<
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #7 en: 20 de Mayo de 2005, 02:14:00 »
OHH ENCIMA NO FUNCIONA LA BASE DE DATOS PARA CAMBIAR LA FIRMA. TE LA VOY A SEGUIR ROBANDO HASTA QUE FUNCIONE LA BASE DE DATOS Sonrisa SALUDOS.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado roc364

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 108
RE: COMPORTAMIENTO ILOGICO DEL 16F876
« Respuesta #8 en: 20 de Mayo de 2005, 18:47:00 »
Jajjjj  Si!!!  La verdad que esta muy bueno...
Uselo nomas, eso si, por cada post con esa linea se te debitara automaticamente de tu cuenta 0,50 $ !!!!!
Jjejejjjj



saludos!
Hay solo 10 tipos de personas, los que entienden el codigo binario, y los que no.

Viva La Patagonia Argentina!!