Electrónica III                                        Guía de Práctica N° 1TEMA: El sistema de desarrollo y el lenguaje e...
Electrónica III     El IDE Keil µVision3 utiliza el macro assembler Ax51 para ensamblar programas para la familia delos mi...
Electrónica III               MOV R5,#01HSALTO:         MOV A,R3               ADD A,R5               MOV R3,A            ...
Electrónica III                Perfomance Analyzer               Logic Analyzer     Project    Workspace                  ...
Electrónica III                MOV A,R3                JNZ SALTO  QUEDO:        SJMP QUEDO  TABLA:        DB     1,2,3,4,5...
Electrónica III   9. Realizar un programa que sume cuatro números ubicados en posiciones de memoria de RAM       sucesivas...
Próxima SlideShare
Cargando en…5
×

Guia practica 1.0 2011

307 visualizaciones

Publicado el

caca

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
307
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
3
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Guia practica 1.0 2011

  1. 1. Electrónica III Guía de Práctica N° 1TEMA: El sistema de desarrollo y el lenguaje ensamblador Objetivos: Generales: Comprender la programación básica del microcontrolador 8051, su sistema de desarrollo y el uso de un lenguaje ensamblador para la realización de programas en bajo nivel. Particulares: Comprender el funcionamiento del microcontrolador PLC935 de Philips y el entorno de desarrollo KeilµVision para la realización de programas en bajo nivelIntroducción El desarrollo de un sistema basado en microcontrolador implica: el diseño y montaje de unhardware, y el diseño y depuración del software correspondiente. Las primeras pruebas y depuracionesdel diseño de ambos bloques (hard y soft) se realizan en sistemas de desarrollos. Estos sistemas poseen unEntorno de Desarrollo Integrado (IDE, por sus siglas en inglés) que corre en una PC, el cual se comunicacon un circuito externo que posee el mismo microcontrolador que utilizamos en nuestro diseño hardware.Por lo general, estos sistemas de desarrollo permiten la edición, el ensamblado, ejecución, depuración ysimulación de los programas y su posterior grabación en el microcontrolador. Permiten asismismo laemulación del funcionamiento del software en el hardware provisto por el sistema de desarrollo. En estas clases de práctica emplearemos sistemas o kits de desarrollo que utilizan el IDE KeilµVision3, el cual se comunica a través del puerto serie con la placa MCB900 con el microcontrolador89LPC935 y que se muestra a continuación: Keil Placa para el µVision P89LPC935 3 Esquema del sistema de desarrollo Placa MCB 900 El lenguaje ensamblador (assembler) es una ayuda en las tareas de codificación en bajo nivel yaque, además de contener los nemónicos de las instrucciones, presenta ciertas ventajas que evitan el trabajode manipular el código hexadecimal, como por ejemplo símbolos e identificadores que referencian a datoso posiciones de memoria. Los nemónicos son abreviaturas de los nombres o descripciones de lasinstrucciones que se utilizan como ayuda a la memoria del diseñador. Así también se encuentran laspseudoinstrucciones o directivas que facilitan la codificación de algoritmos. Las directivas no soninstrucciones del microcontrolador por lo que no generan código ejecutable, pero pertenecen al softwareensamblador. El programa codificado en lenguaje ensamblador se denomina programa fuente y requiere de sutraducción a código máquina o programa objeto, proceso que se denomina ensamblado, para correr en unmicrocontrolador o en un sistema de emulación. PROGRAMA FUENTE ensamblado PROGRAMA OBJETO ( Nemónicos y directivas) Guía 1 ( Código de máquina) 1 de 6
  2. 2. Electrónica III El IDE Keil µVision3 utiliza el macro assembler Ax51 para ensamblar programas para la familia delos microcontroladores 8051. Trabaja asociado a otros dos programas: el Lx51 que vincula (o “linkea”)distintos modulos de un proyecto asignando direcciones absolutas; y el OHx51 que genera el códigoobjeto en formato Intel. Para generar el código de máquina para el microcontrolador P89LPC935 ( versión de la empresa Philipsdel µC 8051 de Intel), es necesario contar con una PC con sistema operativo Windows 98 o superior con elKeil µVision3, en el cual se ejecutan dos aplicaciones interactivas entre sí que posibilitan: Aplicación 1: edición, ensamblado y grabación del micro Aplicación 2: ejecución, depuración y simulación del programaPara crear una aplicación en Keil µVision3 es necesario seguir los siguientes pasos: a) Ejecutar el entorno Keil µVision3 b) Desplegar la ventana Project y crear un nuevo proyecto seleccionando Create New Project , dentro de un directorio creado para contener todos los archivos de nuestro proyecto. Ejemplo: demoguia1.uv2 dentro del directorio GUIA1 c) Seleccionar la CPU para el dispositivo P89LPC935 y NO habilitar el copiado y adicion del código del LPC900 Startup. d) Configure el proyecto de manera que al ensamblar el progama fuente se genere un archivo con extensión HEX (el código objeto). Esto se realiza seleccionando la opción Options for target ´Target 1´ en la ventana Project y en la pestaña Output seleccionar el box Create HEX file e) En la pantalla se desplegará la aplicación 1 en donde se podrán identificar las siguientes ventanas: Menú desplega Depuración ble Botones de ensamblado Grabación del micro Ventana de edición Ventana de salida f) Despliegue la opción de menú File y cree un nuevo archivo. Edite en la ventana de edición un programa en lenguaje asembler respetando los campos de edición: etiquetas, codigos de operación y operandos. Recuerde que las líneas con comentarios se indican con “;” o con “//”. A modo de ejemplo tipee el siguiente código fuente: NAME PROGRAMA_DEMOSTRACION MOV R3,#OPER Guía 1 2 de 6
  3. 3. Electrónica III MOV R5,#01HSALTO: MOV A,R3 ADD A,R5 MOV R3,A JNC SALTOACA: SJMP ACAOPER EQU 0FEH END g) Guarde el archivo con una extensión A51. Ejemplo: demoguia1.A51. h) Presione el clic contrario del mouse sobre “Source Group 1” de la ventana izquierda y adicione el archivo demoguia1.A51 al grupo. i) Ensamble el programa fuente presionando el botón build target en la parte superior izquierda de la pantalla del Keil µVision3..Con esta acción se han creado el código objeto demoguia1.hex y los archivos : demoguia1.lst, demoguia1.obj,demoguia1.M51, etc. j) Observe que en la ventana de salida se visualizarán mensajes del ensamblador y los errores de sintaxis detectados. k) Para realizar una primera depuración de la lógica de programación se puede presionar el botón de Depuración indicado en la figura anterior o seleccionar el inicio de la sesión en el menú Debug del desplegable superior. Al activar la depuración del programa, se desplega la pantalla de la aplicación 2. l) En esta pantalla se puede observar una nueva barra de herramientas en la zona superior y otras dos ventanas, aparte de la de salida, en la zona inferior de la pantalla. En una de ellas se podrá observar la evolución de los registros, variables que utilizamos en nuestro programa y el uso de la pila o stack (Watches Window) En la otra se podrán visualizar las distintas zonas de memoria (Memory Window). También podrán seleccionarse otras ventanas de inspección que nos ayudarán en la depuración de nuestro programa: el analizador lógico (Logic Analyzer Window). y el analizador de perfomance (Perfomance Analyzer Window). Esto se realiza presionando el botón correspondiente en el submenú mencionado. m) Configure las ventanas de depuración que desee utilizar. En nuestro caso ejemplo inspeccionaremos el contador de programa, los registros r3, r5, el acumulador y las banderas; observando su evolución en la ventana Workspace que se puede abrir a la izquierda de la pantalla. También podremos observar la evolución de otras variables locales, presionando F2 en la ventana rotulada Watches y colocando el nombre del registro o variable. n) Para ejecutar el programa paso a paso presione F11. Al hacerlo puede observar el efecto que la ejecución del programa tiene sobre los registros, variables y memoria seleccionada, y evaluar de esta manera el desempeño del mismo. o) Para ejecutar por completo el programa presione el botón correspondiente en el submenú o la opción Run en el menú Debug Guía 1 3 de 6
  4. 4. Electrónica III Perfomance Analyzer Logic Analyzer Project Workspace Watches Window Memory Window Output Window Pantalla de la aplicación 2: ejecución, depuración y simulación del programaACTIVIDADES PRESENCIALES: Respecto del programa demostración: investigue y responda: a. ¿qué hace el programa demostración presentado anteriormente? b. explique paso a paso la función de cada instrucción dentro del programa e identifique los modos de direccionamiento de cada una c. identifique las directivas del ensamblador empleadas y describa sus funciones d. con qué instrucción podría reemplazarse el incremento al dato en R3? e. Investigue alternativas a la escritura de la instrucción SJMP 2. Tipee, ensamble y simule el siguiente programa: NAME PROGRAMA_DEMOSTRACION_2 MOV R3,#CANT MOV DPTR,#TABLA MOV R5,#0FFH MOV R4,#00 SALTO: MOV A,R5 INC A MOV R5,A MOVC A,@A+DPTR ADD A,R4 MOV R4,A DEC R3 Guía 1 4 de 6
  5. 5. Electrónica III MOV A,R3 JNZ SALTO QUEDO: SJMP QUEDO TABLA: DB 1,2,3,4,5,6,7,8,9,10 CANT EQU 0AH END a. Identifique y corrija los errores surgieron al ensamblar el programa fuente b. Cual es la función de la directiva DB? Cuál es el valor de la etiqueta TABLA? c. ¿qué hace el programa demostración presentado anteriormente? d. Explique paso a paso la función de cada instrucción dentro del programa e identifique los modos de direccionamiento de cada una e. Identifique las directivas del ensamblador empleadas y describa sus funciones f. Inspeccione el mapa de memoria y verifique la ubicación de la tabla. g. Por qué instrucción podría reemplazar las siguientes líneas de código: DEC R3 MOV A,R3 JNZ SALTO 3. Edite, ensamble y simule 2 de los ejercicios que se proponen a continuación y el resto resuélvalos en papel.EJERCICIOS: 1. Escribir el dato FAH en todas las posiciones de memoria RAM entre 30H y 7FH. Investigue y responda: por qué se eligieron estas posiciones de memoria? 2. Sumar el contenido de las direcciones de memoria 51H y 52H, almacenar el resultado en la 53H. Investigue y responda: qué contienen las direcciones de memoria de programa a partir de la 0000H? Que tipo de direccionamiento utilizó? 3. Escribir un programa que reste el contenido del par de registros R3 y R4 del dato ubicado en las posiciones de memoria 38H y la siguiente. Almacenar el resultado en R5 y R6. El valor del carry colocarlo en el bit 2 de la dirección 20H. Investigue y responda: por qué se eligió esta posición de memoria para almacenar el carry? Qué contienen las direcciones de memoria RAM: 04H, 05H, 06H y 07H? 4. Buscar el primer dato=FFH existente en el bloque de datos de la memoria RAM direccionada desde la 30H hasta la 40H. Almacenar la dirección donde se lo encontró en el registro R3. Investigue y responda: qué registro empleó como puntero de datos? Por qué? 5. Trasladar 30 datos ubicados a partir de la posición de memoria RAM 30H y colocarlos a partir de la 50H. Utilice los registros R0 y R1. Investigue y responda: por qué se sugiere utilizar estos registros como punteros? Que tipo de direccionamiento utilizó? 6. Realizar un programa que tome un bloque de datos de 64 bytes ubicados a partir de la dirección de RAM 30H y los escriba a partir de la misma dirección pero en orden invertido. 7. Escribir un programa que coloque en cero las cuatro bits de mayor peso (nible superior) de las posiciones de memoria de RAM desde 30H hasta la posición 70H. 8. Escribir un programa que parta el byte almacenado en la dirección de RAM 30H en dos nibles y los almacene en las 31H y 32H de tal manera que los 4 bits más significativos de éstas últimas sean cero. Guía 1 5 de 6
  6. 6. Electrónica III 9. Realizar un programa que sume cuatro números ubicados en posiciones de memoria de RAM sucesivas a partir de la 30H y almacene el resultado en la quinta posición consecutiva. Si se necesita usar otro byte para el resultado almacenarlo en la sexta posición. 10. Realizar un programa que reste dos vectores de diez elementos de datos de un byte ubicados todos en posiciones consecutivas a partir de la 30H. Almacene el resultado en otro vector a continuación de los vectores anteriores. (suponer todos los vectores de datos ubicados en la zona de RAM de direccionamiento indirecto) Utilizar punteros de distintos bancos de registro. 11. Escribir un programa que multiplique los datos almacenados en las direcciones de RAM 30H y 31H. Almacene el resultado en las siguientes posiciones de memoria. 12. Escribir un programa que divida el dato almacenado en las dirección 30H por el que está en la dirección 31H. Almacene el resultado en las siguientes posiciones de memoria. 13. En 3 posiciones consecutivas de memoria RAM están almacenados 3 datos. Guardar el mayor de ellos en la siguiente posición de memoria libre. 14. Realizar un programa que tome un dato de la posición de memoria 40H, lo convierta a BCD y lo almacene en las tres posiciones anteriores de manera que las unidades queden en la dir 3FH.. 15. Realizar un programa cuya función sea demorar 1, 10 o 100 mseg. 16. Realice un programa que incremente un contador BCD de 0 a 100. Le cuenta se debe incrementar cada 1 ms y el estado actual del contador se debe almacenar en las direcciones 20H, 21H y 22H. El programa debe utilizar dos subrutinas: Retardo y BIN-BCD. 17. Escribir un programa que calcule el máximo de un bloque de 40 datos ubicados a partir de la dirección 30H. 18. Ordenar de mayor a menor un bloque de 40 datos ubicados a partir de la dirección 30H. 19. Realizar un programa que copie los datos de una tabla de 10 datos que reside en la memoria de código, a una zona de RAM ubicada a partir de la dirección 30H. Utilice las directivas DB y DS. 20. Realizar un programa que transfiera 30 datos ubicados en memoria de código hacia la posición 38H en delante de memoria RAM, con un intervalo de 100 mseg. entre dato y dato. 21. Realizar una programa que convierta a BCD números binarios de 8 bits, no mayores que 255, y que se encuentran almacenados en posiciones de memoria sucesivas a partir de la dirección 30H. Almacene los 3 dígitos BCD en 2 posiciones de memoria sucesivas a partir de la dirección 31H. 22. Realizar un programa que sume o reste números positivos de 32 bits de magnitud según sea R3=FFh (suma) y si R2=00 (resta). Si el resultado es negativo, colocar R4=FFh.Bibliografía Keil Software. “Macro Assembler and Utilities Macro Assembler, Linker/Locator, Library Manager, and Object-HEX Converterfor 8051, Extended 8051, and 251 Microcontrollers” User’s Guide2.2001 Odant B. “Microcontroladores 8051 y 8052” Ed- Paraninfo.1995 Philips Semiconductor – P89LPC933/ 934/ 935/ 936 User Manual José Matas Alcalá y Rafael Ramón Ramos Lara. Microcontroladores MCS-51 y MCS-251. Kenneth L. Short. Microprocesadores y lógica programada. José Angulo. Microprocesadores. Curso sobre aplicaciones en sistemas industriales. Guía 1 6 de 6

×