TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Iten en 22 de Junio de 2010, 19:46:15
-
Hola gente que tal, queria pedirles ayuda con el tema de manejo de tablas y de saltos indexados. No entiendo muy bien, he leido en el foro, en varios libros y todavía no logro entender el tema. Gracias por sus ayudas!
-
Creo que tendrías que especificar un poco más que es lo que no entendés.
-
No entiendo para que sirven o como se arman. Entiendo lo de los registros W y PCL. Pero no logro entender el tema del salto, como se llama a la rutina. Tengo las ideas desordenadas!
-
No entiendo para que sirven o como se arman. Entiendo lo de los registros W y PCL. Pero no logro entender el tema del salto, como se llama a la rutina. Tengo las ideas desordenadas!
Hola, cuando uno comienza con ASM siempre se topa con ese problema. En el buscador, en la página principal, coloca las palabras clave "tablas asm". Encontrarás varios temas tratando tus dudas.
-
Hola gente, he leido y me quedaron las cosas un poco mas claras. Ahora lo que no entiendo bien es como se hace para llamar a cualquier posicion de la tabla en cualquier momento. estuve viendo en el foro y no entendi bien. Gracias!
-
Supongamos que tenemos la función Tabla. La llamamos desde nuestro programa con call Tabla.
Tabla
addwf PCL,F
retlw 0 ;Aquí apunta el PCL si W vale 0
retlw 1 ;Aquí apunta el PCL si W vale 1
retlw 2 ;Aquí apunta el PCL si W vale 2
Para no entrar en determinados detalles digamos lo siguiente:
PCL contiene la posición de memoria de la siguiente instrucción a realizar. (Esto no es del todo cierto, ya que el que contiene la dirección es el PC, Program Counter)
Si ejecutamos cualquier instrucción (que no sea un call o un goto), luego de ejecutada la instrucción el PCL se incrementa en 1.
Cuando llamamos a la función Tabla, PCL apunta a la línea "addwf PCL,F".
Luego de ejecutarse esa instrucción, PCL contiene una nueva dirección a la cual va a saltar nuestro programa.
Como nuestra instrucción era sumar W al propio PCL, la nueva dirección apuntada por el PCL estará determinada por W.
Así, si W es 0 la instrucción que se va a ejecutar es la inmediatamente siguiente a "addwf PCL,F". Si W es 2 la instrucción que se va a ejecutar es la siguiente a ("addwf PCL,F" + 2)
-
"Así, si W es 0 la instrucción que se va a ejecutar es la inmediatamente siguiente a "addwf PCL,F". Si W es 2 la instrucción que se va a ejecutar es la siguiente a ("addwf PCL,F" + 2)"
Una consulta. Si W=2 no seria "addwf PCL,F" + 3 ? Digo, no se, el valor 2 no esta en la 3º posicion de la tabla?
-
Si el valor 2 está en la 3º posición de la tabla.
Quizá me expliqué mal... O tal vez generé una confusión pero lo miro de este modo.... si la siguiente a "addwf PCL,F" es la que dice "retlw 0" la siguiente a "addwf PCL,F" +2 seria "retlw 0" +2 por ende es "retlw 2"
-
Joya, ya entendí! Muchísimas gracias AngelGris! Agradezco tu tiempo y predisposición! Gracias también a los que aportaron para despejar mis dudas!!!
-
Los micros cuando ejecutan una instruccion (creo que hay que excluir las de salto) hacen siempre una instruccion en W que es PCL+1 para pasar a la siguiente instruccion y asi hacer que el programa corra, en las tablas hacen PCL+W y a continuacion hacen +1, esto se ve bien cuando llamas a una tabla y en W lleva 0, hace PCL+0 y se quedaria en esa instruccion y no devolveria ningun valor, pero como a continuacion hace PCL+1 nos va al primer valor de la tabla y asi para todos los valores. Espero que se entienda porque es un poco lioso.