Programación Específica > Microcontroladores
Manejo De Tablas...
(1/1)
eliza_marti:
: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 ---programa call tabla movwf PORTB goto programa
y antes porsupuesto tengo la definicion de la tabla asi:
--- Código: Text ---tabla movf TMR0,0 andlw 0fh addwf PCL,1 retlw 3fh retlw 06h retlw 5bh retlw 4fh retlw 66h retlw 6dh retlw 7dh retlw 07h retlw 7fh retlw 67h retlw 77h retlw 7ch retlw 39h retlw 5eh retlw 79h retlw 71h
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:
Huguen_aus_Tirol:
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:
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:
Navegación
Ir a la versión completa