Autor Tema: Tratamiento de tablas en ensamblador con PIC18F4550  (Leído 7436 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Tratamiento de tablas en ensamblador con PIC18F4550
« en: 28 de Junio de 2008, 06:17:34 »
A ver si los que habeis tratado el ensamblador para PICs18 me podeis hechar una mano.

Tengo un programa en C donde aparece una parte en ensamblador con una tabla:

Código: [Seleccionar]
#asm
.
.
.
goto tabla:
.
.
.
tabla   movf   indice,0
          addwf  PCL,1
          goto    A
          goto    B
          goto    C
          etc
#endasm

Esto que con PICs16 funcionaría aquí le falta algo y no va.

¿Qué le falta? ¿Cuando me pondré con el ensamblador para PICs18  :D ?

Un saludo

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #1 en: 28 de Junio de 2008, 06:57:39 »
Asegurate de que estés en el banco 0 cuando trabajes con el PCL.  :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #2 en: 29 de Junio de 2008, 15:24:41 »
No, no es eso. Estoy en el banco 0.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #3 en: 29 de Junio de 2008, 22:45:20 »
¿Qué es lo que exactamente ocurre?, el PC no salta?

A mi me pasaba que siempre saltaba una de mas, entonces lo que hise, poner un NOP justo debajo del addwf pcl. Quedaría así:

Código: [Seleccionar]
       addwf    pcl,1
        nop
       goto    a
       goto    b
       goto    c
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #4 en: 30 de Junio de 2008, 06:40:32 »
El pc en la serie 16 se incrementa en 1 y en la serie 18 se incrementa de 2, no se si será eso lo que causa el problema.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #5 en: 30 de Junio de 2008, 11:37:26 »
No lo sabía ... entre otras muchas cosas.

El problema está en que al cargar un valor 6 en el índice se va fuera del alcance de los GOTOs. Entonces la solución sería poner un NOP entre GOTO y GOTO para que accediese a ellos de dos en dos. Voy a probarlo, gracias muchachos.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #6 en: 30 de Junio de 2008, 12:30:32 »
Nada, así támpoco va, valga lo que valga el índice el PCL después de la suma siempre se carga con el mismo valor errático.

Sé que Palitroquez lo hizo con punteros pero me gustaría primero intentarlo de una forma más sencilla ... pero no sale.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #7 en: 30 de Junio de 2008, 13:48:39 »
¡Vale ya está! googleando lo encontré.

No era tan fácil como parecía, con razón a la gente le cuesta entrarle al ensamblador para PICs18.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #8 en: 30 de Junio de 2008, 19:24:02 »
¿Y que era?

Así aprendo yo también.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #9 en: 01 de Julio de 2008, 01:40:42 »
Se hace así:

Código: ASM
  1. ; Ejemplo de acceso a tabla
  2. ; ...
  3. ; Supongamos que inicialmente WREG=3
  4. rlncf WREG,W,0
  5. ; el valor en el acumulador se multiplica x2
  6. ; mediante un desplazamiento lógico a izquierdas
  7. ; ya que cada retlw ocupa 2 posiciones de memoria
  8. ; al final:-> (WREG=6)
  9. call
  10. tabla
  11. ; Llamamos a tabla y nos devuelve en W
  12. ; el contenido de la posición 3.
  13. org 0x100
  14. tabla
  15. movff PCL,0
  16. ;antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
  17. addwf PCL,F
  18. ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+6
  19. retlw 0x00
  20. ; con lo que se salta a la posición
  21. retlw 0x01
  22. ; indicada por W
  23. retlw 0x01
  24. retlw 0x02---
  25. ; PCL=PCL+6 Este (0x02) es el valor devuelto en WREG.
  26. retlw 0x01
  27. retlw 0x02
  28. retlw 0x02
  29. retlw 0x03
  30. retlw 0x01
  31. retlw 0x02
  32. retlw 0x02
  33. retlw 0x03
  34. retlw 0x02
  35. retlw 0x03
  36. retlw 0x02
  37. retlw 0x04

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #10 en: 01 de Julio de 2008, 08:08:26 »
Buenas, llegué algo tarde al hilo pero quería aportar que en los 18F los registros de uso general del microcontrolador están en ACCESS BANK es decir que se pueden acceder siempre sin importar en qué banco estemos.



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #11 en: 09 de Julio de 2008, 12:09:56 »
la parte de tu código que no entiendo es la de leer el PCL para iniciar el pclath y el pclatu, entiendo que estos se actualizan solamente leyendo el pcl, ahora ¿me puedes explicar para que se necesitan actualizar si solo se trabaja con el PCL? y este se puede acceder directamente o hay algo que leí mal en el DS?

modifico para agregar el link del programita que hice, el tema es que en MPLAB trabaja muy bien pero en la vida real me produce efectos erráticos como dices.

http://www.todopic.com.ar/foros/index.php?topic=22396.msg177735#msg177735
« Última modificación: 09 de Julio de 2008, 12:14:09 por flacoclau »
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Tratamiento de tablas en ensamblador con PIC18F4550
« Respuesta #12 en: 09 de Julio de 2008, 12:23:10 »
JEjeje leído y entendido moy bien el DS ahora si.
lo que ocurre es que al escribir el pcl también se me transferían el pclath y el pclatu a sus correspondientes pclh y pclu.
por lo tanto el procedimiento es primero leer el pcl y después recién sumerle el offset.
cosas de la vida...
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.


 

anything