guia1 - Code Warrior y Modos de Direccionamiento

Microprocesadores. Guía 1
1
Facultad: Ingeniería.
Escuela: Electrónica.
Asignatura: Microprocesadores.
Lugar de ejecución: Laboratorio de
Microprocesadores (Edificio 3, 2a planta).
Uso de la herramienta de desarrollo y los modos de
direccionamiento del HC12.
Objetivos generales
•
•
Aplicar de forma efectiva las diferentes capacidades del programa CodeWarrior.
Utilizar de forma efectiva los diferentes modos de direccionamiento que posee el
HC12.
Objetivos específicos
•
•
•
•
•
Identificar los diferentes elementos que posee un código fuente escrito en lenguaje
ensamblador.
Crear aplicaciones simples utilizando las facilidades que ofrece el IDE que posee el
programa CodeWarrior.
Ejecutar una aplicación simple desarrollada en el IDE del CodeWarrior.
Realizar de forma efectiva los procesos de depuración y simulación de una aplicación
desarrollada en el IDE del CodeWarrior.
Aplicar la sintaxis adecuada al utilizar los diferentes modos de direccionamiento que
posee un microprocesador.
Introducción teórica
Uso de la herramienta de desarrollo CodeWarrior.
CodeWarrior es un Ambiente Integrado de Desarrollo (IDE) que permite utilizar los diferentes
productos que ofrece la compañía Freescale, entre ellos los microcontroladores de la familia
HC12.
Cuando se trabaja con microcontroladores es importante contar con herramientas que
faciliten procesos tales como: la generación del código, el mecanismo para programar la
memoria del dispositivo y la capacidad de poder verificar la correcta operación del código
(depuración). CodeWarrior las posee aparte de la capacidad compilar los programas tanto en
lenguaje ensamblador como en lenguaje C; adicionalmente brinda recursos de simulación,
emulación y diferentes librerías para interactuar con dispositivos concretos como pantallas
LCD, memorias, etc.
Microprocesadores. Guía 1
2
Materiales y equipo
•
•
Computadora con Windows 98 o superior con el software CodeWarrior IDE.
Tabla (set) de instrucciones del microcontrolador HC12.
Procedimiento
PARTE I: Creación de código en CodeWarrior IDE.
Para crear un nuevo código en CodeWarrior se debe proceder de la siguiente manera:
1. Ejecute el programa dando doble clic en el icono del escritorio.
2. Seleccione el botón <Crear New Proyect> para inicializar el asistente que le ayudará
a crear el nuevo código.
3. En la página de bienvenida presione el botón <Siguiente> .
4. En la siguiente ventana seleccione el núcleo con que desea trabajar (el asistente le
mostrará una buena lista con opciones), esta acción hará que se incluya en su código
el archivo de encabezado adecuado, en este caso particular selecciones la opción
<MC9S12XDT512>.
5. A continuación se le consulta si desea emular multinúcleos (opción XGATE), para el
caso seleccione la opción <Single Core (HCS12X)>.
6. Luego se consulta sobre el lenguaje de programación que se empleará (la herramienta
soporta aparte del ensamblador el lenguaje C), seleccione <Assembly>.
7. También se le consultará si el programa se colocará en memoria de forma absoluta o
relativa. La primera opción implica conocimiento de la arquitectura donde se ejecutará
el código, seleccione la opción <Absolute Assembly>.
8. El último paso del asistente implica seleccionar la arquitectura donde se ejecutará el
código, pensando en el proceso de depuración, estas pueden ser simuladores o
tarjetas de desarrollo. Para este caso seleccione <Full Chip Simulation>.
9. Una vez en este punto el IDE generará un árbol para describir el proyecto completo,
como se muestra en la Figura 1.
10. Este árbol contiene el archivo main.asm, que usará como plantilla de trabajo para
crear su propio código así como todos los elementos y archivos necesarios para
realizar la posterior simulación.
NOTA: Es muy importante tener en cuenta que la plantilla contiene muchos elementos
propios para desarrollar el código por lo que es fundamental sólo modificar el texto
concreto que se necesita editar y dejar lo demás tal como está.
Microprocesadores. Guía 1
1
Fig. 1. Arbol del proyecto completo.
11. En el archivo main.asm ubique la sección en que se declaran los datos con los que
trabajará el programa, esta contiene el siguiente texto:
ORG RAMStart
; Insert here your data definition
Counter
DS.B 1
FiboRes
DS.B 1
12. Sustituya los datos declarados por los siguientes:
DatoByte1 DS.B 1
;Declara y reserva 1 byte en la memoria RAM
DatoWord1 DS.W 1
;Declara y reserva 2 bytes en la memoria RAM
Array1DS.B 5
;Declara y reserva 5 bytes en la memoria RAM
13. En el mismo archivo ubique la sección en que se escribe el código a ejecutar. Esta
inicia con las siguientes líneas:
; code section
ORG ROMStart
14. Ubique las siguientes 2 líneas que delimitan la sección de código (estas dos líneas no
son consecutivas):
mainLoop:
RTS
LDX #1
;resul in D
;X countains counter
4
Microprocesadores. Guía 1
15. Sustituya el bloque delimitado por las líneas anteriores (las dos incluidas) con el
siguiente código:
Etiqueta1:
; Ejemplo de direccionamiento inmediato
LDAA #%01010101 ;Carga en el registro A el dato binario 01010101 (85 decimal)
LDAB #'A'
;Carga en el registro B el dato ASCII 'A' (65 decimal)
LDX #$2000
;Carga en X (16 bits) el dato 2000 hexa (8192 decimal)
;Este valor es la dirección donde inicia el arreglo declarado
ANDA #15
;Realiza la operación AND con el registro A y el dato 15 Dec.
; Ejemplo de direccionamiento extendido
STAB DatoByte1 ;Almacena el contenido de B en el dato DatoByte1 (dirección)
STX DatoWord1 ,Almacena el contenido de X (16 bits) en el dato DatoWord1
ADDA DatoByte1 ;Suma el registro A con el de DatoByte1, salva resultado en A
LDY DatoWord1 ;Guarda el valor de DatoWord1 en el registro Y
; Ejemplo de direccionamiento indexado
STAA 0,Y
;Guarda el contenido de A en la dirección a la que apunta el registro Y
STAB 1,X
;Guarda el contenido de B en la dirección efectiva formada por la
;suma del contenidos de Y más uno equivalente a $WWWW
STX 2,Y
;Guarda el contenido de X en la dirección efectiva formada por la
;suma del contenidos de Y más dos equivalente a $WWWW (la parte
;alta) y en la siguiente la parte baja.
; Ejemplo de direccionamiento inherente:
ABA ;Suma el contenido de A más el de B y almacena el resultado en A
INCA ;Incrementa en uno el registro A
DECB ;Decrementa en uno el registro B
CLRA ;Borra el registro A
CLC ;Borra la bandera de acarreo
; Ejemplo de direccionamiento relativo:
BRA Etiqueta1
;Salto incondicional a la etiqueta (similar a GOTO).
PARTE II: Compilación, depuración y simulación
16. Compile el código fuente, para lograrlo despliegue, en la barra de menú, la opción
“Project” y seleccionar “Make”, otra opción es presionar la tecla <F7>.
Microprocesadores. Guía 1
1
17. Luego de la compilación (si no se detectan errores) proceda a depurar el código. En la
opción “Project” seleccione ahora “Debug”, o presione <F5>.
18. Se abrirá el entorno de simulación con múltiples ventanas que le facilitarán
la
depuración del código, entre ellas se encuentran: la Ventana Sources, Ventana Data,
Ventana Command, Ventana Assembly, Ventana Register y Ventana Memory.
19. Para facilitar el trabajo se tienen algunos botones muy útiles, que se describen en la
Figura 2.
20. Reinicie el programa presionando el botón de Reset.
21. Ejecute el programa paso a paso analizando la ejecución de cada una de las
instrucciones si hay algo que no comprende por favor consulte con su instructor de
laboratorio.
22. Muestre a su instructor de laboratorio que ha concluido esta parte de la práctica.
Reset (Ctrl+R): Efectúa un Reset del programa y ubica el puntero en el inicio del
programa.
Start (F5): Ejecuta el programa completo desde la linea que apunta el contador de
programa hasta encontrar un breakpoint.
Single step (F11): Ejecuta una sola instrucción o linea ejecutable, se detiene
dentro de subrutinas.
Halt (F6): Detiene la ejecución del código, este botón se activa solo mientras se
está ejecutando el programa.
Fig. 2. Botones del entorno de simulación.
PARTE III: Ejercicios
Modifique el código fuente para se sumen dos datos (de 8 bits cada uno) almacenados en
Dato1 y Dato2. El resultado se debe guardar en el dato llamado Respuesta, el cual debe
tener un tamaño adecuado.
PARTE IV: Desafío corto.
Modifique el código para sumar tres números de 8 bits, cada uno almacenados en
memoria. El resultado se debe guardar en el dato llamado Respuesta, el cual debe tener
un tamaño adecuado.
Bibliografía
•
•
•
J. C. Vesga Ferreira y otros “Microcontroladores Motorola-Freescale: programación,
familias y sus distintas aplicaciones en la industria”, Alfaomega 20081.
MOTOROLA “CPU12 Reference Manual”
Ayuda de programa CodeWarrior IDE.
6
Microprocesadores. Guía 1
Hoja de cotejo: 1
Guía 1: Uso de la herramienta de desarrollo y los modos de direccionamiento del HC12.
Alumno:
Maquina No:
Docente:
GL:
Fecha:
EVALUACION
%
1-4
5-7
8-10
CONOCIMIENTO
25%
Conocimiento
deficiente de los
fundamentos
teóricos
Conocimiento y
explicación
incompleta de los
fundamentos
teóricos
Conocimiento
completo y
explicación clara
de los fundamentos
teóricos
APLICACIÓN
DEL
CONOCIMIENTO
70%
No termina el
procedimiento
planteado en la
guía 10%
Termina el
procedimiento con
bastante
asistencia 10%
Termina el
procedimiento de
forma
independiente 10%
No modifica el
programa 30%
Modifica el
programa no
interpreta
correctamente los
resultados 30%
Modifica el
programa
interpretando
correctamente sus
resultados 30%
Sus respuestas son
incompletas 30%
Sus respuestas son
correctas y
completas 30%
No responde a
preguntas de
retroalimentación
30%
ACTITUD
TOTAL
2.5%
Es un observador
pasivo.
Participa
ocasionalmente o
lo hace
constantemente
pero sin
coordinarse con su
compañero.
Participa
propositiva e
integralmente en
toda la práctica.
2.5%
Es ordenado; pero
no hace un uso
adecuado de los
recursos
Hace un uso
adecuado de los
recursos, respeta
las pautas de
seguridad; pero es
desordenado.
Hace un manejo
responsable y
adecuado de los
recursos conforme
a pautas de
seguridad e
higiene.
100%
Nota