• Sábado 16 de Noviembre de 2024, 23:30

Autor Tema:  Manejo De Tablas...  (Leído 1714 veces)

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Manejo De Tablas...
« en: Martes 8 de Marzo de 2005, 16:22 »
0
:ph34r: Holas Chicos!. :hola: ...Gracias por su atención!..pasa que tengo ciertas dudas con el manejo de tablas  :( ..les explico:

Primero llamo a la tabla dentro de mi programa principal asi:

Código: Text
  1. programa
  2.  
  3. call tabla
  4. movwf PORTB
  5. goto programa
  6.  

y antes porsupuesto tengo la definicion de la tabla asi:

Código: Text
  1. tabla
  2. movf TMR0,0
  3. andlw 0fh
  4. addwf PCL,1
  5. retlw 3fh
  6. retlw 06h
  7. retlw 5bh
  8. retlw 4fh
  9. retlw 66h
  10. retlw 6dh
  11. retlw 7dh
  12. retlw 07h
  13. retlw 7fh
  14. retlw 67h
  15. retlw 77h
  16. retlw 7ch
  17. retlw 39h
  18. retlw 5eh
  19. retlw 79h
  20. retlw 71h
  21.  

Como se daran cuenta el acumulador w se carga dentro de la tabla (andlw 0fh)..bueno ..como todos sabemos el PC contiene la siguiente direccion a ejecutarse pero a excepcion de un call y otros....entonces  en mi caso..en el momento en que hago el call el Pc tendrá la dirección de tabla..(corrijanme porfavor si estoy mal)..luego en tabla..el PC se cargará con la dirección de tabla + 0fh....no?...ahora esta es mi duda ...... :( NO entiendo la logica de funcionamiento ...si en mi ejemplo siempre le sumo al PC el mismo valor (que le asigno dentro de tabla)..comparará siempre el mismo valor?...mmmm..entonces ...quiere decir que mi tabla comparará de 0f en 0f?.....ahora si tabla está en 10h y le sumo al pc 0fh entonces con el addwf PCL,1 ..el PC tendrá.. (10h +0f) ?..y en mi tabla que está arriba no existe esa posición para devolverle algo a W (solo hay hasta 15)...(como funciona?)...

Si alguien podría explicarme se lo agradecia mucho..  :)
Gracias por su tiempo!.. espero sus respuestas!..   :hola:  :ph34r:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Manejo De Tablas...
« Respuesta #1 en: Martes 8 de Marzo de 2005, 17:52 »
0
Hola! El PC se carga con el valor que contiene más el valor que tenga W. La instruccion ANDLW 0x0F es para eliminar el nibble alto de W (los bits 4 a 7), de esta forma la longitud máxima del salto es 16 decimal. Si no haces esto, y tienes 16 RETLW, te puedes pasar de largo en la tabla y saltar a algún lugar fuera de ella; con esto se pierde el control del programa.
En tu caso, si tu tabla se inicia en 0x10, en ningún caso va a saltar más alla de 0x0F; no importa que en TMR0 tengas un valor mayor a 0x0F, ya que se filtra con el AND.
Bueno, espero haber sido más o menos claro...
Ah!!! Otra cosa! Debes fijarte donde pones la tabla, porque si PCL se sobrepasa, el registro PCLATH no se incrementa automáticamente!!! Si está en 0x10 no hay problema, pero si está, p.e., en 0xFA (por decir una dirección) hay que tener cuidado. Se puede solucionar con soft... :) Todavía recuerdo los dolores de cabeza que me dió... :(

Buano, saludos y suerte!

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: Manejo De Tablas...
« Respuesta #2 en: Martes 8 de Marzo de 2005, 19:54 »
0
Gracias Huguen_aus_Tirol por reponderme!.. :) ....Ahora ya entendí lo de las tablas.. :D ...aqui les dejo un ejemplo básico que me ayudó a comprender!.. :P ..si alguien lo necesita ..(está adjuntado..)..
Bueno..bye..Muchas Gracias!. :hola: ..seguiré practicando!.. :comp:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[