Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
PRCTICA 1:
-1-
1. Objetivos
Introducir al alumno en la programacin en ensamblador Conocer el entorno de desarrollo MPLAB Simular el funcionamiento de programas-ejemplo.
-2-
-3-
Campo de instrucciones Las segunda columna corresponde al campo de instrucciones. Puede ser una instruccin del microcontrolador o una instruccin para el ensamblador, llamada directiva. Campo de datos Contiene datos u operandos para las intrucciones. En los PICs, los datos pueden ser un registro, un bit de un registro, una etiqueta o un nmero constante (llamado literal). Algunas instrucciones no llevan datos. Si una instruccin necesita mltiples datos, deben separarse por comas (,). La especificacin de la base en la que se expresan los datos u operandos es opcional: d65, b01000001,0x41, o101 y A son el mismo dato. El sufijo d o D se emplea para expresar un valor en decimal. El sufijo b o B expresa un valor en binario. Para expresar un valor en hexadecimal se emplea el sufijo 0x 0X. Un nmero en base octal se representa mediante el sufijo o O. Finalmente, un valor se puede expresar mediante un caracter ASCII si se encierra entre comillas simples como A.
Campo de comentarios El ltimo campo es el del comentario, siempre que haya un punto y coma (;) como primer carcter. Puede colocarse en cualquier lugar del cdigo fue nte. Los comentarios en ensamblador son muy importantes. Los comentarios deben describir las tareas que realizan las instrucciones y/o subrutinas. Sin comentarios, es muy difcil descifrar, algunos das despus, el cdigo fuente que uno mismo ha creado. El listado que se presenta a continuacin en la Figura 2 presenta el aspecto del cdigo fuente del programa EJEMPLO1.ASM con los campos de etiquetas, instrucciones, datos y comentarios recuadrados para su clara distincin.
-4-
;EJEMPLO 1
List include Resultado equ org goto org movlw addlw movwf nop nop end ETIQUETAS
;Tipo de procesador ;Definiciones de registros internos ;Define la posicin del resultado ;Vector de Reset
Inicio
;Salva el vector de interrupcin ;Carga 1er. sumando en W ;Suma el 2 sumando ;Almacena el resultado ;Poner breakpoint de parada
Stop
INSTRUCCIONES DATOS
COMENTARIOS
-5-
Directivas Una directiva es un comando escrito en el cdigo fuente para realizar un control directo o ahorrar tiempo a la hora de ensamblar. El resultado de incorporar directivas se puede ver en el fichero *.LST despus de ensamblar el programa. En el programa EJEMPLO1.ASM aparecen las siguientes directivas: LIST permite elegir, entre otras cosas, el tipo de microcontrolador a utilizar (P), nmero de carcteres por lnea (C), tamao de los tabuladores (B), base de numeracin por defecto (R), niveles de mensajes de salida (W), etc. EQU se utiliza para asignar valores a las etiquetas deseadas. As, Resultado, tiene asignado el valor 0x10, y puede referirse a un registro de la memoria de datos del PIC. ORG indica al ensamblador dnde debe comenzar a colocar las instrucciones en la memoria de programa. Es decir, es el ORiGen para todo el cdigo que sigue. La direccin de comienzo (origen) es en la posicin 0, debido a que la familia de microcontroladores PIC de gama media despus del encendido o RESET siempre ejecutan la instruccin situada en la direccin0. Se denomina Vector de Reset. La direccin 4 es el Vector de Interrupcin. Si se genera una interrupcin el microcontrolador ejecuta la instruccin que se encuentre aqui. Es una buena prctica dejar libre la direccin 4 por si ms adelante deseamos aadir capacidad de interrupcin a nuestro programa. El programa salta por encima del Vector de interrupcin y comienza en la direccin 5. INCLUDE permite aadir listados de programas al listado del programa actual. END indica al ensamblador el final del cdigo fuente, donde ha de finalizar el proceso de ensamblado
-6-
Cdigo del programa Las tres instrucciones que siguen a la etiqueta Inicio realizan la suma de dos numeros literales, 7 y 6, y guardan el resultado de la suma en la posicin de memoria 0x10 etiquetada como Resultado.
movlw addlw movwf 0x07 0x06 Resultado ;Carga 1er. sumando en W ;Suma el 2 sumando ;Almacena el resultado
Figura 3. Detalle del listado del programa EJEMPLO1.ASM. Por ltimo, nop es una instruccin que produce que el PIC no haga nada, significa no operacin.
-7-
-8-
Desde MPLAB-IDE es posible escribir el programa fuente (*.asm), ensamblarlo para obtener el el fichero ejecutable o binario (*.hex), grabarlo a un dispositivo, simular su funcionamiento y depurar el cdigo. A continuacin se describen los pasos a seguir para realizar todas esas tareas:
1. Seleccionad File>New .
Se abre una ventana en blanco sobre la que se escribe el cdigo de nuestro programa:
;EJEMPLO 1
List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Resultado equ org goto org Inicio 0x10 0x00 Inicio 0x05 ;Define la posicin del resultado ;Vector de Reset
;Salva el vector de interrupcin ;Carga 1er. sumando en W ;Suma el 2 sumando ;Almacena el resultado ;Poner breakpoint de parada
Stop
-9-
y guardad
1.
MPLAB
Project
Wizard
seleccionando
y seleccionad
- 10 -
4.Introducid 5.Aadid
proyecto.
un nombre para denominar el proyecto (Proyecto1) y seleccionad el directorio donde se desea guardar. el fichero fuente creado anteriormente (ejemplo1.asm) al
Si el proyecto no se ensambla correctamente, comprobar los mensajes de error obtenidos y volver a ensamblar. Al ensamblar con xito se genera el fichero ejecutable ejemplo1.hex.
7.5. Grabacin.
Si se desea grabar el fichero ejecutable ejemplo1.hex en la memoria del microcontrolador, hay que utilizar un dispositivo externo a nuestro PC denominado grabador o programador, por ejemplo el PICSTART Plus. Si conectamos el programador a nuestro PC, y colocamos un microcontrolador en su zcalo, desde MPLAB IDE es posible leer y grabar programas mediante la seleccin de Programmer>Select Programmer>PICSTART Plus Pero no es el caso que nos interesa, en esta prctica slo utilizaremos el entorno MPLAB_IDE para editar y simular programas, no para grabarlos. En prcticas posteriores s utilizaremos dispositivos programadores, en concreto la tarjeta EasyPIC.
- 11 -
1.Seleccionad MPLAB SIM como simulador seleccionando la opcin Debugger>Select>Tool>MPLAB SIM Al seleccionar MPLAB SIM aparecern nuevos botones en la barra de herramientas que permiten seleccionar las opciones de simulacin y depuracin (ver Figura 9)
- 12 -
2. Seleccionad Debugger>Reset
para inicializar la depuracin. Debe aparecer una flecha verde a la izquierda de la ventana de programa sealando a la primera lnea del cdigo que se ejecutar. 3. Seleccionad Debugger>Run para ejecutar el programa. El mensaje "Running..." aparecer en la barra de estado.
- 13 -
Mientras se realiza la ejecucin del programa con las opciones de depuracin anteriores es posible visualizar los valores de las variables superponiendo el cursor del ratn sobre los nombres de las variables en la ventana de programa. Tambin se puede utilizar la ventana Watch para visualizar siempre el valor de ciertas variables de inters (como el acumulador, otros registros especiales, u otras posiciones de memoria). Para ello,
Seleccionad View>Watch y marcad los registros especiales que se desean visualizar o escribid el nombre de las variables.
Figura 10. Ventana Watch. Tambin es posible visualizar de forma global toda la memoria del microcontrolador agrupada por tipos:
Seleccionad View>Special Function Registers Seleccionad View>Program Memory Seleccionad View>File Registers Seleccionad View>EEPROM
- 14 -
Para situar un Breakpoint sobre una lnea sealada por el cursor se pulsa el botn derecho del ratn, de manera que aparece el men desplegable, como en la figura 11. Selecciona Set Breakpoint y aparecer sobre el programa una B en rojo en la posicin donde se ha situado el punto de paro. Otra forma de situar o eliminar un Breakpoint es realizando una doble pulsacin con el ratn sobre el nmero de lnea donde se quiere situar el punto de paro. La ventana memoria de traza es una herramienta que ayuda a simular los programas (Figura 12). El Simulator Trace toma una instantnea de la ejecucin del programa. En el simulador el buffer de traza o memoria de traza es til para visualizar un registro a lo largo de la ejecucin del programa, de manera que se puede registrar por dnde pasa el programa y despus analizarlo. El simulador toma datos desde la ltima vez que se puls Run o
- 15 -
Para visualizar la ventana de memoria de traza hay que seleccionar el men View > Simulator Trace. El simulador muestra en la ventana Trace cualquier variacin sobre los registros al ejecutarse el cdigo de instruccin. Esta ventana tiene las columnas cuyos significados se citan:
- 16 -
Line
Nmero de lneas ejecutadas desde que se puls Run por ltima vez. Direccin de la memoria de programa donde se encuentra la instruccin. Cdigo de operacin numrico de la instruccin. Etiqueta de la instruccin si la tuviese. Instruccin ejecutada. Direccin numrica del registro fuente Dato del registro fuente Direccin numrica del registro destino Dato del registro destino Ciclos mquina transcurridos
El contenido de la memoria de traza se pues salvar a un fichero para un posterior anlisis. Para ello, estando situado sobre esta ventana pulsar el botn derecho del ratn y seleccionar Output to File salvando por el procedimiento conocido en Windows.
- 17 -
Si pulsa sobre Add Row, se irn aadiendo diferentes filas. Cada una de estas filas corresponde a un estmulo sobre una lnea de entrada. La forma de editarlos es pulsar sobre la casilla correspondiente y seleccionar la patilla a la que se quiere vincular y el tipo de cambio que se desea realizar con ese pin para cada pulsacin:
Poner la entrada a 1 Poner la entrada a 0 Cambiar de valor cada vez que se pulse. sta es la ms habitual. Cambia el estado del pin y retorna de nuevo a su valor actual
- 18 -
La figura 14 muestra como se ha configurado para las cinco lneas del puerto A como entrada y en modo Toggle.
Figura 14. Configurar los estmulos para el Puerto A como entrada y modo Toggle. Tras pulsar el botn Fire habr de ejecutarse la siguiente instruccin antes de ver los cambios a travs de las ventanas de visualizacin. Es posible salvar la configuracin realizada mediante el botn Save para recuperarla en posterior ocasin con el botn Load.
- 19 -
8.2. Ejercicio:
Modificad el programa EJEMPLO1.ASM para que realice la suma de tres nmeros situados en las posiciones de memoria 0x11, 0x12, 0x13 y el resultado se almacene en 0x15.
8.3. Ejercicio:
Cread un proyecto y simulad el funcionamiento del siguiente programa que realiza la suma de dos nmeros de 16 bits cada uno. Realizad las siguientes sumas hexadecimales: 00FF + 0001, 01E4 + 02C4
;EJEMPLO 2 ;Suma de dos nmeros, A y B, de 16 bits cada uno.
List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Dato_A_L Dato_A_H Dato_B_L Dato_B_H Resultado_L Resultado_H equ equ equ equ equ equ org goto org Inicio movf addwf movwf movf btfsc addlw addwf movwf nop nop end 0x10 0x11 0x12 0x13 0x14 0x15 0x00 Inicio 0x05 Dato_A_L,W Dato_B_L,W Resultado_L Dato_A_H,W STATUS,C 1 Dato_B_H,W Resultado_H ;Define ;Define ;Define ;Define ;Define ;Define la la la la la la posicin posicin posicin posicin posicin posicin del del del del del del dato A (bajo) dato A (alto) dato B (bajo) dato B (alto) resultado (bajo) resultado (alto)
;Vector de Reset
;Salva el vector de interrupcin ;Carga menos peso del dato A ;Suma menos peso del dato B ;Almacena el resultado ;Carga ms peso del dato A ;Hubo acarreo anterior ?? ;Si, suma 1 al acumulador ;Suma ms peso del dato B ;Guarda el resultado ;Poner breakpoint de parada
Stop
- 20 -
8.4. Ejercicio:
Cread un proyecto y simulad el funcionamiento del programa Ensam_01.ASM.
8.5. Ejercicio:
Cread un proyecto y simulad el funcionamiento del programa Ensam_02.ASM.
8.6. Ejercicio:
Cread un proyecto y simulad el funcionamiento del programa Ensam_03.ASM.
- 21 -