Ver/Abrir - sistema integral académico curn

Anuncio
SOFTWARE COMPILADOR EN LENGUAJE DE ALTO NIVEL QUE GENERA
CÓDIGO ENSAMBLADOR PARA LA IMPLEMENTACIÓN EN
MICROCONTROLADORES PIC 16X
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMÁS
CARTAGENA DE INDIAS D.T. Y C., JUNIO DE 2005
SOFTWARE COMPILADOR EN LENGUAJE DE ALTO NIVEL QUE GENERA
CÓDIGO ENSAMBLADOR PARA LA IMPLEMENTACIÓN EN
MICROCONTROLADORES PIC 16X
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
MONOGRAFÍA PARA OPTAR AL TÍTULO DE INGENIERO DE SISTEMÁS
DIRECTOR
LUIS FERNANDO MURRILLO
INGENIERO ELECTRICISTA
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMÁS
CARTAGENA DE INDIAS D.T. Y C., JUNIO DE 2005
Dedico este proyecto a mis padres por brindarme su apoyo incondicional, a Adriana
Marimón por su compresión y apoyo en todos los momentos difíciles, y ante todo a
nuestro Dios Todopoderoso por darme la sabiduría necesaria para salir adelante. A
nuestro director Luis Murillo por su paciencia y dedicación con nosotros, a Maria
Claudia Bonfante y Justo Sarabia por su orientación
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
Dedico este proyecto primero que todo a Dios todopoderoso por ser la fuente de
sabiduría y conocimientos, a mis padres Engelberto Meza y Maribel Caraballo por su
ayuda incondicional y esmero brindado para verme realizado como Ingeniero de
Sistemás, a mis hermanos Enilsa y Fredys Meza y además a mi novia Sandra Arroyo
Guerrero quienes me han motivado para poder lograr la culminación de este proyecto.
Gracias, muchísimás gracias le doy a mi Dios todopoderoso y a todas las personas que
me colaboraron en la obtención de esta meta propuesta en mi vida.
JAVIER MEZA CARABALLO
AGRADECIMIENTOS
Los autores expresan sus agradecimientos a:
Dios todopoderoso, quien nos brindo la fuente de conocimientos y sabiduría necesaria
para salir adelante con este proyecto de grado.
Luis Fernando Murillo, Ingeniero de Electricista y Director de esta Tesis, por su esmero
y dedicación para la finalización del proyecto, además por su valiosa orientación y
motivación constante.
Nuestro amigo e Ingeniero de Sistemás, Justo Sarabia, por su ayuda constante y asesoría
metodológica para poder concluir con este proyecto de forma adecuada.
Maria Claudia Bonfante, Ingeniera de Sistemás, por su motivación para que saliéramos
adelante y no desvaneciéramos en el camino y poder culminar este proyecto.
A nuestros padres por el apoyo brindado en los momentos difíciles y sus reconfortantes
esfuerzos para que no nos desvaneciéramos en este propósito de nuestras vidas.
En general a todas las personas que nos colaboraron y apoyaron en la realización de este
proyecto de grado.
¡Muchas Gracias a Todos!
NOTA DE ACEPTACIÓN
_________________________
_________________________
_________________________
_________________________
_________________________
_______________________________
JURADO
_______________________________
JURADO
_______________________________
PRESIDENTE DEL JURADO
CARTAGENA, D.T. Y C, JUNIO DE 2005
GLOSARIO
ALGORITMO: Es un conjunto finito de instrucciones o pasos que sirven para ejecutar
una tarea o resolver un problema. La palabra algoritmo deriva del nombre del
matemático árabe Al-Khwarizmi, que vivió entre los siglos VII y VIII.
ARCHIVOS PLANOS: Los archivos de texto son aquellos que están compuestos
únicamente por texto sin formato, sólo caracteres. Estos caracteres se pueden codificar
de distintos modos dependiendo de la lengua usada. Algunos de los sistemás de
codificación más usados son: ASCII, ISO-8859-1 o Latín-1, Unicode, etc.
Se les conoce también como archivos de texto plano por carecer de información
destinada a generar formatos y tipos de letra (por ejemplo, tipo de letra: Arial, Courier,
Times New Roman; formato: negritas, subrayado, cursivas; tamaño, etc.).
AUTÓMATA: Es un sistema secuencial. Un autómata finito o máquina de estado finito
es un modelo matemático de un sistema que recibe una cadena constituida por símbolos
de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.
BIT (DÍGITO BINARIO): Acrónimo de Binary Digit (dígito binario), que adquiere el
valor 1 o 0 en el sistema numérico binario. En el procesamiento y almacenamiento
informático un bit es la unidad de información más pequeña manipulada por el
computador, y está representada físicamente por un elemento como un único pulso
enviado a través de un circuito, o bien como un pequeño punto en un disco magnético
capaz de almacenar un 0 o un 1.
BYTE: Unidad de información que consta de 8 bits; en procesamiento informático y
almacenamiento, el equivalente a un único carácter, como puede ser una letra, un
número o un signo de puntuación. Como el byte representa sólo una pequeña cantidad de
información, la cantidad de memoria y de almacenamiento de una máquina suele
indicarse en kilobytes (1.024 bytes), en megabytes (1.048.576 bytes) o en gigabytes
(1.024 megabytes).
CÓDIGO FUENTE: Programa en su forma original, tal y como fue escrito por el
programador, el código fuente no es ejecutable directamente por el computador, debe
convertirse en lenguaje de máquina mediante compiladores, ensambladores o intérpretes.
CÓDIGO MÁQUINA: Es aquel con el que trabaja el microprocesador; para reaccionar
y efectuar la operación que se desea, necesita de una secuencia de señales eléctricas
almacenadas como "unos" y "ceros" en las posiciones de la memoria. Una y sólo una
secuencia de señales concreta, realiza una determinada operación.
COMPILADOR: Programa de computadora que produce un programa en lenguaje de
máquina, de un programa fuente que generalmente esta escrito por el programador en un
lenguaje de alto nivel.
CONSTANTE: Valor o conjunto de caracteres que permanecen invariables durante la
ejecución de un programa, es decir, que no cambia su valor en dicha ejecución.
DIAGRAMA DE FLUJO: Es la representación gráfica de una secuencia de
instrucciones de un programa que ejecuta un computador para obtener un resultado
determinado.
EDITOR: Es un programa de computadora empleado para crear y manipular archivos
de texto existentes, tales como programas codificados en lenguajes fuentes, listas de
nombres y direcciones.
FUNCIÓN: En programación, una rutina que hace una tarea particular. Cuando el
programa pasa el control a una función, ésta realiza la tarea y devuelve el control a la
instrucción siguiente a la que llamo.
INSTRUCCIÓN O SENTENCIA: Conjunto de caracteres que se utilizan para dirigir
un sistema de procesamiento de datos en la ejecución de una operación.
INTERFAZ: Una conexión e interacción entre hardware, software y usuario, es decir, la
plataforma o el medio que permite la comunicación entre el usuario y los diferentes
programas.
INTÉRPRETE: Dispositivo o programa que recibe una por una las sentencias de un
programa fuente, la analiza y la convierte en lenguaje de máquina si no hay errores en
ella. También se puede producir el listado de las instrucciones del programa.
LENGUAJE DE ALTO NIVEL: Son lenguajes de programación como Basic, Pascal,
Ada, etc., ya que no están en contacto directo con la computadora, por lo que el
programador no necesita saber nada respecto a las operaciones a nivel de máquina del
sistema, tienen una ejecución más lenta y requieren más memoria.
LENGUAJE ENSAMBLADOR: Tipo de lenguaje de programación en que el conjunto
de instrucciones del microprocesador se representa por mnemónicos, en vez de dígitos
binarios o hexadecimales.
LENGUAJE MÁQUINA: Es una colección de instrucciones muy detalladas y crípticas
que controlan la circuiteria interna de la máquina.
LEXEMÁS: Relativo a tokens.
MICROCONTROLADOR: Un microcontrolador es un circuito integrado que incluye
todos (o casi) los componentes necesarios para tener un sistema de control completo.
PROGRAMA: Es una colección de instrucciones que indican a la computadora que
debe hacer. Un programa se denomina software, por lo tanto, programa, software e
instrucción son sinónimos.
PROGRAMA FUENTE: Instrucción escrita por el programador en un lenguaje de
programación para plantear al computador el proceso que debe ejecutar.
PROGRAMA ENSAMBLADOR: Es un programa de computador preparado por un
programador que toma las instrucciones que no estén en lenguaje de máquina y las
convierte en una forma que puede ser usada por el computador.
REGISTRO: Es un grupo de campos relacionados entre sí que se usan para almacenar
datos e información.
RUTINA: Es el conjunto de instrucciones dentro del mismo programa, que se puede
llamar a ejecución desde diferentes partes del mismo programa.
TOKENS: Hace alusión a las unidades más simples que tiene significado.
Habitualmente un token o lexema queda descrito por una expresión regular.
VARIABLE: En programación es una estructura que contiene datos y recibe un nombre
único dado por el programador, mantiene los datos asignados a ella hasta que un nuevo
valor se le asigne o hasta que el programa termine.
LISTA DE FIGURAS
Pág.
Figura No. 1.1: Fases de un procesador de lenguaje ...................................................... 18
Figura No. 1.2: Reconocimiento de lexema ................................................................... 19
Figura No. 2.1: Pantalla de entrada datos del primer ciclo ............................................ 25
Figura No. 2.2: Formulario de lexemas y variables ....................................................... 26
Figura No. 2.3: Pantalla de entrada datos del segundo ciclo .......................................... 28
Figura No. 2.4: Caja de visualización de errores ............................................................ 28
Figura No. 2.5: Salida generada por el sistema .............................................................. 31
Figura No. 5.1: Código fuente de la evaluación No. 1. Prueba1.pic .............................. 65
Figura No. 5.2: Código ensamblador de la evaluación No. 1. Prueba1.asm .................. 67
Figura No. 5.3: Código fuente de la evaluación No. 2. Prueba2.pic .............................. 68
Figura No. 5.4: Código fuente de la evaluación No. 3. Prueba3.pic .............................. 69
Figura No. 5.5: Código ensamblador de la evaluación No. 3. Prueba3.asm .................. 70
Figura No. 5.6: Código fuente de la evaluación No. 4. Prueba4.pic .............................. 71
Figura No. 5.7: Código fuente de la evaluación No. 5. Prueba5.pic .............................. 72
Figura No. 5.8: Código fuente de la evaluación No. 6. Prueba6.pic .............................. 73
Figura No. 5.9: Código ensamblador de la evaluación No. 6. Prueba6.asm .................. 75
Figura No. 5.10: Código fuente de la evaluación No. 7. Prueba7.pic …………..…….. 76
Figura No. 5.11: Código fuente de la evaluación No. 8. Prueba8.pic ……………..….. 77
Figura No. 5.12: Código ensamblador de la evaluación No. 8. Prueba8.asm ..……….. 79
Figura No. 5.13: Mensaje de salida en MPLAB mostrando compilación satisfactoria . 80
Figura No. 6.1: Autómata de números decimales y hexadecimales ............................... 81
Figura No. 6.2: Autómata de identificadores ................................................................. 82
Figura No. 6.3: Autómata de operadores lógicos ........................................................... 82
Figura No. 6.4: Autómata que evalúa una condición ..................................................... 83
Figura No. 6.5: Autómata de etiquetas ........................................................................... 83
Figura No. 6.6: Autómata de cadena de caracteres ........................................................ 84
Figura No. 6.7: Autómata que valida los comentarios ................................................... 84
Figura No. 6.8: Autómata instrucción branch ................................................................ 85
Figura No. 6.9: Autómata instrucción count .................................................................. 86
Figura No. 6.10: Autómata instrucción debug ............................................................... 87
Figura No. 6.11: Autómata instrucción end ................................................................... 87
Figura No. 6.12: Autómata instrucción exit ................................................................... 88
Figura No. 6.13: Autómata del cic lo for...next ............................................................... 89
Figura No. 6.14: Autómata instrucción gosub ................................................................ 90
Figura No. 6.15: Autómata instrucción goto .................................................................. 90
Figura No. 6.16: Autómata instrucción high .................................................................. 91
Figura No. 6.17: Autómata del condicional if…then…elseif…endif ............................ 92
Figura No. 6.18: Autómata instrucción input ................................................................. 93
Figura No. 6.19: Autómata instrucción low ................................................................... 93
Figura No. 6.20: Autómata instrucción output ............................................................... 94
Figura No. 6.21: Autómata instrucción pause ................................................................ 94
Figura No. 6.22: Autómata instrucción random ............................................................. 95
Figura No. 6.23: Autómata instrucción read .................................................................. 96
Figura No. 6.24: Autómata instrucción return ................................................................ 96
Figura No. 6.25: Autómata instrucción sleep ................................................................. 97
Figura No. 6.26: Autómata instrucción write ................................................................. 97
Figura No. 6.27: Pseudocódigo de instrucciones que comienzan con la letra G ............ 99
Figura No. 6.28: Pseudocódigo de instrucciones que comienzan con la letra R .......... 101
LISTA DE TABLAS
Pág.
Tabla No. 1: Proceso de abstracción de datos ................................................................ 39
Tabla No. 2: Especificación del proceso MicroPic versión 1.0 ..................................... 40
Tabla No. 3: Especificación del proceso análisis léxico ................................................ 41
Tabla No. 4: Especificación del proceso análisis sintáctico ........................................... 42
Tabla No. 5: Especificación del proceso análisis semántico .......................................... 43
Tabla No. 6: Especificación del proceso generador de código ensamblador ................. 44
Tabla No. 7: Almacén de abstracción de datos .............................................................. 44
Tabla No. 8: Especificación almacén de MicroPic versión 1.0 ..................................... 45
Tabla No. 9: Especificación almacén de análisis léxico ................................................ 45
Tabla No. 10: Especificación almacén de análisis sintáctico ........................................ 46
Tabla No. 11: Especificación almacén análisis semántico ............................................ 46
Tabla No. 12: Interfaz de abstracción de datos .............................................................. 47
Tabla No. 13: Especificación de Interfaz de MicroPic Versión 1.0 .............................. 47
Tabla No. 14: Flujos de datos de abstracción de datos .................................................. 49
Tabla No. 15: Especificación de flujos de datos de MicroPic versión 1.0 .................... 51
Tabla No. 16: Especificación de flujos de datos de análisis léxico ............................... 52
Tabla No. 17: Especificación de flujos de datos de análisis sintáctico ......................... 53
Tabla No. 18: Especificación de flujos de datos de análisis semántico ........................ 53
Tabla No. 19: Especificación de flujos de datos de generador de código ensamblador 54
Tabla No. 20: Componentes léxicos, lexemas y patrones ............................................. 60
Tabla No. 21: Palabras reservadas con su descripción .................................................. 63
LISTA DE DIAGRAMÁS
Pág.
Diagrama 1: Nivel 0 general de abstracción general de datos ........................................ 33
Diagrama 2: Nivel 1 especificación del proceso MicroPic versión 1.0 ......................... 34
Diagrama 3: Nivel 2 especificación del proceso análisis léxico .................................... 35
Diagrama 4: Nivel 3 especificación del proceso análisis sintáctico ............................... 36
Diagrama 5: Nivel 4 especificación del proceso análisis semántico .............................. 37
Diagrama 6: Nivel 5 especificación del proceso generador de código ensamblador ..... 38
Diagrama 7: Autómata de instrucciones que comienzan con la letra G ......................... 98
Diagrama 8: Autómata de instrucciones que comienzan con la letra R ....................... 100
LISTA DE ANEXOS
Pág.
Anexo A: Manual de Usuario de MicroPic Versión 1.0 .............................................. 105
Anexo B: Manual de Sistema de MicroPic Versión 1.0 .............................................. 131
Anexo C: Juego de Instrucciones ................................................................................ 158
Anexo D: Autómatas, Pseudocódigos y Diagramas de Flujos de las Instrucciones en
Ensamblador ............................................................................................... 189
TABLA DE CONTENIDO
Pág.
INTRODUCCIÓN
EL PROBLEMA Y OBJETIVOS DE LA INVESTIGACIÓN ....................................... 2
ANTECEDENTES DEL PROBLEMA ........................................................................... 2
PLANTEAMIENTO DEL PROBLEMA ......................................................................... 3
JUSTIFICACIÓN DEL PROBLEMA ............................................................................. 4
OBJETIVOS DE LA INVESTIGACIÓN ........................................................................ 5
Objetivo General .............................................................................................................. 5
Objetivos Específicos ........................................................................................................ 5
METAS DE LA INVESTIGACIÓN ................................................................................ 6
PRODUCTO DE LA INVESTIGACIÓN ........................................................................ 6
ESTRATEGIAS METODOLÓGICAS ............................................................................ 7
CLASE O MODALIDAD DE LA INVESTIGACIÓN ................................................... 7
MARCO TEÓRICO ......................................................................................................... 7
MARCO CONCEPTUAL ................................................................................................ 8
1. COMPILADOR MICROPIC ................................................................................... 13
1.1 DEFINICIÓN ......................................................................................................... 13
1.2 RESEÑA HISTÓRICA .......................................................................................... 13
1.3 COMPILADOR VS INTÉRPRETE ...................................................................... 14
1.3.1 Ventajas de Compilar Frente a Interpretar .......................................................... 14
1.3.2 Ventajas del Intérprete Frente al Compilador ..................................................... 14
1.4 CLASIFICACIÓN DE COMPILADORES ........................................................... 14
1.5 FUNCIONES DE UN COMPILADOR ................................................................. 15
1.6 PARTES EN LA QUE TRABAJA UN COMPILADOR ...................................... 16
1.6.1 Fase de Análisis ................................................................................................... 17
1.6.1.1 Funciones del Analizador Léxico ..................................................................... 20
1.6.2 Fase de Síntesis .................................................................................................... 22
2. ANÁLISIS, DISEÑO Y DESARROLLO DE SOFTWARE MICROPIC ............... 23
2.1 REQUERIMIENTOS ............................................................................................. 23
2.2 MODELO DE DESARROLLO DEL SOFTWARE .............................................. 23
2.2.1 Etapas del Modelo del Prototipo ........................................................................... 24
2.3 ESPECIFICACIÓN DE REQUERIMIENTOS ..................................................... 32
2.4 DISEÑOS DE PROCESOS .................................................................................... 33
2.4.1 Nivel 0 ................................................................................................................. 33
2.4.2 Nivel 1 ................................................................................................................. 34
2.4.3 Nivel 2 ................................................................................................................. 35
2.4.4 Nivel 3 ................................................................................................................. 36
2.4.5 Nivel 4 ................................................................................................................. 37
2.4.6 Nivel 5 ................................................................................................................. 38
2.5 DICCIONARIO DE DATOS ................................................................................. 39
2.5.1 Procesos ............................................................................................................... 39
2.5.2 Almacén de Datos ................................................................................................ 44
2.5.3 Interfaz ................................................................................................................. 46
2.5.4 Flujos de Datos .................................................................................................... 48
3. REQUERIMIENTOS GENERALES DE MICROPIC ............................................ 55
3.1 EVOLUTIVIDAD Y FLEXIBILIDAD ................................................................. 55
3.2 MANTENIBILIDAD Y REPARABILIDAD ........................................................ 56
3.3 AMIGABILIDAD .................................................................................................. 56
3.4 PORTABILIDAD ................................................................................................... 57
3.5 BONDAD ............................................................................................................... 58
4. COMPONENTES LÉXICOS E INSTRUCCIONES MICROPIC .......................... 59
4.1 COMPONENTES LÉXICOS ................................................................................. 59
4.2 INSTRUCCIONES ................................................................................................. 60
5. EVALUACIÓN DEL SISTEMA MICROPIC V 1.0 ............................................... 64
5.1 EVALUACIÓN No. 1 ............................................................................................ 65
5.2 EVALUACIÓN No. 2 ............................................................................................ 67
5.3 EVALUACIÓN No. 3 ............................................................................................ 69
5.4 EVALUACIÓN No. 4 ............................................................................................ 70
5.5 EVALUACIÓN No. 5 ............................................................................................ 72
5.6 EVALUACIÓN No. 6 ............................................................................................ 73
5.7 EVALUACIÓN No. 7 ............................................................................................ 76
5.7 EVALUACIÓN No. 8 ............................................................................................ 77
6. AUTÓMATAS FORMATOS Y SINTAXIS DE PROGRAMACIÓN ………....... 81
6.1. AUTÓMATA PARA NÚMEROS …….…………………………..……………. 81
6.2. AUTÓMATA PARA IDENTIFICADOR …………………………………...….. 81
6.3. AUTÓMATA PARA OPERADORES RELACIONALES ………......……….... 82
6.4. AUTÓMATA PARA CONDICIÓN ……………………………...…………….. 83
6.5. AUTÓMATA PARA ETIQUETA ……………………………………..……….. 83
6.6. AUTÓMATA PARA CADENA DE CARACTERES ……………………….…. 83
6.7. AUTÓMATA PARA ESPACIOS EN BLANCO ……………………...……….. 84
6.8. FUNCIÓN BRANCH …...…………...…………...….………...………...…....… 85
6.9. FUNCIÓN COUNT …...…………...…………...…………...……………...…… 85
6.10. FUNCIÓN DEBUG …...…………...…………...…………...………….....…… 86
6.11. FUNCIÓN END ………………...………..……………………………..…....... 87
6.12. FUNCIÓN EXIT …………………………………………………………...….. 88
6.13. FUNCIÓN FOR…NEXT ……………..…………………….………….…...…. 88
6.14. FUNCIÓN GOSUB …...…………...…………...…………...…………...…..… 89
6.15. FUNCIÓN GOTO …...…………...…..……...…………...…………...……..… 90
6.16. FUNCIÓN HIGH …...…………...………...…………...…………......……..… 90
6.17. FUNCIÓN IF…THEN…ELSEIE…ENDIF ………..…………………...…..… 91
6.18. FUNCIÓN INPUT …...…………...…………...…………...…………...…….... 92
6.19. FUNCIÓN LOW …...…………...…………...…………...…………...…...…... 93
6.20. FUNCIÓN OUTPUT …...…………...…………...…………...………….......… 93
6.21. FUNCIÓN PAUSE …...…………...…………...…………...…………...…...… 94
6.22. FUNCIÓN RANDOM …...…………...…………...…………...………….....… 95
6.23. FUNCIÓN READ …...…………...…………...…………...………….....…..… 95
6.24. FUNCIÓN RETURN………………...……………….………………….....….. 96
6.25. FUNCIÓN SLEEP ………...…….……...…………...…………...…………...... 96
6.26. FUNCIÓN WRITE …...…………...…………...…………...…………....…..… 97
6.27. AUTÓMATA Y PSEUDOCÓDIGO QUE PERMITE EVALUAR LAS
INSTRUCCIONES (GOSUB, GOTO)…...….………...…………...…...…..… 98
6.28 AUTÓMATA Y PSEUDOCÓDIGO QUE PERMITE EVALUAR LAS
INSTRUCCIONES (RANDOM, READ, RETURN)…...…….……...……… 100
RECOMENDACIONES............................................................................................... 102
CONCLUSIONES......................................................................................................... 103
BIBLIOGRAFÍA........................................................................................................... 104
INTRODUCCIÓN
Los microcontroladores hoy en día están conquistando el mundo, los encontramos
presentes en nuestro trabajo, en nuestra casa y en nuestra vida, en general, se pueden
encontrar controlando el funcionamiento de los ratones y teclados de los computadores,
en los teléfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la
invasión acaba de comenzar y el nacimiento del siglo XXI será testigo de la conquista
masiva de estos diminutos computadores, que gobernarán la mayor parte de los aparatos
que se fabrican actualmente y que usamos los humanos.
En este proyecto se pretende desarrollar un Compilador de Lenguaje de Programación
de Alto Nivel que Genera Código Ensamblador para la Implementación de un
Microcontrolador PIC de la Familia 16, brindado así la posibilidad a la comunidad
académica e industrial de disponer de esta herramienta a un bajo costo. De igual forma
haciéndonos participes a la solución del problema del poco desarrollo e implementación
de este tipo de herramientas en nuestro país.
EL PROBLEMA Y OBJETIVOS DE LA INVESTIGACIÓN
ANTECEDENTES DEL PROBLEMA
En el mundo se destacan programas compiladores para microcontroladores PIC como
Basic Stamp, el cual tiene sus antecedentes desde 1979, su creador Chip Gracey tuvo sus
primeras experiencias en programación en las computadoras Apple II. Su entusiasmo en
el Basic de Apple fue tal que fue más allá de los experimentos normales pasando a
ensayar con interfases a circuitos de electrónica.
El Basic Stamp BS2-IC, El BS2-IC se encuentra en una presentación de tableta de
ensamble de 24 pines, igual a un circuito integrado Dual-In- line, en la cual la tableta de
ensamble esta presente en configuración de 40 pines. 1
El Compilador PicBasic Pro (PBP) produce código que puede ser programado para una
variedad de microcontroladores PIC que tengan de 8 a 68 pins y varias opciones en el
chip incluyendo convertidores A/D, temporizadores y puertos seriales.
Hay algunos micros PIC que no trabajaran con el PBP, por ejemplo las series PIC
16C5X incluyendo el PIC 16C54 Y PIC 15C58. Estos micro PIC están basados en el
viejo núcleo de 12 bit en lugar del núcleo más corriente de 14 bit. El PBP necesita
alguna de las opciones que solamente están disponibles con el núcleo de 14 bit como el
stack (pila) de 8 niveles.
1
http://www.todopic.com.ar/pbp_sp.html#LOS_MICROS
2
Para propósitos generales de desarrollo usando el PBP, el PIC16F84 o PIC16C84 es la
elección común de micro PIC. Este microcontrolador de 18 pin usa tecnología flash para
el PIC16F84 y EEPROM para PIC16C84, para permitir un rápido borrado y
reprogramación para acelerar la depuración de programas. Con el clic de un mouse en el
software, el PIC16F84 puede ser borrado instantáneamente y luego ser reprogramado
una y otra vez.
El PIC16F84 y PIC16C84 además, contiene 64 bytes de memoria de datos no volátil que
puede ser usada para archivar los datos de programa y otros parámetros, aun cuando no
haya energía. A ésta área de datos, se puede acceder simplemente usando las órdenes
“Read” y “Write” del PBP. (El código programa es permanent emente guardado en el
espacio de código del micro PIC, tanto si hay o no energía). 2
PLANTEAMIENTO DEL PROBLEMA
En los últimos años los microcontroladores han tenido una gran aceptación y han sido
adoptados en una gran variedad de aplicaciones de control. La mayoría de los
electrodomésticos están implementados a partir microcontroladores. A pesar de esto, en
nuestro país no existe un software compilador en lenguajes de alto nivel para el
microcontrolador PIC que sea económico, flexible y de entorno muy amigable.
Cada vez existen más productos que incorporan un microcontrolador con el fin de
aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su
fiabilidad y disminuir el consumo. Los microcontroladores están siendo empleados en
multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, hornos
2
http://www.todopic.com.ar/pbp_sp.html#LOS_MICROS
3
microondas, frigoríficos, televisores, computadoras, impresoras, módems, el sistema de
arranque de automóviles, etc. Y otras aplicaciones con las que seguramente no
estaremos tan familiarizados como instrumentación electrónica, control de sistemas en
una nave espacial, etc. Una aplicación típica podría emplear varios microcontroladores
para controlar pequeñas partes del sistema. Estos pequeños controladores podrían
comunicarse entre ellos y con un procesador central, probablemente más potente, para
compartir la información y coordinar sus acciones, como de hecho, ocurre ya
habitualmente en cualquier PC.
JUSTIFICACIÓN DEL PROBLEMA
Hoy en día la oportunidad de adquirir un compilador para la implementación de un
microcontrolador PIC Familia 16 se hace costosa para el usuario promedio, dado que los
precios que se manejan en el mercado actual son demasiado altos. Por ejemplo, una
empresa industrial, centro de investigación o educación, que requiera de la
implementación de un compilador para un microcontrolador PIC debería pagar alrededor
de 200 Euros para una familia determinada de microprocesadores como la familia 16;
pero dado que más adelante se haga necesario la utilización de un microcontrolador el
cual no pertenezca a la familia de microprocesadores anteriormente adquirida, tendría
que cancelar nuevamente 200 Euros lo cual corresponde al valor de la nueva licencia.
En el mercado se encuentra una gran variedad de traductores que generan código
ensamblador para implementar un microcontroladores PIC 16, pero con precios muy
elevados, por ende se hace necesario que los Ingenieros de Sistemas participen de
manera activa en la creación e implementación de nuevos Programas Compiladores para
Microcontroladores con la finalidad de reducir los costos, dado que para nuestro país se
4
hace muy difícil invertir en sistemas de manejo de microcontroladores, debido que no se
posee una buena infraestructura económica.
OBJETIVOS DE LA INVESTIGACIÓN
Objetivo General:
Diseñar e implementar un compilador en lenguaje de programación de alto nivel que
permita generar código ensamblador para la implementación en microcontroladores PIC
de la familia 16.
Objetivos Específicos:
•
Llevar a cabo una investigación sobre el lenguaje ensamblador y máquina de los
microcontroladores PIC.
•
Investigar sobre los compiladores existentes.
•
Seleccionar la mejor herramienta de programación para el desarrollo del
software.
•
Diseñar el software.
•
Implementar y poner en marcha el software compilador de lenguaje de alto nivel.
5
METAS DE LA INVESTIGACIÓN
Basados en los conocimientos adquiridos como estudiante durante el desarrollo de la
carrera de Ingeniería de Sistemas, y las investigaciones realizadas ayudarán a la
consecución del objetivo general de esta investigación. De tal manera que sea un
verdadero soporte, como medio de consulta, para futuras investigaciones en el tema.
PRODUCTO DE LA INVESTIGACIÓN
Al término del desarrollo del proyecto se entregarán los resultados esperados los cuales
estarán conformados de la siguiente manera:
•
Software compilador de lenguaje de alto nivel para implementación un
microcontrolador de la familia PIC 16.
•
Manual de usuario.
•
Manual de sistemas.
•
CD-ROM el cual contendrá la documentación escrita y el software.
6
ESTRATEGIAS METODOLÓGICAS
CLASE O MODALIDAD DE LA INVESTIGACIÓN
La modalidad de investigación esta centrada en la Investigación Tecnológica Aplicada,
teniendo en cuenta que realizaremos énfasis en Ingenie ría de software.
MARCO TEÓRICO
Un microcontrolador es un circuito integrado de alta escala de integración que incorpora
la mayor parte de los elementos que configuran un controlador.
Un microcontrolador dispone normalmente de los siguientes componentes:
•
Procesador o UCP (Unidad Central de Proceso).
•
Memoria RAM para Contener los datos.
•
Memoria para el programa tipo ROM / PROM / EEPROM.
•
Líneas de E / S para comunicarse con el exterior.
•
Diversos módulos para el control de periféricos (Temporizadores, Puertas Serie y
Paralelo, CAD: Conversores Analógico / Digital, CDA: Conversores Digital /
Analógico, etc.).
•
Generador de impulsos de reloj que sincronizan el funcionamiento de todo el
sistema.
El microcontrolador es en definitiva un circuito integrado que incluye todos los
componentes de un computador. Debido a su reducido tamaño es posible montar el
7
controlador en el propio dispositivo al que gobierna. En este caso el controlador recibe el
nombre de controlador empotrado (embedded controller).
En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de los
microcontroladores actuales se fabrican con tecnología CMOS 4 (Complementary Metal
Oxide Semiconductor). Esta tecnología supera a las técnicas anteriores por su bajo
consumo y alta inmunidad al ruido.
El MPLAB es un software que junto con un emulador y un programador de los múltiples
que existen en el mercado, forman un conjunto de herramientas de desarrollo muy
completo para el trabajo y/o el diseño con los microcontroladores PIC desarrollados y
fabricados por la empresa Arizona Microchip Technology (AMT).
El MPLAB incorpora todas las utilidades necesarias para la realización de cualquier
proyecto y, para los que no dispongan de un emulador, este programa permite editar el
archivo fuente en lenguaje ensamblador, además de ensamblarlo y simularlo en pantalla,
pudiendo ejecutarlo posteriormente en modo paso a paso y ver como evolucionarían de
forma real tanto sus registros internos, la memoria RAM y/o EEPROM de usuario como
la memoria de programa, según se fueran ejecutando las instrucciones. Además el
entorno que se utiliza es el mismo que si se estuviera utilizando un emulador. 3
MARCO CONCEPTUAL
•
PIC
(Microchip):
Los
microcontroladores
PIC
fueron
los
primeros
microcontroladores RISC, RISC generalmente implica que la simplicidad de diseño
3
www.solaris -digital.com/imagenes/mplab%20capitulo1.pdf
8
permite añadir más características a bajo precio y la línea PIC no es una excepción.
Aunque tiene pocas instrucciones (33 instrucciones el 16C5X mientras que el Intel
8048 tiene más de 90), la línea PIC tiene las características siguientes:
1. Buses de instrucciones y datos separados (arquitectura Harvard) lo que permite
el acceso simultáneo a las instrucciones y a los datos, y el solapamiento de
algunas operaciones para incrementar las prestaciones de proceso.
2. El beneficio de su diseño tan sencillo es que:
•
a.
El chip es pequeño.
b.
Pocas pastillas.
c.
Muy bajo consumo.
Microcontrolador: Un microcontrolador es un circuito integrado que incluye todos
(o casi) los componentes necesarios para tener un sistema de control completo. Los
microcontroladores incluyen típicamente: CPU, RAM, EEPROM / PROM / ROM,
I/O (input / output) serie y paralelo, Temporizadores / contadores, Sistema de
interrupciones. Los modelos más potentes incluyen además, Sistemas auxiliares (A /
D, D / A, dsp.).
Entre sus aplicaciones podemos mencionar:
Los microcontroladores frecuentemente se encuentran en:
− Aparatos
Electrodomésticos:
Microondas,
Hornos,
Frigoríficos,
Televisores, Vídeos, Equipos de sonido.
− Equipos Informáticos: Impresoras, Copiadoras láser, Módems, Unidades
de disco.
9
− Automóviles: Mando de sistemas del automóvil (ABS, Inyección,
Encendido.), Diagnósticos, Climatizador.
− Mando medioambiental: Invernadero, Fábrica, Casa.
•
Lenguaje de Alto Nivel: Son lenguajes de programación como Basic, Pascal, Ada,
etc. ya que no están en contacto directo con la computadora, por lo que el
programador no necesita saber nada respecto a las operaciones en el ámbito de
máquina del sistema. Una instrucción sencilla en un lenguaje de alto nivel podría
necesitar una página de instrucciones en lenguaje ensamblador para realizarse, pero
el programador del lenguaje de alto nivel no requiere conocer esto. Los lenguajes de
alto nivel son mucho más fáciles de usar que los lenguajes ensamblador y de
máquina; pero en general, tienen una ejecución más lenta y requieren más memoria.
La mayoría de los lenguajes de alto nivel son lenguajes de propósito general como
Pascal, Cobol, etc., pero hay también lenguajes de propósito especial, sus
instrucciones están diseñadas especialmente para algún tipo particular de aplicación
como por ejemplo: GPSS y CSMP, que son lenguajes orientados a la simulación. El
uso de un lenguaje de alto nivel ofrece tres ventajas importantes respecto al lenguaje
máquina; llamadas sencillez, uniformidad y portabilidad (independencia de la
máquina).
•
La Instrumentación y Sistemas Aerospaciales: Los microcontroladores se usan
típicamente donde la potencia de procesamiento no es importante, aunque alguien
podría encontrar atractiva la idea de controlar un horno microonda con un sistema
Unix.
10
Los sistemas basados en microprocesador y los microcontroladores se usan
extensivamente en robótica. En esta aplicación, muchas tareas específicas podrían estar
distribuidas entre un gran número de controladores dentro de un sistema. Estos
pequeños controladores pueden estar comunicados con un procesador central (o micro /
mini / mainframe), este habilitaría la información para ser procesado por la
computadora central, o para ser pasado a otros cont roladores en el sistema.
Una aplicación especial de los microcontroladores es la captura de datos: Temperatura,
humedad, lluvia, etc.
El tamaño de los microcontroladores es pequeño y consumen muy poco, esto los hace
ideales para sistemas portátiles y autónomos.
•
Lenguaje Ensamblador: El lenguaje máquina es la representación del programa tal
como la entiende el microcontrolador.
El lenguaje ensamblador es una representación alfanumérica del lenguaje máquina,
lo que facilita su lectura. Cada instrucción en lenguaje ensamblador corresponde a
una instrucción en código máquina (sin tener en cuenta macros ni directivas).
Un programa en lenguaje ensamblador es rápido y corto. Esto es porque el
programador genera el código más óptimo posible, el programador se adapta al
microcontrolador.
•
Lenguaje Máquina: Es una colección de instrucciones muy detalladas y crípticas
que controlan la circuiteria interna de la máquina. Muy pocos programas se escriben
actualmente en lenguaje máquina por dos razones importantes:
11
Primero, por que el lenguaje máquina es muy incomodo para trabajar, y Segundo,
por que la mayoría de las máquinas tienen sus repertorios de instrucciones propios.
Así un programa escrito en lenguaje máquina para una computadora no puede ser
ejecutado en otra de distinto tipo sin modificaciones importantes.
•
Registros: Los registros son áreas especiales de memoria, en los que se almacena la
instrucción que se va a ejecutar, así como toda la información necesaria para ello.
Hay registros de diferentes tipos,
cada uno de los cuales realizan distintas
funciones.
•
Compilador: Un compilador no es un programa que funciona de manera aislada,
sino que necesita de otros programas para conseguir su objetivo, el cual es obtener
un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel.
Algunos de esos programas son el preprocesador, el linker, el depurador y el
ensamblador. El preprocesador se ocupa (dependiendo del lenguaje) de incluir
ficheros, expandir macros, eliminar comentarios, y otras tareas similares. El linker se
encarga de construir el fichero ejecutable añadiendo al fichero objeto generado por el
compilador las cabeceras necesarias y las funciones de librería utilizadas por el
programa fuente. El depurador permite, si el compilador ha generado adecuadamente
el programa objeto, seguir paso a paso la ejecución de un programa. Finalmente,
muchos compiladores, en vez de generar código objeto, generan un programa en
lenguaje ensamblador que debe después convertirse en un ejecutable mediante un
programa ensamblador.
12
1. COMPILADOR MICROPIC
1.1.
DEFINICIÓN
Un traductor o compilador es cualquier programa que toma como entrada un texto
escrito en un lenguaje, llamado fuente y da como salida un programa en un lenguaje,
denominado objeto.
En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el
objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho
traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje
fuente es el lenguaje ensamblador. Un intérprete no genera un programa equivalente,
sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la
traduce al código equivalente y al mismo tiempo lo ejecuta.
1.2.
RESEÑA HISTÓRICA
Históricamente, con la escasez de memoria de los primeros computadores, se puso de
moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin
traducir y el intérprete, estos dos juntos dan una ocupación de memoria menor que la
resultante de los compiladores. Por ello los primeros computadores personales iban
siempre acompañados de un intérprete de BASIC (Spectrum, Commodore VIC-20, PC
XT de IBM, etc.). La mejor información sobre los errores por parte del compilador así
como una mayor velocidad de ejecución del código resultante hizo que poco a poco se
impusieran los compiladores. Hoy en día, y con el problema de la memoria
13
prácticamente resuelto, se puede hablar de un gran predominio de los compiladores
frente a los intérpretes, aunque intérpretes como los incluidos en los navegadores de
Internet para interpretar el código JVM de Java son la gran excepción.
1.3.
COMPILADOR VS INTÉRPRETE
1.3.1. Ventajas de Compilar Frente a Interpretar
•
Se compila una vez, se ejecuta n veces.
•
En bucles, la comp ilación genera código equivalente al bucle, pero interpretándolo
se traduce tantas veces una línea como veces se repite el bucle.
•
El compilador tiene una visión global del programa, por lo que la información de
mensajes de error es más detallada.
1.3.2. Ventajas del Intérprete Frente al Compilador
•
Un intérprete necesita menos memoria que un compilador. En principio eran más
abundantes dado que los computadores tenían poca memoria.
•
1.4.
Permiten una mayor interactividad con el código en tiempo de desarrollo.
CLASIFICACIÓN DE COMPILADORES
El programa compilador traduce las instrucciones en un lenguaje de alto nivel a
instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de
programación se requiere un compilador separado. El compilador traduce todo el
14
programa antes de ejecutarlo. Los compiladores son, pues, programas de traducciones,
que están insertados en la memoria por el sistema operativo para convertir programas de
cómputo en pulsaciones electrónicas ejecutables (lenguaje de máquina). Los
compiladores pueden ser de:
•
Una sola pasada.
•
Pasadas múltiples.
•
Optimación.
•
Compiladores increméntales.
•
Ensamblador.
•
Compilador cruzado.
•
Compilador con montador.
•
Autocompilador.
•
Metacompilador.
•
Descompilador.
1.5.
FUNCIONES DE UN COMPILADOR
A grandes rasgos un compilador es un programa que lee un programa escrito en un
lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el
lenguaje objeto. Como parte importante de este proceso de traducción, el compilador
informa a su usuario de la presencia de errores en el programa fuente.
A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de
lenguajes fuentes, desde los lenguajes de programación tradicionales, como FORTRAN
o Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas las
áreas de aplicación de la informática. Los lenguajes objeto son igualmente variados; un
15
lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de
cualquier computador entre un microprocesador y un supercomputador. A pesar de
existir una aparente complejidad por la clasificación de los compiladores, como se vio
anteriormente, las tareas básicas que debe realizar cualquier compilador son
esencialmente las mismas. Al comprender tales tareas, se pueden construir compiladores
para una gran diversidad de lenguajes fuente y objeto utilizando las mismas técnicas
básicas.
Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado
mucho desde que comenzaron a aparecer los primeros compiladores a principios de los
años cincuenta. Es difícil dar una fecha exacta de la aparición del primer compilador,
porque en un principio gran parte del trabajo de experimentación y aplicación se realizó
de manera independiente por varios grupos. Gran parte de los primeros trabajos de
compilación estaba relacionada con la traducción de fórmulas aritméticas a código de
máquina.
1.6.
PARTES EN LAS QUE TRABAJA UN COMPILADOR
Un procesador de lenguaje esta compuesto por dos módulos: análisis y síntesis, ver
Figura No. 1.1. El módulo de análisis tiene tres fases: Análisis Léxico, Sintáctico y
Semántico. El módulo de síntesis también tiene tres fases: Generación de Código
Intermedio, y en el caso de los compiladores Generación de Código y Optimización de
Código. Los intérpretes toman el código intermedio y lo ejecutan directamente.
El módulo de análisis verifica si el programa en lenguaje fuente es correcto, y recoge la
información necesaria en las tablas de símbolos para el módulo de síntesis. En el caso de
16
que el módulo de análisis detecte la existencia de errores en el programa fuente, se
envían los mensajes correspondientes al usuario por medio del manejador de errores. Las
fases de un procesador de lenguaje tamb ién se pueden clasificar en front-end y back-end,
según la independencia de la máquina para la cual se produce el código.
1.6.1. Fase de Análisis
•
En el llamado análisis lexicográfico o léxico, el compilador revisa y controla que las
“palabras” estén bien escritas y pertenezcan a algún tipo de token (cadena) definido
dentro del lenguaje, como por ejemplo, que sea algún tipo de palabra reservada, o si
es el nombre de una variable que este escrita de acuerdo a las pautas de definición
del lenguaje. En esta etapa se crea la tabla de símbolos, la cual contiene las variables
y el tipo de dato al que pertenece, las constantes literales, el nombre de funciones y
los argumentos que reciben etc.
El programa fuente está recogido en un fichero de texto cuyos compone ntes son
caracteres. El analizador léxico debe tomar dichos caracteres y construir los
símbolos terminales de la gramática (Lexemas) que describe el lenguaje de
programación a procesar.
17
Programa fuente
FRONT-END
ANÁLISIS
ANÁLISIS LÉXICO
ANÁLISIS SINTÁCTICO
TABLA
DE
ANÁLISIS SEMÁNTICO
SÍMBOLOS
MANEJO
DE
SÍNTESIS
ERRORES
GENERACIÓN DE CÓDIGO
INTERMEDIO
GENERACIÓN DE CÓDIGO
OPTIMIZADOR DE CÓDIGO
BACK-END
Programa objeto
Figura No. 1.1: Fases de un procesador de lenguaje
El analizador léxico, o explorador (En lengua inglesa Scanner), es la parte del
procesador de lenguaje que lee los caracteres del programa fuente, y construye una
18
cadena de Lexema. Los lexemas son agrupaciones de caracteres que constituyen lo s
símbolos terminales de la gramática. Los lexemas se agrupan en componentes léxicos o
tokens, que son conjuntos de símbolos terminales de la gramática, que se pueden tratar
como unidades sintácticas, con un determinado significado sintáctico y semántico.
El análisis léxico es un análisis a nivel de caracteres, su misión es, a partir de éstos y por
medio de patrones reconocer los lexemas, enviando al analizador sintáctico el
componente léxico y sus atributos. Los atributos del componente léxico, habitualmente
sólo uno, contienen información adicional sobre el lexema, tanto a nivel sintáctico como
semántico.
Sentencia del programa fuente compuesta por caracteres
i
f
a
Tabla
de
símbolos
<
c
o
n
t
h
ANÁLISIS LEXICO
e
n
Manejo
de
errores
Serie de lexemas
if
a
<
con
then
Figura No. 1.2: Reconocimiento de lexemas
En este lenguaje de programación, se consideran componentes léxicos las siguientes
construcciones:
•
Palabras reservadas
•
Operadores (de comparación, aritméticos, asignación, lógicos, relacionales)
•
Identificadores (de variables, etiquetas,)
•
Constantes (enteros, textos, hexadecimales)
•
Signos de puntuación (paréntesis, dos puntos y coma)
19
•
Marcas de comienzo y fin de bloques
En la mayor parte de los lenguajes de programación las palabras reservadas no se
pueden utilizar como identificadores. El analizador léxico envía al analizador sintáctico
el componente léxico y un atributo con información adicional sobre el lexema en
concreto reconocido. Habitualmente los componentes léxicos tienen un sólo atributo.
1.6.1.1. Funciones del Analizador Léxico
Las principales funciones que realiza son:
•
Identificar los símbolos.
•
Eliminar los espacios en blancos, caracteres de fin de línea, etc.
•
Eliminar los comentarios que acompañan al código fuente.
•
Crear unos símbolos intermedios llamados tokens.
•
Avisar de los errores que detecte.
Pero la función más importante de este analizador es la entrega de los componentes
léxicos y sus atributos al analizador sintáctico.
•
El analizador sintáctico como su nombre lo indica se encarga de revisar que los
tokens estén ubicados y agrupados de acuerdo a la definición del lenguaje. Dicho de
otra manera, que los tokens pertenezcan a frases gr amaticales válidas, que el
compilador utiliza para sintetizar la salida. Por lo general las frases gramaticales son
representadas por estructuras jerárquicas, por medio de árboles de análisis sintáctico.
En esta etapa se completa la tabla de símbolos con la dimensión de los
identificadores y los atributos necesarios, etc.
20
Existen dos formas de analizar sintácticamente una cadena:
a) Análisis descendente: Partiendo del axioma inicial de la gramática se va
descendiendo utilizando las derivaciones izquierdas, hasta llegar a construir la
cadena analizada.
b) Análisis ascendente: Se va construyendo el árbol desde sus nodos terminales. Es
decir, se construye desde los símbolos de la cadena hasta llegar al axioma de la
gramática. En este caso, se emplean normalmente las derivaciones más a la derecha
hasta la localización de la raíz.
Simultáneamente a la fase de análisis sintáctico, además de reconocer las secuencias de
tokens, y analizar su estructura, pueden realizarse una serie de tareas adicionales, tales
como:
− Recopilar información de los distintos tokens y almacenarla en la tabla de símbolos.
− Realizar algún tipo de análisis semántico, tal como la comprobación de tipos.
− Generar código intermedio.
− Avisar de los errores que se detecten.
•
El análisis semántico se encarga de revisar que cada agrupación o conjunto de token
tenga sentido, y no sea un absurdo. En esta etapa se reúne la información sobre los
tipos para la fase posterior, en esta etapa se utiliza la estructura jerárquica de la etapa
anterior y así poder determinar los operadores, y operandos de las expresiones y
preposiciones.
21
1.6.2. Fase de Síntesis
El módulo de síntesis se encarga de la generación de código objeto, una vez que el
módulo de análisis ha verificado que el código fuente es correcto.
La tabla de símbolos es una estructura de datos que almacena la información recogida en
el módulo de análisis, y empleándose dicha información en el módulo de síntesis para la
generación del código objeto.
22
2. ANÁLISIS, DISEÑO Y DESARROLLO DE SOFTWARE
MICROPIC
2.1 REQUERIMIENTOS
Diseñar e implementar un sistema generador de código ensamblador para la familia de
microcontroladores PIC 16, instrucciones de lenguaje de cuarta generación como Visual
Basic 6.0 y Basic Stamp Editor v2.1. La base para la adquisición de datos es por
archivos planos con extensión *.PIC que servirá para generar otro archivo plano pero
con extensión *.ASM donde se estará codificado el código ensamblador.
En el sistema se distinguen los procesos de análisis léxico, sintáctico y semántico, el
primero captura todos los lexemas digitados o ingresados en el archivo fuente, el
segundo proceso verifica que todos estos lexemas denominados tokens en esta fase estén
agrupados de acuerdo a los parámetros definidos en el software y el último proceso
analiza que estos tokens tengan sentido común, es decir, que cumplan con la sintaxis
definida en MicroPic y si esta es correcta generar el código ensamblador.
2.2 MODELO DE DESARROLLO DEL SOFTWARE
MicroPic esta desarrollado en base al modelo de prototipo, evaluando situaciones del
programa antes de desarrollar la etapa final de diseño, con la información obtenida en
estas evaluaciones se procedió a desarrollar otra parte del programa, repitiendo estos
pasos para poder revelar los reque rimientos esenciales del diseño.
23
Antes de entrar en detalles en este capitulo se hace una especificación muy importante, y
es la siguiente una de las bases de este software es que es un programa que esta basado
en la programación modular y no en la orientada a objetos, se ha utilizado una clase,
varias estructuras, apuntadores, entre otros conceptos de la programación orientada a
objetos en el código implementado en el lenguaje Borland C++, sólo y únicamente para
tener una buena organización, mejor manipulación, reutilización, ahorro y tener una
mejor presentación del código al momento de utilizar dichas funciones.
2.2.1 Etapas del Modelo de Prototipo
•
Identificación de requerimientos conocidos
La idea principal del proyecto es desarrollar un sistema capaz de tomar el código fuente
digitado en instrucciones basados en el lenguaje Basic Stamp Editor v2.1 y generar su
respectivo código ensamblador. Se identificaron los requerimientos para satisfacer el
sistema final como son el análisis léxico, sintáctico, semántico y generador de código
ensamblador.
•
Desarrollo de un modelo de trabajo
Se hizo un desarrollo de un plan general como utilidad para comenzar el proceso de
construcción del prototipo, que nos permitió tener una visión y dar a conocer a nuestro
director lo que se espera de ella y el proceso de desarrollo.
En el desarrollo de este prototipo se prepararon los siguientes componentes:
24
•
El lenguaje para el diseño e implementación del sistema
El lenguaje que se utilizó para desarrollar el sistema en su primer ciclo de desarrollo fue
Visual Basic 6.0, desarrollándose en este todos los módulos necesarios para el
funcionamiento interno del sistema desde su análisis léxico hasta el análisis sintáctico
del lenguaje. Además Visual Basic utilizado como herramienta para desarrollar la
interfaz gráfica del sistema, ya que es muy fácil de usar y así obtener un diseño bastante
amigable para el usuario final.
Primer ciclo para el desarrollo del prototipo
•
Pantallas y entradas de datos
Lo primero que se desarrollo fue un sistema integrado, que mostraba las listas de
lexemas y variables tal y como se esperaba, pero estaba limitado para procesos muy
grandes y robustos, ya que se demoraba mucho para arrojar los resultados.
Figura No. 2.1: Pantalla de entrada datos del primer ciclo
25
•
Entradas de datos
En una caja de texto multilinea se digitaba el código fuente en instrucciones basadas
Basic Stamp Editor v2.1, para luego poder compilarlo. Al presionar el botón ejecutar se
procesaba la compilación del código usuario previamente digitado
•
.
Formulario de lexemas y variables
Son dos cajas de textos multilineas que mostraban todos los lexemas y variables
encontrados en el código usuario. Los lexemas y variables son muy importantes y
esenciales para poder distinguirlas de las palabras reservadas del compilador. Estas dos
cajas de textos se generan después de haber presionado el botón ejecutar del formulario
principal
.
Figura No. 2.2: Formulario de lexemas y variables
26
•
Salida del sistema
La salida del sistema presentaba como resultado el número de lexemas encontrados en el
código fuente compilado, además el número de las variables declaradas por el usuario.
El resultado de estas operaciones se visualizaba a través de cajas de texto de múltiples
líneas.
•
Revisión del prototipo
Después de la revisión del prototipo del primer ciclo se presentaron muchos
inconvenientes, entre los cuales especificamos que su compilación se hacia muy lenta y
tardía para procesos muy robustos y complejos por la cantidad de recursos que consume
Visual Basic 6.0. Por lo que se opto por la solución de trasladar el código de Visual
Basic a otro lenguaje de programación más rápido en el proceso de compilación tal
como es el caso de Borlan C++ 5.02 que trabaja bajo el entorno MS-DOS.
Segundo ciclo para el desarrollo del prototipo.
Como anteriormente se explicó, la implementación del software se realizó bajo los
lenguajes de programación Visual Basic y Borland C++. La fase de la interpretación del
código se diseñó en un lenguaje jerárquico el cual nos permitía una mayor rapidez en la
compilación este lenguaje de programación fue Borland C++ 5.02. Por último se eligió
el lenguaje de programación Visual Basic 6.0 como herramienta para la construcción de
la interfaz de usuario.
27
•
Pantallas y entradas de datos
Figura No. 2.3: Pantalla de entrada datos del segundo ciclo
En la anterior pantalla el editor de la izquierda se deben ingresar los datos esenciales
para la creación del código fuente que se desea compilar, y el de la derecha es el editor
donde se mostrar el código objeto. Se hizo de esta manera para que el usuario tuviera la
opción de modificar y manipular tanto el código fuente como el código objeto desde la
misma ventana. Además puede visualizar los posibles errores que presentan en la
compilación, ver figura No. 2.2.
Figura No. 2.4: Caja de visualización de errores
28
Esta es una especificación de la función que cumple cada uno de los botones que
conforman a la barra de herramientas del software Compilador MicroPic versión 1.0.
Este botón permite crear un nuevo documento o archivo fuente el cual tendrá la
extensión *.PIC.
Este botón permite abrir todos los documentos con extensión *.PIC existentes en
el sistema.
Este botón permite guardar los cambios realizados a los documentos abiertos, si
son por primera vez se abre la ventana Guardar como.
Este botón permite visualizar la tabla que enlista todas las variables declaradas
en el archivo fuente con sus características.
Este botón permite visualizar la tabla que enlista todos los lexemas digitados en
el archivo fuente con sus características y ubicación.
Este botón permite visualizar la tabla que enlista todas las etiquetas utilizadas en
el archivo fuente con sus características.
Este botón permite mostrar el código ensamblador como resultado de la
compilación del código fuente.
Este botón permite la compilación del código fuente.
Este botón permite la visualización de los autores de este software, versión y
29
otros detalles.
Este botón permite abrir las ayudas disponibles acerca del manejo y sintaxis de
las intrusiones que maneja MicroPic.
Este botón permite salir de la aplicación MicroPic.
Esta opción permite cambiar el estilo o la piel del
entorno gráfico.
•
Módulo esencial de compilación.
En este módulo se procesan los datos capturados o ingresados por el usuario esta
compilación sé determinada por un tiempo en el cual la lista de respuesta se hace
invisible y la caja de texto del código ensamblador cambia de color indicando que esta
en ejecución el proceso de la fase de análisis.
La interpretación del código usuario es realizada por la ejecución del programa
implementado en Borland C++ llamado Struct Semantico.exe, el cual recupera la
información suministrada por la interfaz de usuario de Visual Basic a través de la lectura
de un archivo plano el cual Struct Semantico.exe lo analiza e interpreta al lenguaje
ensamblador y este a su vez lo guarda en un archivo plano para que la interfaz de
usuario construida en visual Basic 6.0 lo muestre al usuario. En ciencia cierta la
comunicación de la interfaz de Visual Basic y Borland C++ es implementada a través de
archivos de texto. La información manejada entre cada aplicación es la de suministrar el
estado de la ejecución, es decir, si sé esta compilando o por el contrario ha finalizado,
30
además intercambiar el resultado de la compilación, la lista de variables, la lista de
lexemas, lista de etiquetas y el código interpretado (lenguaje ensamblador).
•
Salida del sistema
El sistema genera la salida de los posibles errores que se presenten en la compilación del
código fuente y a la vez si se desea visualizar su respectivo código ensamblador se debe
elegir la opción Archivo *.ASM del menú ver, siempre y cuando no se generen errores
de sintaxis en la compilación, el archivo objeto se guarda automáticamente con el mismo
nombre del archivo fuente pero sustituyendo la extensión *. PIC por *.ASM y, además
lo almacena en la misma carpeta donde esta el archivo fuente, los dos archivos son
visualizados en la misma ventana y pueden ser manipulados por el usuario.
Figura No. 2.5: Salida generada por el sistema
31
•
Revisión del prototipo
El sistema final (MicroPic) arrojó los resultados esperados, a la vez se le hicieron las
pruebas pertinentes y fueron compiladas en el software MPLAB IDE versión 6.40,
dichas pruebas fueron satisfactorias y a la vez se hicieron los respectivos documentos de
para mayor constancia. Ver resultados en el capitulo 5.
2.3 ESPECIFICACIÓN DE REQUISITOS
En esta especificación formal de requisitos se pretende proporcionar una representación
de la información y las funciones que debe cumplir el sistema, con el fin de convertirlo a
un diseño que cumpla con las exigencias inicialmente planeadas. Se recurre al análisis
estructurado como herramienta para desarrollar el análisis y las especificaciones del
software.
32
2.4 DISEÑO DE PROCESOS
2.4.1 Nivel 0. General de Abstracción de Datos
Diagrama 1: Nivel 0. General de Ab stracción de Datos
33
2.4.2 Nivel 1. Especificación del proceso MicroPic Versión 1.0
Diagrama 2: Nivel 1. Especificación del Proceso MicroPic Versión 1.0
34
2.4.3 Nivel 2. Especificación del proceso Análisis Léxico
Diagrama 3: Nivel 2. Especificación del proceso Análisis Léxico
35
2.4.4 Nivel 3. Especificación del proceso Análisis Sintáctico
Diagrama 4: Nivel 3. Especificación del proceso Análisis Sintáctico
36
2.4.5 Nivel 4: Especificación del proceso Análisis Semántico
Diagrama 5: Nivel 4. Especificación del Análisis Semántico
37
2.4.6 Nivel 5: Especificación de Proceso Generador de Código Ensamblador
Diagrama 6: Nivel 5. Especificación del Proceso Generador de Código Ensamblador
38
2.5 DICCIONARIO DE DATOS
2.5.1 Procesos
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
Es el proceso principal que
Resultado de la
se encarga de compilar el
código fuente suministrado
MicroPic
Versión 1.0
Código inicial
por el usuario y verificar
su correcta sintaxis para
luego
convertirlo
FLUJOS DE
DATOS QUE
SALEN
Datos recuperados
en
ejecución
Código final
Código usuario
lenguaje ensamblador.
Tabla No. 1: Proceso de abstracción de datos
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Cumple con las funciones
de
adquisición
de
los
datos digitalizados por el
Manipulación
usuario y a la vez el de
de Código
almacenarlos.
De
igual
forma recuperarlos para
Datos digitalizados Código suministrado
Código almacenado
Código ingresado
Código ingresado
Lexemas
así enviárselo al proceso
analizador léxico.
Analizador
Se encarga de recorrer
39
Léxico
carácter por carácter el
código
fuente
encontrados
para
construir los lexemas con
la ayuda de los autómatas
propios del compilador.
Su
función
recolectar
es
los
encontrados
Analizador
la
de
lexemas
por
el
proceso analizador léxico
Sintáctico
para luego enviar por
Lexemas verificados
Lexemas
encontrados
Respuesta de la
ejecución
pantalla el resultado de la
sintaxis.
Este proceso se encarga
de adquirir los lexemas
dados
Analizador
por
el
proceso
analizador sintáctico para Lexemas verificados
Semántico
luego verificar si cumple
Característica de
código
con las características del
microcontrolador.
Bloque en
Se encarga de convertir el
código
de
usuario
Generador de
código ensamblador y de
código
igual
ensamblador
almacenarlos en archivos
forma
ensamblador
a
de
planos y mostrarlos por
pantalla.
Característica de
Datos en
código
ensamblador
Lista de
instrucciones
Tabla No. 2: Especificación del proceso MicroPic versión 1.0
40
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
Código ingresado
DESCRIPCIÓN
Se encarga de ir al archivo
Recupera
fuente y recuperar carácter
caracteres
por carácter y guardarlos
Apuntador a
en una lista enlazada.
Formación de
lexemas
FLUJOS DE
DATOS QUE
SALEN
Lista de caracteres
lexemas
Toma todos los caracteres
Lexemas
Lista de caracteres
y los forma en un solo
construidos
token.
Se encarga de construir un
Determina
nodo
con
las
tipo de lexema características del lexema
Lexemas
Lexemas construidos
estructurado
construido.
Añadir a lista
lexema
Se encarga de concatenar
o
ingresar
el
nodo
encontrado a la lista de
lexemas.
Lexemas
Lexemas encontrado
estructurado
Apuntador a
lexemas
Memoria
incrementada
Nuevo lexemas
Tabla No. 3: Especificación del proceso análisis léxico
41
NOMBRE
DESCRIPCIÓN
Se encarga de recuperar
Recupera
lexema
lexemas
almacenarlos en memoria.
Busca
por
en
lexema
la
y
lista
de
FLUJOS DE
DATOS QUE
LLEGAN
Lexemas
FLUJOS DE
DATOS QUE
SALEN
Característica
encontrados
lexema
Lexema recuperado
Petición de lexemas
Verificación
palabras
reservadas
las
Característica
sintáctica
palabras
propias
del
lexema
Error de verificación
Lexema verificado
lenguaje MicroPic.
Se encarga de buscar en la
Manejo de
tabla de errores el número
errores
del
error
que
se
ha
presentado.
Error de
verificación
Descripción del
Número de error
Respuesta de la
error
Tabla No. 4: Especificación del proceso análisis sintáctico
42
ejecución
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Este proceso se encarga de
almacenar o guardar los
Lexemas
Almacenar
lexemas encontrados en
verificados
tokens
una tabla de símbolos con
sus respectivas variables Variables guardadas
Lista de variable
Lexemas analizados
genéricas.
Verifica si la sintaxis esta
Verificación
de variable
correcta y genera o crea
Lista de variables
Característica de
código
las variables genéricas.
Tabla No. 5: Especificación del proceso análisis semántico
NOMBRE
DESCRIPCIÓN
Se encarga de crear un
archivo plano donde se
Almacenar
operaciones
guardará
el
código
generado con extensión
*.ASM.
43
FLUJOS DE
DATOS QUE
LLEGAN
FLUJOS DE
DATOS QUE
SALEN
Característica de
Bloque en
código
ensamblador
Lista de bloque
Nombre del token
Datos en
Contiene los datos del
Recuperación de lenguaje ensamblador
Nombre del token
para
poder
mostrarlos
instrucciones
por pantalla.
ensamblador
Lista de
instrucciones
Tabla No. 6: Especificación del proceso generador de código ensamblador
2.5.2 Almacén de Datos
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Se encarga de almacenar
todos los códigos fuentes
Archivos
fuentes
(Lenguaje de usuario) en
archivos
planos
Código final
con
extensión *.PIC.
Se encarga de guardar el
resultado
de
la
compilación en un archivo
Archivos
planos
con extensión *.ASM; esto
solo
se
realiza
sí
Código usuario
el
proceso MicroPic a dado
un resultado sin errores.
Tabla No. 7: Almacén de abstracción de datos
44
Datos recuperados
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Se encarga de almacenar
los
Lenguaje de
usuario
códigos
fuentes
digitalizados
por
usuario
extensión
con
el Código suministrado Código almacenado
*.PIC.
Se encarga de contener el
código
Lenguaje
representativo
(ensamblador) a través de
ensamblador
archivos
con
extensión
Bloque en
ensamblador
*.ASM.
Tabla No. 8: Especificación almacén de MicroPic versión 1.0
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Se encarga de almacenar
los lexemas
CPU
totalmente
estructurados en memoria
Nuevo lexemas
de forma temporal.
Tabla No. 9: Especificación almacén de análisis léxico
45
Memoria
incrementada
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
Contiene
todos
los
posibles errores que se
Lista de
errores
pueden presentar después
de
la
compilación
FLUJOS DE
DATOS QUE
SALEN
Número del error
Descripción del
error
de
MicroPic.
Tabla No. 10: Especificación almacén de análisis sintáctico
NOMBRE
DESCRIPCIÓN
Contiene
Variables
genéricas
las
FLUJOS DE
DATOS QUE
LLEGAN
FLUJOS DE
DATOS QUE
SALEN
Lexema analizado
Variable guardada
variables
genéricas de todos los
lexemas.
Tabla No. 11: Especificación almacén análisis semántico
2.5.3 Interfaz
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Se encarga de recoger los
Panel de
control
datos suministrados por el
usuario.
46
Código inicial
Se encarga de visualizar
los
resultados
ejecución
de
del
la
proceso
MicroPic, como son: Lista
Monitor
de
errores,
ensamblador,
Código
lista
Resultado de la
ejecución
de
lexemas, etc.
Tabla No. 12: Interfaz de abstracción de datos
NOMBRE
FLUJOS DE
DATOS QUE
LLEGAN
DESCRIPCIÓN
FLUJOS DE
DATOS QUE
SALEN
Esta interfaz permite que
el
Entrada por
teclado
usuario
pueda
interactuar a través del
Datos digitalizados
ingreso del código fuente
por teclado.
Esta interfaz cumple con
Vista por
pantalla
la función de visualizar
Respuesta de la
por pantalla los resultados
ejecución
de las diferentes fases del
compilador
tales
como
mostrar lista de errores,
Bloque en
ensamblador
código ensamblador.
Tabla No. 13: Especificación de Interfaz de MicroPic Versión 1.0
47
2.5.4 Flujos de Datos
NOMBRE
DESCRIPCIÓN
Son
los
DE DONDE SALE
A DONDE LLEGA
Panel de control
MicroPic versión 1.0
datos
digitalizados o escritos
Código
inicial
por el usuario, estos no
necesariamente
tienen
que estar almacenados.
Contiene todo el código
fuente que va a ser
Código
usuario
almacenado
en
archivo
extensión
con
un MicroPic versión 1.0
Archivos fuentes
*.PIC.
Contiene el código fuente
que necesariamente esta
Datos
almacenado, previamente
recuperados
para después llevarlo a la
compilación
por
Archivos fuentes
MicroPic versión 1.0
MicroPic versión 1.0
Archivos fuentes
el
proceso MicroPic.
Se encarga de transportar
el
resultado
Resultado de compilar
la ejecución
el
final
al
código
fuente, entre ellos esta
lista de errores o lenguaje
ensamblador.
48
Se encarga de transportar
el resultado final de la
Código final
ejecución
del
proceso MicroPic versión 1.0
MicroPic
en
archivos
Archivos planos
planos *.ASM.
Tabla No. 14: Flujos de datos de abstracción de datos
NOMBRE
Datos
DESCRIPCIÓN
Contiene
todos
DE DONDE SALE
los
caracteres ingresados por Entrada por teclado
digitalizados teclado.
A DONDE LLEGA
Manipulación de
código
En el caso que ocurra un
error de sintaxis este flujo
Respuesta de contendrá
la ejecución
la
lista
de
Analizador
errores o por el contrario
un
mensaje
Vista por pantalla
sintáctico
de
aceptación.
Código
Contiene el código dado
Manipulación de
suministrado por el usuario.
Lenguaje de usuario
código
Este flujo se encarga de
Código
suministrar
el
código
almacenado
fuente almacenado por el
Lenguaje de usuario
usuario.
49
Manipulación de
código
Contiene
Código
ingresado
el
lenguaje
usuario característico de
la aplicación MicroPic.
Manipulación de
código
Analizador léxico
Tiene las características
Lexemas
de las palabras, símbolos
encontrados
y operadores encontrados
Analizador léxico
Analizador
sintáctico
en el código fuente.
Llevan
sólo
aquellas
Lexemas
expresiones
que
hacen
verificados
parte del lenguaje de la
Analizador
Analizador
sintáctico
semántico
aplicación MicroPic.
Este flujo contiene sólo
Característica
aquellos
lexemas
que
Analizador
Generador de
de código
hacen óptimo la ejecución
semántico
código ensamblador
Generador de
Lenguaje
en código ensamblador.
Este
se
encarga
transportar
el
Bloque
ensamblador
ensamblador
para
de
código
generado
luego
ser código ensamblador
ensamblador
almacenado en un archivo
plano.
Contiene
todas
las
y
los
Datos en
instrucciones
ensamblador
parámetros que luego se código ensamblador
mostraran por pantalla.
50
Generador de
Vista por pantalla
Transporta y suministra
Lista de
instrucciones
las
instrucciones
ensamblador
en
que
Generador de
van
código ensamblador
hacer generadas a código
de máquina.
Tabla No. 15: Especificación de flujos de datos de MicroPic versión 1.0
NOMBRE
Código
ingresado
DESCRIPCIÓN
DE DONDE SALE
Contiene el lenguaje
A DONDE LLEGA
usuario característico de
Recupera caracteres
la aplicación MicroPic.
Es
una
estructura
Lista de
enlazada
sencilla
que
caracteres
guarda todo los caracteres
Recupera caracteres
Formación de
lexemas
encontrados
Contiene a los lexemas
Lexema
construido
en una variable y no en
una lista enlazada
Contiene un nodo con
Lexema
todas las características
estructurado del lexema encontrado
Contiene lexemas que se
Nuevo
lexema
van
almacenar
en
Formación de
Determina tipo de
lexemas
lexema
Determina tipo de
Añadir a lista de
lexema
lexemas
Añadir a lista de
la
lexemas
memoria
51
CPU
Contiene los apuntadores
a la lista de lexemas
Memoria
CPU
incrementada donde están todos los
Añadir a la lista de
lexemas
lexemas almacenados
Contiene
Apuntador a
lexemas
todo
el
Añadir a lista de
conjunto de lexemas que
lexemas
han sido encontrado
Recupera caracteres
Tiene las características
Lexemas
de las palabras, símbolos
Añadir a lista de
encontrados
y operadores encontrados
lexemas
en el código fuente.
Tabla No. 16: Especificación de flujos de datos de análisis léxico
NOMBRE
Petición de
lexemas
DESCRIPCIÓN
DE DONDE SALE A DONDE LLEGA
Este contiene el nodo
actual de la lista de
Recupera lexema
CPU
CPU
Recupera lexemas
lexemas
Contiene un apuntador al
Lexema
recuperado
siguiente lexema de la
lista de lexemas
Presenta
Característica
lexema
todas
las
características del lexema
encontrado
52
Recupera lexemas
Verificación
sintáctica
Error de
Contiene un índice del
verificación
error presentado
Número del
Contiene el número con
error
que se identifica el error
Recupera
Descripción
del error
Verificación
Manejo de errores
sintáctica
de
Manejo de errores
Lista de errores
Lista de errores
Manejo de errores
forma
descriptiva el error que
se cometió
Tabla No. 17: Especificación de flujos de datos de análisis sintáctico
NOMBRE
DESCRIPCIÓN
Contiene
DE DONDE SALE
todas
A DONDE LLEGA
las
Lista de
variables
genéricas Almacenamiento de
variables
encontradas en un bloque
token
Verificación de
variables
de lexemas
Contiene los token que
Lexema
van ha ser transformados
analizado
guardadas
token
Variables genéricas
a variables genéricas
Contiene
Variables
Almacenamiento de
los
lexemas
transformados
en
Variables genéricas
variables genéricas
Almacenamiento de
token
Tabla No. 18: Especificación de flujos de datos de análisis semántico
53
NOMBRE
DESCRIPCIÓN
DE DONDE SALE
A DONDE LLEGA
Lenguaje
Almacenamiento de
ensamblador
operaciones
Almacenamiento de
Recuperación de
operaciones
instrucciones
Contiene todo el lenguaje
Lista de
bloques
guardado en el archivo de
código ensamblador
Contiene la descripción
Nombre del
token
del archivo en lenguaje
ensamblador
Tabla No. 19: Especificación de flujos de datos de generador de código ensamblador
54
3. REQUERIMIENTOS GENERALES DE MICROPIC
En este capitulo se detalla con mayor profundidad los requerimientos del software
MicroPic. En el cual se diseñara e implementara un Compilador de Lenguaje de
Programación de Alto Nivel que Genera Código Ensamblador para la Implementación
de un Microcontrolador PIC de la Familia 16, utilizando archivos planos con extensiones
(*.PIC y *.ASM).
En el sistema se distinguen las fases de análisis y síntesis, la primera fases analiza que
las palabras estén escritas correctamente, hagan parte de un token, tengan sentido y no se
han absurdos esos tokens. En la segunda fase el sistema se encarga de la generación de
código objeto, una vez que el módulo de análisis ha verificado que el código fuente es
correcto. Teniendo muy en cuenta la tabla de símbolos recogidos en la fase de análisis
3.1 EVOLUTIVIDAD Y FLEXIBILIDAD
La herramienta software MicroPic debe poder evolucionar para permitir la posibilidad
de extenderse y adaptarse a posibles futuros requerimientos. Por ejemplo, a la hora de
anexar nuevos módulos como lo son: Integrar instrucciones básicas de MicroPic,
Cambiar sus parámetros.
Respecto a la flexibilidad, los algoritmos son susceptibles a cambios futuros en las
funciones facilitando así la implementación de nuevas instrucciones propias del lenguaje
55
tales como: AUXIO, LCDIN, entre otras funciones que no están implementadas en el
programa. Con estas dos características se puede lograr un buen re- uso de código.
3.2 MANTENIBILIDAD Y REPARABILIDAD
Como la mayoría de proyecto de software busca ser fiable con el tiempo, MicroPic debe
ser mantenible, es decir, que al efectuarle pequeños cambios al software este no se
transforme en altos costos en términos de tiempos de desarrollo.
Así mismo debe ser reparable, es decir que si se detecta algún error en el mismo sea
fácil repararlo sin que esto redunde en un cambio total del diseño ni demasiado tiempo
de desarrollo.
Estas dos características son fundamentales en un producto de software que pretenda
extenderse de sus programadores, y una pieza fundamental para lograr esto es una buena
documentación de software.
Esta debe ser completa y entendible, de tal forma que cuando el Software tenga que
cambiar de programador, el nuevo programador pueda comprenderlo a tal punto de que
pueda modificarlo sin ningún problema.
3.3 AMIGABILIDAD
MicroPic es un sistema muy amigable y esta diseñado para que cualquier usuario con los
conocimientos básicos de informática pueda manejarlo, a demás no se necesita ser un
56
excelente programador para determinar las condiciones propias del lenguaje, ya que
básicamente esta basado en las sintaxis del lenguaje de programación Visual Basic 6.0 y
Basic Stamp Editor v2.1 que son lenguajes de cuarta generación fáciles de manipular.
La amigabilidad es necesaria ya que si no fuera amigable los usuarios se alejarían de
esta herramienta para usar otras herramientas más agradables y sencillas.
3.4 PORTABILIDAD
Se refiere a la ventaja de utilizar el Software en varios ambientes, un software es más
portable cuando más fácil sea lograr que funcione en distintas plataformas.
Como MicroPic fue implementado en dos lenguajes de programación, uno que maneja el
diseño (Visual Basic), y el otro el aprendizaje del lenguaje MicroPic (Borland C++), el
primero esta un poco limitado por que este lenguaje utiliza librerías dinámicas que en
muchos casos no son compatibles con otras plataformas diferentes a Windows.
El otro que es Borland C++ es un lenguaje orientado a objetos de la cuarta generación
que permite crear códigos objetos que son compatibles con la mayoría de las plataformas
existentes en el mercado tales como Microsoft Windows, Unix, Linux, entre otros
sistemas operativos, por lo cual todo el análisis y manipulación de código intermedio
(lenguaje en ensamblador) esta basado bajo ventanas MS-DOS.
57
3.5 BONDAD
Por la portabilidad que presenta el programa MicroPic es que es muy rápido en su
proceso de compilación, teniendo en cuenta que el compilador de Borland C++ es
mucho más rápido que el de cualquier otro lenguaje aun así con aplicaciones muy
grandes. El tiempo de respuesta es muy rápido.
El diseño gráfico no es muy complicado es un sistema escalable, es decir, esta abierto a
cambios futuros de instrucciones del propio lenguaje. El manejo de la información se
hace a través de formatos sencillos (archivos planos)
58
4. INTRUCCIONES MICROPIC
4.1 COMPONENTES LÉXICOS
COMPONENTE
LEXEMA
DESCRIPCIÓN DEL
LÉXICO
EJEMPLO
PATRÓN
IDENTIFICADOR
x, y, valor,
x2
CADENA
“una cadena”
<letra>(<letra>|<dígito>)*
Caracteres entre comillas
OBSERVACIONES
Identificadores
Constante de cadena
dobles (“, ”)
CON_ INT
CON_HEX
[0 ... 65535]
[0x00 ...
0xFF]
CON_BIT
[0 ... 8]
CON_BYTE
[0 ... 255]
OPERADORES
ARITMÉTICOS
Constante de tipo
(λ)<dígito>(<dígito>|<letra>)* entera, hexadecimal,
bit y byte
+
“+”
Operador de suma
-
“- ”
Operador de resta
*
“*”
Operador de
multiplicación
/
“/”
AND
“ AND ”
Operador lógico
AND
OPERADORES
LÓGICOS
Operador de división
OR
“ OR ”
NOT
“ NOT ”
59
Operador lógico OR
Operador de lógico
de negación
>
>=
OPERADORES
<
RELACIONALES
“ > ” | ” > = ” | “< ” | “< = ”
Operadores de
| “ <> ”
comparación
<=
<>
OP_IGUALDAD
=
O ASIGNACIÓN
“=”
Operador de igualdad
o asignación
INT
TIPOS DE DATOS
TEXT
BIT
“int” | “text” | “bit” | “byte”
Tipos de datos
simples
BYTE
Tabla No. 20: Componentes léxicos, lexemas y patrones
4.2 INSTRUCCIONES
Las palabras reservadas del lenguaje Basic se describen en la siguiente Tabla:
INSTRUCCIÓN
DESCRIPCIÓN
Sirve para organizar lo que se hace en un IF... THEN en una sola
BRANCH
declaración o línea. Si el valor no está en el rango BRANCH no hace nada
y el programa continúa con la próxima instrucción después de BRANCH.
COUNT
DATA
La instrucción de la COUNT sirve para contar los pulsos que llegan al pin
en un tiempo determinado.
Cuando usted transmite un programa en la BASIC Stamp, se guarda en la
EEPROM que empieza a la dirección más alta (2047) y trabajando hacia la
60
dirección más baja. La mayoría de los programas no usa el EEPROM
entera, para disponible la parte baja para otros usos. DATA le permite
definir un juego de datos para guardar en las situaciones de EEPROM
disponibles.
Sirve para enviar los mensajes por pantalla del PC mientras sé esta
corriendo el programa. El nombre "debug" hace pensar en su uso más
DEBUG
popular; en los programas muestra el valor de una variable o expresión, o
indicando qué porción de un programa se está ejecutando actualmente.
DEBUG también es una gran manera de ensayar las técnicas de la
programación.
DO...LOOP permite a un programa ejecutar una serie de instrucciones
DO...LOOP
indefinidamente, o hasta que una condición especificada termine la vuelta o
el ciclo.
Cuando usted transmite un programa, este se guarda en la EEPROM que
empieza a la dirección más alta (255) y trabajando hacia la dirección más
EEPROM
baja. La mayoría de los programas no usa el EEPROM entera, para
disponible la parte baja para otros usos. La EEPROM directiva le permite
definir un juego de datos para guardar en las situaciones de EEPROM
disponibles.
END
EXIT
La instrucción END indica el final del programa.
La orden EXIT permite a un programa salir de un ciclo, es decir, rompe el
ciclo.
FOR...NEXT permite a un programa ejecutar una serie de instrucciones
para un número específico de repeticiones o iteraciones. Por defecto, cada
FOR...NEXT
tiempo a través del ciclo, incrementa el valor de la variable contador en 1.
Continuará doblando hasta que el resultado del contador salga del rango
puesto por Valor inicial y Valor final.
61
GOSUB
GOTO
Envía al programa a una subrutina.
La instrucción GOTO envía a la etiqueta o dirección que este acompañando
a la orden GOTO.
HIGH
La orden HIGH coloca el valor del pin especificado en 1.
IF...THEN prueba una condición y, si esa condición es verdadera, va a un
IF...THEN
punto en el programa especificado por una etiqueta de dirección. La
condición del IF...THEN son escritas con una mezcla de operadores lógicos
y de comparación.
IF...THEN...ELSE prueba una condición y si esta es verdadera va a un punto
en el programa especificado por una etiqueta de dirección, y si es falsa o no
IF...THEN...ELSE se cumple la condición va a otro punto en el programa especificado por una
etiqueta de dirección. Al igual que el IF...THEN están escritas con una
mezcla de operadores lógicos y de comparación.
INPUT
La orden INPUT configura el puerto a su modo de entrada, es decir, los
pines del puerto se colocan 1. Por lo general, todos los pins son de entrada.
LOW
La orden LOW coloca el valor del pin especificado en 0.
La instrucción ON...GOSUB es muy parecida a BRANCH, la cual sirve para
ON...GOSUB
organizar lo que se hace en un IF ... THEN en una sola declaración o línea.
Si el valor no está en el rango ON...GOSUB no hace nada y el programa
continúa con la próxima instrucción después de ON...GOSUB.
La instrucción ON...GOTO es muy parecida a ON...GOSUB y BRANCH, la
cual sirve para organizar lo que se hace en un IF ... THEN en una sola
ON...GOTO
declaración o línea. Si el valor no está en el rango ON...GOTO no hace
nada y el programa continúa con la próxima instrucción después de
ON...GOTO.
OUTPUT
La orden OUTPUT configura el puerto a su modo de salida, es decir, los
pines del puerto se colocan 0.
62
PAUSE
La instrucción PAUSE retrasa la ejecución de la próxima instrucción del
programa para el número especificado de milisegundos.
RANDOM genera números aleatorios que van de 0 a 65535. Que se genera
RANDOM
por un funcionamiento de la lógica que usa el valor inicial en una Variable
de sucesión de 65535 números esencialmente aleatorios.
READ
La instrucción READ se utiliza para recuperar un valor de cualquier
dirección de la EEPROM.
La orden RETURN envía al programa atrás en la dirección en el GOSUB
RETURN
inmediatamente más reciente. Si el RETURN se ejecuta sin un GOSUB
anterior, se devolverá a la primera línea ejecutable del programa;
normalmente produciendo un bicho lógico en el código.
SELECT...CASE es una instrucción avanzada que se puede usar para
SELECT...CASE reemplazar la instrucción IF...THEN...ELSE. Esta a su vez también utiliza
los operadores de la comparación.
SERIN
SEROUT
SLEEP
La orden SERIN permite el envío de datos por el puerto serial.
La orden SEROUT permite la salida de datos por el puerto serial.
Envía a MicroPic a dormir, es decir, a un estado de bajo consumo en un
tiempo indefinido.
TOGGLE
La instrucción TOGGLE invierte el estado del pin especificado,
cambiándolo de 0 a 1 y de 1 a 0.
WRITE
La instrucción WRITE guarda un valor en cualquier dirección de la
EEPROM. En cualquier situación dentro del EEPROM puede escribirse.
Tabla No. 21: Palabras reservadas con su descripción4
4
BASIC Stamp Programming Manual 2.0b – www.parallaxinc.com
63
5. EVALUACIÓN DEL SISTEMA MICROPIC V 1.0
El código fuente es creado en la carpeta MicroPic que se encuentra en C:\ Archivos de
programa, y si se desea cambiar la carpeta destino se puede hacer desde el árbol de
carpetas que se encuentra en la parte izquierda de la ventana Guardar como, además el
archivo en ensamblador se creará en la misma carpeta donde se encuentre el código
fuente y con el mismo nombre pero con extensión *.ASM.
Todo código después de compilado si no tiene errores debe crear un código en
ensamblador, en el cual las tres primeras líneas son las directivas donde están
establecidas las instrucciones propias del microcontrolador que esta en uso, en este caso
el PIC 16f84 y todos los números que se encuentren en el mismo serán tratados como
números hexadecimales sin importar el formato que tengan previamente, por medio de la
instrucción Radix; estas instrucciones estarán presentes en todos los códigos en
ensambladores que se generen.
Luego se encuentran las diferentes variables que están direccionadas, teniendo en cuenta
el tipo en que estén declaradas en el código fuente, se organizan en posiciones sucesivas
de memoria que inicia en la posición 0C y termina en la 4F, es decir, solo se tienen
disponibles 68 registros de uso general; si la variable es de tipo entero se requieren dos
registros de 8 bits cada uno, al primer registro se le adiciona la letra H para almacenar la
parte alta y al segundo la letra L para almacenar la parte baja.
Después viene el cuerpo del trabajo que inicia con la palabra reservada main y finaliza
con end
64
5.1 EVALUACIÓN No. 1
•
Prueba: El nombre del programa fuente es Prueba1.pic
En el siguiente programa se declaran seis variables de diferentes tipos y un condicional
simple donde se evalúa la condición (a > 0x01), donde el número que esta dentro de la
condición esta en formato hexadecimal, si se cumple la condición realizara las
instrucciones que le siguen.
DECLARE
BYTE a
BYTE s
INT m
BYTE x
INT v
INT p
ENDDECLARE
if a > 0x01 then
a=a+3
s = 4- x
endif
m = s * 27
end
Figura No. 5.1: Código fuente de la evaluación No. 1. Prueba1.pic
Al compilar este código se presenta un mensaje que refleja la interpretación correcta de
la sintaxis del código fuente con extensión *.PIC, el mensaje que se visualiza es el
siguiente: “!!! Correcto ¡ ¡ ¡”.
•
Producto: El nombre del programa objeto será Prueba1.asm
El producto de la compilación se presentara a continuación:
65
mulplr
mulcnd
count
L_Bytes
H_Bytes
Var1
Var2
Var3L
Var3H
Var4
Var5L
Var5H
Var6L
Var6H
main
#include "p16f84a.inc"
Radix hex
List p=16f84a
equ
0C
equ
0D
equ
0E
equ
0F
equ
10
equ
11
equ
12
equ
13
equ
14
equ
15
equ
16
equ
17
equ
18
equ
19
MOVLW
SUBWF
BTFSC
GOTO
BTFSC
GOTO
GOTO
0x0001
Var1,0
STATUS,Z
CondF1
STATUS,C
CondV1
CondF1
MOVLW
ADDWF
MOVWF
MOVF
SUBWF
MOVWF
0x03
Var1,0
Var1
Var4,0
0x04,0
Var2
MOVLW
MOVWF
MOVF
MOVWF
CALL
MOVF
MOVWF
0x1B
mulplr
Var2,0
mulcnd
Multi
L_Bytes,0
Var3L
CondV1
CondF1
66
MOVF
MOVWF
GOTO
CLRF
CLRF
MOVLW
MOVWF
MOVF
BCF
RRF
BTFSC
ADDWF
RRF
RRF
DECFSZ
GOTO
RETLW
Multi
Loop
H_Bytes,0
Var3H
Terminar
H_Bytes
L_Bytes
8
count
mulcnd,0
STATUS,C
mulplr,1
STATUS,C
H_Bytes,1
H_Bytes,1
L_Bytes,1
count,1
Loop
0
Terminar
END
Figura No. 5.2: Código ensamblador de la evaluación No. 1. Prueba1.asm
Después de la compilación del programa, se generó el código que se esperaba como
resultado final, se crearon todas las variables con sus nombres genéricos y en la
secuencia de las posiciones de memoria correspondientes.
5.2 EVALUACIÓN No. 2
•
Prueba: El nombre del programa fuente es Prueba2.pic
67
En este programa se declaran tres variables de diferentes tipos con un ciclo repetitivo
donde se inicializa la variable del ciclo en cero y finaliza en 15, esto expresa que las
instrucciones que le siguen al for se deben realizar 16 veces.
DECLARE
BYTE a
BYTE x
INT p
ENDDECLARE
for a = 0 to 15
p=x*2
next a
end
Figura No. 5.3: Código fuente de la evaluación No. 2. Prueba2.pic
Al compilar este código se presenta un mensaje que interpreta un error, el cual es
editado por el usuario en el código fuente ya que los ciclos están definidos para iniciar
desde 1 hasta el infinito, este mensaje muestra la línea, las coordenadas donde se efectuó
dicho error y se describe a continuación:
MicroPic Versión 1.0 – Error de Compilación
MicroPic – Línea
:6
MicroPic – Describe :Inicializar variable (var = 1)
MicroPic - Lexema (6,9) => ‘0’
•
Producto: Como se expreso anteriormente si hay errores en el código fuente no se
genera o crea el respectivo código ensamblador.
68
5.3 EVALUACIÓN No. 3
•
Prueba: El nombre del programa fuente es Prueba3.pic
En el siguiente programa se declaran cuatro variables todas de tipo byte, dos etiquetas y
una la instrucción Branch que se evalúa al igual que un condicional, este envía a
diferentes etiquetas dependiendo del valor que toma la variable val.
DECLARE
BYTE a
BYTE x
byte p
byte val
ENDDECLARE
BRANCH val,(caso1,caso2)
caso1:
a=x+p
caso2:
a=x-3
end
Figura No. 5.4: Código fuente de la evaluación No. 3. Prueba3.pic
•
Producto: El nombre del programa objeto será Prueba3.asm
Luego de la compilación del código fuente el cual no tuvo ningún error de sintaxis se
genera el código de la figura No. 5.5 con extensión *.ASM y el mismo nombre que
archivo que lo crea. Los resultados fueron los pertinentes o correspondientes con los
datos esperados.
69
#include "p16f84a.inc"
Radix hex
List p=16f84a
equ
0C
equ
0D
equ
0E
equ
0F
Var1
Var2
Var3
Var4
main
MOVLW
SUBWF
BTFSC
GOTO
MOVLW
SUBWF
BTFSC
GOTO
0
Var4,0
STATUS,Z
Etiq1
1
Var4,0
STATUS,Z
Etiq2
MOVF
ADDWF
MOVWF
Var3,0
Var2,0
Var1
MOVLW
SUBWF
MOVWF
GOTO
0x03
Var2,0
Var1
Terminar
Etiq1
Etiq2
Terminar
END
Figura No. 5.5: Código ensamblador de la evaluación No. 3. Prueba3.asm
5.4 EVALUACIÓN No. 4
•
Prueba: El nombre del programa fuente es Prueba3.pic
70
El siguiente código fue editado por un usuario ajeno a la aplicación MicroPic v1.0, quien
le dedicó un día de análisis a las sintaxis que utiliza el software, para luego poder editar
el código de la mejor manera posible. Después de editado procedió a compilarlo para
visualizar si este presenta errores de sintaxis o no.
DECLARE
byte s
int w
byte pi
DECLARE
gosub paso
a=w*3
paso:
s=w/3
return
w = w+pi
end
Figura No. 5.6: Código fuente de la evaluación No. 4. Prueba4.pic
El código fuente establece en sus parámetros de sintaxis que la declaración de variables
esta enmarcada o esta dentro de las dos palabras reservadas declare para iniciar y
enddeclare para finalizar la declaración. Según lo establecido en las distintas sintaxis del
código usuario el error que se presenta es utilizar una palabra reservada en el lugar no
apropiado y el mensaje que se visualiza es el siguiente:
MicroPic Versión 1.0 – Error de Compilación
MicroPic – Línea
:5
MicroPic – Describe :Se esperaba palabra reservada
MicroPic - Lexema (5,7) => ‘DECLARE’
71
•
Producto: Como hay un error de palabras reservadas no se creará el código objeto.
5.5 EVALUACIÓN No. 5
•
Prueba: El nombre del programa fuente es Prueba5.pic
En este código se espera que el compilador envíe un mensaje de error que realizó el
usuario al realizar la división por cero la cual no se permite o no existe.
declare
byte s
byte w
byte pi
enddeclare
w=pi + 8
s=w/0
end
Figura No. 5.7: Código fuente de la evaluación No. 5. Prueba5.pic
Cuando se compiló el programa o código fuente anterior se visualizó el siguiente
mensaje de error:
MicroPic Versión 1.0 – Error de Compilación
MicroPic – Línea
:7
MicroPic – Describe :División entre cero
MicroPic - Lexema (7,9) => ‘0’
•
Producto: Al igual que las pruebas anteriores el código objeto no se genera.
72
5.6 EVALUACIÓN No. 6
•
Prueba: El nombre del programa fuente es Prueba6.pic
Este código que esta digitado de forma correcta, utiliza ciclos y condicionales anidados,
el usuario final no cometió error de sintaxis y se espera un mensaje positivo al compilar
este código en MicroPic Versión 1.0.
DECLARE
BYTE a
BYTE x
INT p
ENDDECLARE
inicio:
for a = 1 to 10
for x = 1 to 10
if a < 56 then
if x = 10 then
x=2/a
else
a=2+1
endif
else
a=x/6
endif
next x
next a
final:
END
Figura No. 5.8: Código fuente de la evaluación No. 6. Prueba6.pic
•
Producto: El nombre del programa objeto será Prueba6.asm
73
Después de haber compilado el código usuario y este no presentó ningún error de
sintaxis se pudo generar el código ensamblador u objeto con extensión *.ASM, ver
figura No. 5.9.
cocte
divsor
Var1
Var2
Var3L
Var3H
main
Etiq1
#include "p16f84a.inc"
Radix hex
List p=16f84a
equ
0C
equ
0D
equ
0E
equ
0F
equ
10
equ
11
MOVLW
MOVWF
0x0A
Var1
MOVLW
MOVWF
0x0A
Var2
MOVLW
SUBWF
BTFSC
GOTO
BTFSS
GOTO
GOTO
0x38
Var1,0
STATUS,Z
CondF1
STATUS,C
CondV1
CondF1
MOVLW
SUBWF
BTFSC
GOTO
GOTO
0x0A
Var2,0
STATUS,Z
CondV2
CondF2
MOVF
MOVWF
MOVLW
CLRF
Var1,0
divsor
0x02
cocte
Ciclo1
Ciclo2
CondV1
CondV2
74
CALL
MOVF
MOVWF
GOTO
Divi
cocte,0
Var2
Salir2
MOVLW
ADDWF
MOVWF
0x01
0x02,0
Var1
GOTO
Salir1
MOVF
MOVWF
MOVF
CLRF
CALL
MOVF
MOVWF
Var1,0
divsor
Var2,0
cocte
Divi
cocte,0
Var1
DECFSZ
GOTO
Var2,1
Ciclo2
DECFSZ
GOTO
Var1,1
Ciclo1
GOTO
Terminar
SUBWF
BTFSS
GOTO
INCF
GOTO
divsor,0
STATUS,C
SUM1
cocte
Divi
RETLW
0
CondF2
Salir2
CondF1
Salir1
FinCiclo2
FinCiclo1
Etiq2
Divi
SUM1
Terminar
END
Figura No. 5.9: Código ensamblador de la evaluación No. 6. Prueba6.asm
75
5.7 EVALUACIÓN No. 7
•
Prueba: El nombre del programa fuente es Prueba7.pic
Este código es editado por un usuario, el cual presenta un error sintaxis ya que todo
código fuente o usuario debe terminar con la palabra reservada END.
declare
byte a
byte conteo
enddeclare
conteo = 20
a = conteo + 15
end
a=6
Figura No. 5.10: Código fuente de la evaluación No. 7. Prueba7.pic
Como se explicó anteriormente, el código fuente establece que se debe terminar con la
palabra reservada END, que es quien indica cual es el final del programa codificado por
el usuario y en este caso no sucedió así, ya que después del la palabra END se encuentra
una línea de código más, que en ese momento no hace cumplir la sintaxis del lenguaje de
programación. Esta línea de código representa una asignación de un número a una
variable. El mensaje de error es el siguiente:
MicroPic Versión 1.0 – Error de Compilación
MicroPic – Línea
:7
MicroPic – Describe :Utilizar ‘END’ para finalizar programa
MicroPic - Lexema (5,7) => ‘end’
76
•
Producto: Como hay un error de palabras reservadas no se genera el código objeto.
5.8 EVALUACIÓN No. 8
•
Prueba: El nombre del programa fuente es Prueba8.pic
El siguiente código fue digitado con comentarios para que cualquier persona o usuario al
momento de estudiarlo u observarlo se le hiciera más fácil la comprensión del mismo,
teniendo en cuenta que este software esta en la capacidad de eliminar cualquier texto que
se encuentre después de una comilla simple, para el este será tratado como un
comentario, y el software elimina todos los comentarios al momento de realizar la
compilación. En este caso no se presentará ningún error de sintaxis. El mensaje a
visualizar es satisfactorio.
'Programa con comentarios para un mejor entendimiento
'a otros usuarios que lo quieran estudiar
DECLARE 'Inicio de la declaración de variables
BYTE L
BYTE M
BYTE N
ENDDECLARE 'Final de la declaración de variables
IF M >= N THEN 'Condicional compuesto
L=M/N
ELSE
L=N/M
ENDIF 'Cierre del condicional
END 'Fin del programa
Figura No. 5.11: Código fuente de la evaluación No. 8. Prueba8.pic
77
•
Producto: El nombre del programa objeto será Prueba8.asm
Después de haber compilado el código fuente, el cual no presentó ningún error de
sintaxis, se pudo generar el código objeto o final (ensamblador) que esta representado en
la figura No. 5.12 con extensión *.ASM.
cocte
divsor
Var1
Var2
Var3
main
#include "p16f84a.inc"
Radix hex
List p=16f84a
equ
0C
equ
0D
equ
0E
equ
0F
equ
10
MOVLW
SUBWF
BTFSC
GOTO
GOTO
Var3
Var2,0
STATUS,C
CondV1
CondF1
MOVF
MOVWF
MOVF
CLRF
CALL
MOVF
MOVWF
GOTO
Var3,0
divsor
Var2,0
cocte
Divi
cocte,0
Var1
Salir1
MOVF
MOVWF
MOVF
CLRF
CALL
MOVF
MOVWF
Var2,0
divsor
Var3,0
cocte
Divi
cocte,0
Var1
CondV1
CondF1
78
Salir1
Divi
GOTO
SUBWF
BTFSS
GOTO
INCF
GOTO
Terminar
divsor,0
STATUS,C
SUM1
cocte
Divi
RETLW
0
SUM1
Terminar
END
Figura No. 5.12: Código ensamblador de la evaluación No. 8. Prueba8.asm
Después de generadas las diferentes pruebas en el software MicroPic versión 1.0, se
procedió a utilizar el software Microchip MPLAB 5.0 y Microchip MPLAB IDE versión
6.40, el cual permite compilar el código ensamblador que se creó en cada una de las
pruebas anteriores que no presentaron ninguna clase de errores. Para poder compilar el
código ensamblador (creado en la aplicación MicroPic), se debe crear primero que todo
un proyecto en MPLAB que debe estar ubicado en la misma carpeta donde se encuentra
el archivo con extensión *.ASM que se desea compilar, después se le añade al proyecto
creado dicho archivo; finalmente se abre el archivo desde MPLAB y se procede a
compilarlo presionando la combinación de teclas Alt + F10.
Finalmente cuando se ha compila dicho archivo el software MPLAB muestra una
ventana de mensajes con los posibles errores que se han cometido o el éxito alcanzado.
Ver Figura No. 5.13.
79
Building PRUEBA1.HEX...
Compiling PRUEBA1.ASM:
Command line: "C:\ARCHIV~1\MPLAB\MPASMWIN.EXE /p16F84 /q
C:\ARCHIV~1\MICROPIC \PRUEBA1.ASM"
Message[301] C:\ARCHIV~1\MPLAB\P16F84A.INC 35 : MESSAGE:
(Processor-header file mismatch. Verify selected processor.)
Build completed successfully.
Figura No. 5.13: Mensaje de salida en MPLAB mostrando compilación satisfactoria
80
6. AUTÓMATAS FORMATOS Y SINTAXIS DE PROGRAMACIÓN
6.1
AUTÓMATA PARA NÚMEROS
Pueden ser decimales o hexadecimales los primeros son solamente combinaciones de
dígitos y los segundos son combinaciones de dígitos con letras o viceversa estos pueden
ser positivos o negativos, teniendo en cuenta que todo número debe comenzar con un
digito, así los números hexadecimales siempre se les antepone un cero (0) y luego una
equis (x) en minúscula, después de este formato se colocan números o letras desde la A
hasta la F.
Figura No. 6.1: Autómata de números decimales y hexadecimales
6.2
AUTÓMATA PARA IDENTIFICADOR
Es una variable cuyo valor puede cambiar o ser modificado durante el desarrollo o en
tiempo de ejecución de un software o programa, todo identificador debe comenzar por
una letra.
81
Figura No. 6.2: Autómata de identificadores
6.3
AUTÓMATA PARA OPERADORES RELACIONALES
En este tipo de operadores actúan el signo igual que (=), menor que (<) y mayor que (>)
los cuales se pueden combinar para originar otros operadores más como son el menor o
igual que (<=), mayor o igual que (>=) y diferente (<>).
Figura No. 6.3: Autómata de operadores lógicos
82
6.4
AUTÓMATA PARA CONDICIÓN
Figura No. 6.4: Autómata que evalúa una condición
6.5
AUTÓMATA PARA ETIQUETA
Toda etiqueta es una variable o un nombre que obligatoriamente debe estar seguida de
dos puntos:
Figura No. 6.5: Autómata de etiquetas
6.6
AUTÓMATA PARA CADENA DE CARACTERES
Las cadenas de caracteres están representadas por cualquier carácter que se encuentre
entre comillas dobles.
83
El símbolo & significa cualquier carácter.
Figura No. 6.6: Autómata de cadena de caracteres
6.7
AUTÓMATA PARA ESPACIOS EN BLANCO
Los comentarios están definidos por cualquier carácter que se encuentre después de una
comilla simple.
El símbolo & significa cualquier carácter.
Figura No. 6.7: Autómata que valida los comentarios
84
6.8
FUNCIÓN BRANCH
Sintaxis:
“BRANCH” <MOVIMIENTO>“,” “(“<ETIQUETA1>“,” <ETIQUETA2>“,” ... “,”
<ETIQUETAn>“)”
<MOVIMIENTO>: Es una variable, constante o expresión (0 - 255) que específica el
índice de la Etiqueta.
<ETIQUETA1>, <ETIQUETA2>, ... <ETIQUETAn>: Son etiquetas que especifican
donde se encuentra el siguiente proceso. BRANCH ignorará cualquier entrada de la lista
más allá de desplazamiento 255.
Figura No. 6.8: Autómata instrucción branch
6.9
FUNCIÓN COUNT
Sintaxis:
“COUNT” <PIN>“,” <DURACIÓN>“,” <VARIABLE>
85
<PIN>: Es una cons tante (0 - 15) o una palabra reservada (PIN0 - PIN1) eso específica
que las E/S se ponen en modo de entrada por defecto.
<DURACIÓN>: Es una variable, constante o expresión (1 - 65535) que específica el
tiempo o periodo durante el cual se van a contar todos los pulsos que llegan al pin
especificado.
<VARIABLE>: Es una variable (normalmente una palabra) en donde se almacenará el
total de los pulsos que llegarán al pin especificado.
Figura No. 6.9: Autómata instrucción count
6.10 FUNCIÓN DEBUG
Sintaxis:
“DEBUG” <OUTPUTDATA> {“,” <OUTPUTDATA>}
<OUTPUTDATA>: Es una variable, constante que va (0 - 65535) que específica el
rendimiento de la información. Los datos válidos o permitidos son: caracteres ASCII
(texto, cadena y caracteres de control), los números decimales (0 - 65535),
hexadecimales ($00 - $FF) o binarios (%00000000 - %11111111).
86
Figura No. 6.10: Autómata instrucción debug
6.11 FUNCIÓN END
Sintaxis:
“END”
END: Esta instrucción le permite Al software MicroPic versión 1.0 determinar el final
de todo código fuente que se desea procesar o ejecutar. Esta orden es recomendada y
obligatoria.
Figura No. 6.11: Autómata instrucción end
87
6.12 FUNCIÓN EXIT
Sintaxis:
“EXIT”
EXIT: Permite al programa MicroPic terminar o salir de las estructuras de ciclo s
repetitivos tales como el FOR…NEXT. Esta instrucción solo esta permitida dentro de
los ciclos repetitivos.
Figura No. 6.12 Autómata instrucción exit
6.13 FUNCIÓN FOR...NEXT
Sintaxis: En la sintaxis del ciclo FOR…NEXT, la variable inicial siempre debe iniciar
en uno y la variable final termina el ciclo hasta n, y solo permite incrementar a la
variable contador de uno en uno.
“FOR” <CONTADOR> “=” <VAL_INI> “TO” <VAL_FIN>
<EXPRESIÓN>
“NEXT” <CONTADOR>
<CONTADOR>: Es una variable normalmente un byte que se usa como un contador.
88
<VAL_INI>: Es una constante numérica con el valor de uno (1).
<VAL_FIN>: Es una variable o constante (0 - 65535) que específica el valor final de la
variable Contador. Cuando el valor de Contador es fuera del rango del valo r inicial y el
valor final, el FOR...NEXT en la próxima vuelta deja de ejecutar y el programa va a
NEXT para ejecutar las siguientes instrucciones.
<EXPRESIÓN>: Una expresión es una serie de instrucciones definidas para el
compilador, y que permite validar sus respectivas sintaxis, es decir, que dentro de un
condicional se puede encontrar un ciclo, un condicional, una instrucción exit, goto, etc.
Figura No. 6.13: Autómata del ciclo for...next
6.14 FUNCIÓN GOSUB
Sintaxis:
“GOSUB” <ETIQUETA>
89
<ETIQUETA>: Es una etiqueta que específica donde esta la rutina a llamada.
Figura No. 6.14: Autómata instrucción gosub
6.15 FUNCIÓN GOTO
Sintaxis:
“GOTO” <ETIQUETA>
<ETIQUETA>: Es una etiqueta que específica dónde ir.
Figura No. 6.15: Autómata instrucción goto
6.16 FUNCIÓN HIGH
Sintaxis:
“HIGH” <PIN>
90
<PIN>: Es una constante (0 - 15) o una palabra reservada (PIN0 - PIN1) la cual
específica que las E/S se ponen en modo de entrada por defecto.
Figura No. 6.16: Autómata instrucción high
6.17 FUNCIÓN IF…THEN…ELSEIE…ENDIF
Sintaxis: La instrucción IF…THEN…ELSEIF…ENDIF maneja dos tipos de sintaxis, el
condicional simple y el compuesto.
•
Condicional simple:
“IF” <CONDICIÓN> “THEN”
<EXPRESIÓN>
“ENDIF”
•
Condicional compuesto:
“IF” <CONDICIÓN> “THEN”
<EXPRESIÓN>
“ELSE”
< EXPRESIÓN >
“ENDIF”
91
<CONDICIÓN>: Es una declaración, como “x = 7” que puede evaluarse como
verdadero o falso.
<EXPRESIÓN>: Una expresión es una serie de instrucciones definidas para el
compilador, y que permite validar sus respectivas sintaxis, es decir, que dentro de un
condicional se puede encontrar un ciclo, un condicional, una instrucción exit, goto, etc.
Figura No. 6.17: Autómata del condicional if…then…elseif…endif
6.18 FUNCIÓN INPUT
Sintaxis:
“INPUT” <PIN>
<PIN>: Es una constante (0 - 15) o una palabra reservada (PIN0 - PIN1) quien
específica que las E/S se ponen en modo de entrada por defecto.
92
Figura No. 6.18: Autómata instrucción input
6.19 FUNCIÓN LOW
Sintaxis:
“LOW” <PIN>
<PIN>: Es una constante (0 - 15) o una palabra reservada (PIN0 - PIN1) la cual
específica que las E/S se ponen en modo de entrada por defecto.
Figura No. 6.19: Autómata instrucción low
6.20 FUNCIÓN OUTPUT
Sintaxis:
“OUTPUT” <PIN>
93
<PIN>: Es una constante (0 - 15) o una palabra reservada (PIN0 - PIN1) quien
específica que las E/S se ponen en modo de entrada por defecto.
Figura No. 6.20: Autómata instrucción output
6.21 FUNCIÓN PAUSE
Sintaxis:
“PAUSE” <DURACIÓN>
<DURACIÓN>: Es un variable, constante (0 - 65535) que específica la duración de la
pausa.
Figura No. 6.21: Autómata instrucción pause
94
6.22 FUNCIÓN RANDOM
Sintaxis:
“RANDOM” <VARIABLE>
<VARIABLE>: Es una variable (normalmente una palabra) donde se producirá un
número aleatorio. Los actos inconstantes como la entrada de azar y su rendimiento del
resultado.
Figura No. 6.22: Autómata instrucción random
6.23 FUNCIÓN READ
Sintaxis:
“READ” <LOCALIZACIÓN>“,” <VARIABLE>
<LOCALIZACIÓN>: Es una variable, constante que oscila entre (0 – 255) y específica
la dirección de memoria para leer.
<VARIABLE>: Es una variable (normalmente un byte) donde el valor se guarda.
95
Figura No. 6.23: Autómata instrucción read
6.24 FUNCIÓN RETURN
Sintaxis:
“RETURN”
RETURN: Esta instrucción retorna de un subprograma o rutina que previamente fue
llamada con la instrucción GOSUB.
Figura No. 6.24: Autómata instrucción return
6.25 FUNCIÓN SLEEP
Sintaxis:
“SLEEP”
96
SLEEP: Envía a MicroPic a dormir, es decir, a un estado de bajo consumo en un tiempo
indefinido.
Figura No. 6.25: Autómata instrucción sleep
6.26 FUNCIÓN WRITE
Sintaxis:
“WRITE” <LOCALIZACIÓN>“,” <DATO>
<LOCALIZACIÓN>: Es una variable, constante que oscila entre (0 – 255) y específica
la dirección de memoria para escribir.
<DATO>: Es una variable, constante que contiene el valor a escribir.
Figura No. 6.26: Autómata instrucción read
97
6.27 AUTÓMATA Y PSEUDOCÓDIGO QUE PERMITE EVALUAR LAS
INSTRUCCIONES (GOSUB, GOTO)
Diagrama 7: Autómata de instrucciones que comienzan con la letra G
98
Figura No. 6.27: Pseudocódigo de ins trucciones que comienzan con la letra G
99
6.28 AUTÓMATA Y PSEUDOCÓDIGO QUE PERMITE EVALUAR LAS
INSTRUCCIONES (RANDOM, READ, RETURN)
Diagrama 8: Autómata de instrucciones que comienzan con la letra R
100
Figura No. 6.28: Pseudocódigo de instrucciones que comienzan con la letra R
101
RECOMENDACIONES
Este proyecto desarrolla un sistema compilador que permite generar código
ensamblador, manejando instrucciones Basic que se deben procesar o compilar para
luego generar o convertir su respectivo código ensamblador siempre y cuando no se
presenten errores de sintaxis.
Para futuros trabajos que tengan como base este proyecto se recomienda desarrollar un
módulo adicional para implementar la fase de generación de código máquina con
extensión *.HEX. Dado que la delimitación de este proyecto consistía en la generación
de código ensamblador, cuyo objetivo fue alcanzado satisfactoriamente. Con la finalidad
de brindar un mejor soporte a futuros proyectos se anexa toda la información referente a
los autómatas, pseudocódigo y diagramas de flujo de las instrucciones utilizadas en
ensamblador con sus respectivas sintaxis, además la codificación a lenguaje máquina.
Además todas las instrucciones no están implementadas para generar el código
ensamblador ya que nuestra delimitación era implementar las más utilizadas, pero se
dejo terminado el proceso de coger todas las instrucciones y verificar su sintaxis en el
código usuario, también para nuestro caso la asignación es simple, es decir, solo recibe
un parámetro o dos como máximo por la complejidad de transformarlo a su respectivo
código ensamblador, teniendo en cuenta las limitaciones con las que cuenta el
microcontrolador PIC 16f84, pero se dejo implementada la función de la asignación que
permite la combinación de todos los operadores aritméticos tales como la suma, resta,
multiplicación y división, utilizando árboles binarios e infinito número de términos. Hay
que tener en cuenta que este proyecto es un software totalmente abierto para mejorar
posteriores a su diseño inicial.
102
CONCLUSIONES
A través del presente proyecto, se efectuó la primera versión del software MicroPic
versión 1.0, el cual está basado en dos lenguajes de programación distintos tales como:
Borland C++ 5.02 y Visual Basic 6.0. El primero maneja todo el módulo para el
aprendizaje del software, es decir, quien maneja todas las etapas de recorrido, análisis
léxico, análisis sintáctico, análisis semántico e interpretación a código ensamblador y el
otro lenguaje es quien maneja el módulo de la interfaz de usuario.
MicroPic versión 1.0 refleja todas las ventajas e innovaciones planteadas en esta
investigación.
El diseño de este Software presentó ciertas dificultades al momento de manejar o definir
el entorno gráfico, ya que se quería que el usuario pudiera manipular los dos editores
desde una misma ventana y no desde diferentes, también que permitiera la presentación
de las variables, lexemas, etiquetas desde listas para poder observar sus características
más importantes, los criterios y el buen gusto para definir los colores están a la merced
del usuario.
MicroPic versión 1.0 es una herramienta que permite la traducción del código digitado
por el usuario en un lenguaje de alto nivel “instrucciones en lenguaje Basic” a otro
lenguaje de bajo nivel “ensamblador” esta conversión la realiza el lenguaje Borland C++
mediante el concepto de clase, estructuras, arreglos y apuntadores. El código fuente es
guardado en un archivo con extensión *.PIC y el código objeto con extensión *.ASM.
103
BIBLIOGRAFÍA
•
AHO SETHI ULLMAN, Compiladores Principios, Técnicas y Herramientas,
Pearson.
•
CHRISTIAN TAVERNIER, Microcontroladores Pic, Editorial Paraninfo.
•
JOSÉ ADOLFO GONZÁLEZ V., Introducción a los Microcontroladores, McGraw
Hill.
•
J. MARIA ANGULO USATEGUI, E. MARTÍN CUENCA Y J. ANGULO
MARTÍNEZ, Aplicaciones de los Microcontroladores Pic de Microchip, Editorial
McGraw Hill, 1998
•
ANGULO Y OTROS, Microcontroladores Pic, La solución en un solo chip,
Editorial Paraninfo
•
ANGULO Y OTROS, Microcontroladores Pic, Diseño de aplicaciones, Mc Graw
Hill
•
MPASM assembler. User’s Guide, Microchip
•
Curso Básico de Microcontroladores Pic. Cekit
•
MPLAB IDE User’s Guide, Microchip.
•
SANDERS, DONAL H., Informática Presente y Futuro, Editorial Mc Graw Hill,
México.
•
www.microchip.com
•
LUIS
FRINO,
Instrucciones
para
el
PIC16C84
y
PIC16F84,
http://www.frino.com.ar/basic1.htm
•
Basic Stamp BS2-IC, http://www.plazacolima.com/pagper/fuentesg/historia.htm
•
Basic Stamp 2, http://www.superrobotica.com/S310130.htm
104
MANUAL DE USUARIO
SOFTWARE COMPILADOR EN LENGUAJE DE ALTO NIVEL QUE GENERA
CÓDIGO ENSAMBLADOR PARA LA IMPLEMENTACIÓN EN
MICROCONTROLADORES PIC 16X
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMAS
CARTAGENA DE INDIAS D.T. Y C., JUNIO DE 2005
106
INTRODUCCIÓN
El software MCROPIC es una aplicación diseñada para manipular código escrito por
usuario, que utiliza un formato de instrucciones muy similar a las del Stamp Basic V2.1
que es un lenguaje para el manejo de Microprocesadores. Además el software permite
programar sin la necesidad de ser un experto en programación simplemente tener los
conocimientos básicos de Windows.
Con lo anteriormente aclarado este manual tendrá la capacidad de orientar al usuario
para el correcto manejo de las operaciones. El manual contiene información pertinente a
la instalación y manipulación del software y una detallada descripción de su interfaz.
El software maneja cinco fases o etapas fundamentales:
1. Manipulación de documentos (Nuevo, Abrir, Guardar o Actualización, Guardar
Como ó Copias de documentos, etc.).
2. Codificación de instrucciones y ejecución del documento.
3. Creación y muestreo del código ensamblador (Archivo *.ASM).
4. Muestreo de Características de Compilación
5. Ayuda (Acerca de MICROPIC, Contenido).
107
1. REQUERIMIENTOS MÍNIMOS DEL SISTEMA
MICROPIC es una aplicación basada esencialmente bajo Borland C++ que es un
lenguaje orientado a objetos de la cuarta ge neración que permite crear código objeto
*.exe compatible con la mayoría de las plataformas existentes en el mercado tales como
Microsoft Windows, Unix, Linux, entre otros sistemas operativos, por lo cual todo el
análisis y manipulación de código intermedio (lenguaje en ensamblador) esta basado
bajo ventanas MS-DOS. Aunque todo el diseño fue realizado bajo otro lenguaje de
cuarta generación como es Visual Basic 6.0 que crea código objeto *.exe que por lo
general se ejecutan sobre aquellas plataformas en las cuales se generaron.
Por lo tanto entre los requerimientos mínimos para que MICROPIC funcione
adecuadamente son los siguientes:
•
Sistema operativo: Windows NT, Windows XP, Windows Milenio, y la familia
de las plataformas Windows 9x.
•
Memoria: 64 MB, el agregado de más memoria hace que la compilación de
codificación extensa sea rápidas.
•
Procesador: familia de Procesadores Pentium II desde 400 Mhz y Familia de
Procesadores Pentium III y Pentium IV.
•
Microsoft Internet Explorer versión 4.0 y versiones superiores.
108
2. GUÍA DE INSTALACIÓN DE MICROPIC
Para el buen manejo de la aplicación MICROPIC.EXE se debe seguir cuidadosamente
los pasos de instalación. Si al seguir los pasos y se efectúa un error imprevisto por favor
consultar al soporte técnico de MIC ROPIC. Los pasos que debe seguir el usuario son los
siguientes:
1. Insertar el CD de instalación en la unidad CD - ROM de lectura de su equipo. El
programa de instalación se ejecutara automáticamente al leer el CD. Si por algún
motivo el computador en que se va a instalar el software tiene desactivada la opción
de ejecución inmediata del CD o auto - run, entonces se debe acudir a la información
del CD a través del explorador de Windows u otro programa y ejecutar la aplicación
de instalación SETUP.EXE como se muestra en la Figura No. 1 y seguir los pasos de
la instalación que le presenta asistente.
Figura No.1: Icono de instalación de MICROPIC.
2. Una vez inicializada la instalación le aparecerá la primera pantalla
Figura No.2: ventana de Inicialización
109
3. La instalación le estará mostrando una ventana de bienvenida a la configuración e
instalación del sistema MicroPic Versión 1.0, ver Figura No. 3.
Figura No. 3: Bienvenidos al programa de instalación.
4. Muestra el primer asistente que le guiará en el transcurso de la instalación (Figura
No. 4). En esta ventana se le pide al usuario que escoja la carpeta donde quiere que
se almacenen los archivos de instalación del software. Por ser una aplicación más
para su computador, la ruta que aparece por defecto es C:\Archivos de
programa \MicroPic, como ocurre cuando se desea instalar cualquier software en su
PC.
Figura No.4: Diálogo para seleccionar la ruta de instalación.
5. El directorio de instalación de la aplicación MicroPic tendrá el nombre de
“C:\Archivos de programa\MicroPic” que es donde estarán guardados los *.exe que
el software necesita para su correcta ejecución. El usuario está en la libertad de
110
cambiar dicha ruta dando clic en el botón “Cambiar directorio” y escogiendo la
carpeta deseada, como se muestra en la Figura No. 5.
Figura No. 5: Ventana para seleccionar la carpeta deseada
6. Una vez seleccionada la carpeta y comprobado si hay espacio en disco el usuario
debe proceder a iniciar la instalación del software dando clic en el botón Instalar, ver
Figura No.4. Si desea cancelar la instalación debe dar clic en el botón Salir.
7. En la secuencia de instalación el asistente pregunta si desea ingresar el software al
grupo de la barra de inicio de Windows (Figura No. 6). Presione el botón Continuar
para seguir con la instalación.
Figura No. 6: Ventana para agregar al grupo de programas existentes
111
Al iniciar la instalación el asistente le presentará una ventana de dialogo con una barra
de progreso indicando el avance de instalación de las diferentes librería necesarias para
la ejecución de MICROPIC.EXE hasta que ésta finaliza. Ver la Figura No 7.
Figura No. 7: Transcurso de la instalación
Antes de finalizar la instalación, el usuario puede detener la instalación y cancelarla. Si
esto ocurre el asistente le pedirá que confirme la acción (Figura No. 8).
Figura No.8: Confirmación de la cancelación de la instalación
Al dar clic el botón “Sí” se cancelará la instalación y, por el contrario, si se da clic en el
botón “No” la instalación continuará y finaliza con un mensaje. (Figura No. 9).
112
Figura No. 9. Confirmación de instalación completada.
Se recomienda reiniciar su equipo para actualizar la base de datos del sistema. Al
reiniciar el software estará listo para su ejecución. El asistente de instalación colocará
por defecto un acceso directo a la aplicación (MICROPIC.EXE) en la opción programas
del menú inicio de Windows.
113
3. MANEJO Y CARACTERÍSTICAS SISTEMA MICROPIC
3.1 INICIALIZACIÓN DEL SISTEMA MICROPIC
La primera interfaz que será vista por el usuario es la de inicio del sistema, en la cual se
indican algunos datos concernientes al software y sus autores, dando de igual manera la
bienvenida al usuario, esta ventana inicial tiene una duración de ejecución alrededor de
los 3 segundos sin ninguna manipulación de evento que pueda interrumpir la publicidad
del software y sus autores (ver Figura 10).
Figura No.10: Pantalla de inicialización y presentación
Una vez mostrada la ventana de inicialización y presentación de la aplicación MicroPic
versión 1.0, se prosigue a hacer visible el formulario (Software para el manejo de
Microprocesadores). Este formulario será la ventana “principal”. En este formulario
principal se puede tener acceso a los diferentes menús de operaciones.
El sistema esta constituido por una ventana principal que contendrá el desarrollo y la
presentación de operaciones que estará manipulando el sistema. Ver Figura No.11
114
Figura No. 11. Formulario Principal de MicroPic
El formulario Principal esta diseñado con un menú de opciones las cuales poseen cuatros
jerarquías operacionales o menú principal la cual se distribuye de la siguiente manera:
- Menú Archivos
- Menú Ver
- Menú Ejecutar
- Ayuda
Figura No. 12: Menú Principal de Operaciones
Además de estar constituidas por medio de Menú las operaciones, estas de igual forma
están disponibles de cómo acceso directo por medio de una barra de herramientas las
cuales contiene todas las operaciones definidas en los menús mostradas como botones de
comando que hacen más amigable la realización de acciones directas a través de un clic
115
del mouse o con un <ENTER> según la localización o el enfoque de los botones. Ver
Barra de Herramientas en la figura siguiente.
Figura No. 13: Barra de Herramientas de Operaciones
Esta es una especificación de la función que cumple cada uno de los botones que
conforman a la barra de herramientas del software Compilador MicroPic versión 1.0.
Este botón permite crear un nuevo documento o archivo fuente el cual tendrá la
extensión *.PIC.
Este botón permite abrir todos los documentos con extensión *.PIC existentes en
el sistema.
Este botón permite guardar los cambios realizados a los documentos abiertos, si
son por primera vez se abre la ve ntana Guardar como.
Este botón permite visualizar la tabla que enlista todas las variables declaradas
en el archivo fuente con sus características.
Este botón permite visualizar la tabla que enlista todos los lexemas digitados en
el archivo fuente con sus características y ubicación.
Este botón permite visualizar la tabla que enlista todas las etiquetas utilizadas en
el archivo fuente con sus características.
116
Este botón permite mostrar el código ensamblador como resultado de la
compilación del código fuente.
Este botón permite la compilación del código fuente.
Este botón permite la visualización de los autores de este software, versión y
otros detalles.
Este botón permite abrir las ayudas disponibles acerca del manejo y sintaxis de
las intrusiones que maneja MicroPic.
Este botón permite salir de la aplicación MicroPic.
Esta opción permite cambiar el estilo o la piel del
entorno gráfico.
3.2 MENÚ ARCHIVO
El Menú Archivo contiene las opciones esenciales para el manejo de los sistemas MCD
que el usuario va ha manipular, estas opciones son:
-
Menú Archivo
-
Submenú Nuevo
-
Submenú Abrir
-
Submenú Guardar
-
Submenú Guardar como
-
Submenú Cerrar
117
-
Submenú Salir
Figura No. 14. Despliegue del Menú Archivos
3.2.1 Submenú Nuevo
El submenú Nuevo tiene como principal característica de crear un nuevo documento. Por
lo cual se necesita que el usuario proporcione un nombre al nuevo documento con el
cual se guardará más adelante en un archivo plano con extensión *.pic además la
cantidad de conceptos (Nodos) con la cual se estará graficando el sistema a modelar.
Para tal fin el submenú Nuevo visualiza el formulario creación de documentos *.pic en
el cual se digitaliza el nombre del documento y se especifica el directorio en donde se
almacenará.
Figura No. 15. Ventana para guardar documentos
118
Con esta opción hay que tener cuidado, ya que si el documento que se va a crear existe,
enviará un mensaje para confirmar si desea reemplazar el archivo; si se escoge la opción
si se reemplazará el archivo de lo contrario permite cambiar el nombre o el destino del
archivo.
Figura No. 16: Confirmación de archivo existente
Esta ventana tiene la característica de ingresar el nombre del documento a través de una
caja de texto con etiqueta Nombre del archivo la cual permite el ingreso de los caracteres
tipo letras y números. El nombre del documento se digitaliza sin la necesidad de
colocarle la extensión *.PIC, ya que el sistema se encarga de adicionarlo. Además como
anteriormente se había mencionado en este formulario se especifica la ruta exacta en
donde se almacenara el documento. Según la ruta especifica el formulario recupera la
lista de los documentos *.PIC.
Solo digitalizando el nombre del documento y presionando la tecla guardar el
documento se almacenara en el directorio especificado.
El comando Cancelar es con el fin de cerrar el formulario Creación sin que este cause
alguna operación adicional.
Para manipular el código fuente de los documentos creados aparece una ventana con las
siguientes características:
119
Figura No. 17: Ventana de codificación y muestreo de lenguaje ensamblador
Caja de texto multilínea izquierda permite digitaliza del código fuente que el sistema
verifica su sintaxis para luego generar código ensamblador. Esta caja de texto de ingreso
esta limitada a 65535 caracteres. A partir de la digitalización del lenguaje de Micropic el
sistema guarda temporalmente el código de esta caja para traducirlo y mostrar el código
generado.
Caja de texto multilínea derecha permite el muestreo del código interpretado por el
sistema este código como anteriormente se ha hecho mención esta constituido en el
leguaje de bajo nivel ensamblador.
Control multilínea localizado en la parte inferior que se encarga de mostrar el resultado
de ejecutar el código fuente ingresado o recuperado por el usuario.
120
3.2.2 Submenú Abrir
El submenú Abrir se caracteriza por buscar los archivos que con anterioridad se han
creado o guardado, por lo cual al hacer clic sobre esta opción se realiza el llamado al
formulario de abertura de documentos guardados que por defecto.
Figura No. 18: Formulario para abrir documentos.
Este formulario esta diseñado con un control que enlista las carpetas en donde se pueden
buscar el archivo indicado, estos archivos tienen como característica la extensión *.PIC.
Además posee un control que muestra todos los archivos con esta extensión, cada uno de
estos archivos es un código fuente almacenado.
Solo señalando el archivo se activa el comando abrir con el cual se puede dar doble clic
o <ENTER> para ver la codificación almacenada. El comando Cancelar permite omitir
la operación de abertura de documentos por lo cual permite regresar a la pantalla
principal sin efectuarse alguna operación adicional. Método abreviado es Ctrl + A.
Si por cualquier motivo usted vuelve a intentar abrir un documento que esta actualmente
abierto este le envía un mensaje de verificación. Si escoge la opción si reemplazará al
121
archivo con el que se abrirá sin tener en cuenta los cambios no guardados de lo contrario
quedará el actual. Ver figura No. 19.
Figura No. 19: Verificación de apertura de archivo abierto.
3.3.3 Submenú Guardar
El submenú Guardar se encarga de guardar un archivo que ya ha sido abierto esto quiere
decir que esta operación se encarga de actualizar el documento que con anterioridad fue
almacenado. Al hacer clic sobre esta opción simplemente el sistema ejecuta la operación
de guardar o el de sobrescribir en el caso que ya exista este archivo y lo que se desea es
actualizar los cambios realizados en el código fuente. El método abreviado es Ctrl + G.
3.3.4 Submenú Guardar como
Este submenú se encarga de guardar los cambios realizados de un archivo en un
directorio destino diferente al actual si se desea o cambiar el nombre del documento o
archivo que se está trabajando. El método abreviado es Ctrl + D.
La ventana que se despliega al elegir esta opción es la misma que se abre al dar clic en la
opción Nuevo del menú Archivo.
122
3.3.5 Submenú Cerrar
Este submenú se encarga de cerrar el documento actualmente abierto. En el caso que se
cierre el documento y se halla efectuado cambios se activara un mensaje de
confirmación para ver si se desean guardar los cambios o no en el archivo, para mayor
tranquilidad de algunos casos se recomienda guardar todos los cambios efectuados
haciendo clic sobre la opción Guardar. Para ejecutar esta operación puede abreviarla
presionando la tecla Alt + A seguida de la tecla “C” o Ctrl + F4.
Figura No. 20: Confirmación de Guardar cambios efectuados al archivo.
3.3.6 Submenú Salir
El submenú Salir realiza la operación de Finalizar por completo el programa. Al hacer
clic sobre el menú salir se cerrará todos los formularios abiertos en el momento y si el
archivo tiene cambios y no se han guardado se envía un mensaje de confirmación al
igual que en el submenú visto anteriormente. Ver figura No. 20.
3.4 MENU VER
El menú Ver posee las opciones o submenú de eventos de:
-
Menú Ver
123
-
Submenú Barra de menú
-
Submenú Características del código
- Submenú Variables
- Submenú Lexemas
- Submenú Etiquetas
- Submenú Archivo *ASM
Figura No. 21 Menú Ver del formulario principal
3.4.1 Submenú Barra de Menú
Este submenú determina si el sistema realiza la opción de mostrar u ocultar la barra de
herramientas en donde se encuentra las operaciones de los menús principales para la
manipulación de archivo y ejecución de código fuente.
3.4.2 Submenú Características del Código
Es un submenú de nivel secundario que contiene la lista de las características esenciales
al ejecutar un documento con sintaxis correcta este menú es activo solo cuando se ha
compilado el documento fuente, en el caso contrario este menú permanece inactivo solo
hasta ejecutar la operación de compilación.
124
3.4.2.1 Submenú Variables
Este submenú se encarga de mostrar un formulario con todas las variables declaradas
dentro del código fuente de un documento activo y ejecutado. El formulario mostrará las
variables declaradas con sus respectivas variables genéricas que manipulará el código
ensamblador. Ver Figura No. 22.
Figura No. 22: Formulario lista de variables declaradas
3.4.2.2 Submenú Lexemas
Este submenú se encarga de mostrar un formulario con todos los lexemas digitalizados
dentro del código fuente de un documento activo y ejecutado. El formulario mostrará los
lexemas con las características del lexema encontrado, el tipo de lexema, la fila y
columna dentro del código fuente en donde fue almacenada. Ver Figura No. 23.
125
Figura No. 23: Lista de lexemas del código fuente
3.4.2.3 Submenú Etiquetas
Este submenú se encarga de mostrar un formulario con todas las etiquetas digitalizados
dentro del código fuente de un documento activo y ejecutado. El formulario mostrará las
etiquetas declaradas con sus respectivas etiquetas genéricas que manipulará el código
ensamblador. Ver Figura No. 24.
Figura No. 24: Lista de etiquetas del código fuente
126
3.4.2.4 Submenú Archivo *.ASM
Este menú se encarga de mostrar una caja de texto con todo el código ensamblador
generado por la compilación del código fuente. El código ensamblador se guarda
automáticamente en la misma carpeta donde encuentra el archivo fuente y se almacena
con el mismo nombre pero con la extensión *.ASM, el método abreviado de esta opción
es presionando la tecla F9. Ver Figura No. 25.
Figura No. 25: Caja que contiene el código ensamblador.
3.5 MENÚ EJECUTAR
El menú ejecutar es una de las opciones esenciales para la manipulación y construcción
del código intermedio en el cual se basa todo el sistema este menú esta constituido por:
-
Menú Ejecutar
-
Submenú Compilar.
127
Figura No. 26: Menú de opciones Ejecutar
3.5.1 Submenú Compilar
Este submenú se encarga de recolectar el código fuente almacenado en la caja de texto e
ingresarlo en un archivo plano para luego ejecutar el analizador léxico, sintáctico y
semántico. Además de crear un archivo con extensión *.ASM que posteriormente se
puede mostrar en pantalla.
La compilación de esta operación esta determinada por un tiempo en el cual la lista de
respuesta se hace invisible y la caja de texto del código ensamblador cambia de color
indicando que fase de análisis esta en ejecución.
3.6 MENÚ AYUDA
El menú ayuda posee las opciones o submenú de eventos tales como:
-
Menú Ayuda
-
Submenú Acerca de Micropic...
-
Submenú Contenido
Las cuales permanecen activas mientras no este abierto documento alguno pero si se
hace acción de estas operaciones se desactiva el menú Ayuda haciendo que no se pueda
hacer uso de una operación que sé esta ejecutando.
128
Figura No. 27: Despliegue de opciones del Menú Ayuda
3.6.1 Submenú Acerca de MicroPIC 1.0
Este submenú se encarga de presentar el nombre de la aplicación y su versión, los
autores y unas advertencias acerca del producto o software por la reproducción y
distribución sin el consentimiento o autorización de los autores.
Figura No. 28: Formulario Acerca de MicroPIC 1.0
3.6.2 Submenú Contenido
Este submenú se encarga de presentar una guía del manejo y las características con las
que trabaja el programa MicroPic versión 1.0 esta presentación se hace a través de un
129
formulario que despliega varias páginas htm describiendo las partes esenciales del
software y su manejo.
Al momento que el formulario contenido sé esta ejecutando solo se puede establece esta
única operación ya que esta operación inhabilita las demás operaciones como son las del
menú principal: Menú Archivos, Menú Ver, Menú Ejecutar y el Menú Ayuda. Al salir
de este formulario el menú principal puede establecerse a su normalidad y de esta
manera llegar a procesarse cualquiera de las opciones visibles.
Figura No. 29: Formulario contenido
130
MANUAL DE SISTEMA DEL PROYECTO MICROPIC
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMAS
CARTAGENA DE INDIAS D.T. Y C., JUNIO DE 2005
132
1. SOFTWARE COMPILADOR EN LENGUAJE DE ALTO NIVEL
QUE GENERA CÓDIGO ENSAMBLADOR PARA LA
IMPLEMENTACIÓN EN MICROCONTROLADORES PIC 16X
1.1. GENERALIDADES
El sistema esta implementado bajo la programación de los lenguajes de cuarta
generación como es el caso de Visual Basic 6.0 en el cual se estuvo trabajando toda la
interfaz de usuario. La programación de la interfaz de usuario se logro bajo
conocimientos básicos de la programación de Visual Basic. Además sé eligió el
compilador de Visual Basic 6.0 por que al momento de programar resultado es un
lenguaje muy amigable. Por otra parte se describe la programación de MicroPic v1.0
bajo él intérprete de lenguaje Borland C++ Versión 5.02 ya que este suministra una
programación jerárquica, es decir, orientado a objeto de formación de estructuras de
cuarta generación de intérpretes de código intermedio.
La codificación del desarrollo y manejo del código usuario esta dada bajo el lenguaje
Borland C++, esto quiere decir, que todas las etapas de recorrido, análisis léxico, análisis
sintáctico, análisis semántico e interpretación a código ensamblador fue diseñada bajo la
programación de Borland C++, el llamado de ejecutables construidos en este lenguaje se
realiza desde la interfaz de usuario construida en Visual Basic.
Interactuando estos dos lenguajes se logró el producto final del software MicroPic
versión 1.0. Visual Basic aportando un entorno amigable al usuario y Borland C++
ejerciendo las operaciones a través de ventanas de plataformas MS-DOS.
133
2. COMPILADOR GENERADOR DE CÓDIGO ENSAMBLADOR
2.1 PROGRAMA PRINCIPAL
El compilador o intérprete de código intermedio a lenguaje ensamblador fue construido
como anteriormente se mencionó en Borland C++ 5.02. Para ello se construyeron
librerías individuales en las cuales se hace uso en conjunto en el momento de agilizar
una compilación de código fuente.
Entre el conjunto de librerías se construyeron:
-
Librerías para la declaración de clases o estructuras.
-
Librerías para la formulación de autómatas o eventos de las estructuras antes
definidas.
Cada evento de una clase se organizó incluyendo cada una de estas funciones en
librerías con características similares como la inicial de su nombre. Ver figura No. 1.
A continuación se presenta el código principal encargado de utilizar las clases o
estructuras, para así construir objetos y acceder a los diferentes eventos de las clases o
funciones de las estructuras. El programa y la codificación principal se encuentran
localizadas en un archivo con una extensión característica de Borland C++ (*.CPP)
llamado “Struct Semantico.cpp” a partir de la cual se realizan todas las operaciones de
recolección de datos, búsqueda y análisis.
134
//LIBRERIAS NECESARIAS PARA LA EJECUCION DE PROCEDIMIENTOS
//Librerías propias de Borland C++
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
#include <string.h>
//Librerías para la declaración de clases
#include <ClaseEti.h>
#include <ClaseVar.h>
#include <ClaseLex.h>
#include <ClaseAut.h>
//Librerías para la realización de Autómatas
#include <Automata_A.h>
#include <Automata_B.h>
#include <Automata_C.h>
#include <Automata_D.h>
#include <Automata_E.h>
#include <Automata_F.h>
#include <Automata_G.h>
#include <Automata_H.h>
#include <Automata_I.h>
#include <Automata_L.h>
#include <Automata_M.h>
#include <Automata_N.h>
#include <Automata_O.h>
#include <Automata_P.h>
#include <Automata_R.h>
#include <Automata_S.h>
#include <Automata_T.h>
#include <Automata_V.h>
#include <Automata_W.h>
Figura No. 1: Librerías de encabezamiento del programa principal
135
Llamado de librerías con extensión (*.h) útiles para la compilación del programa
principal de las cuales se incluyen las estructuras necesarias para la creación de eventos,
entre ellas se incluyen la lista de errores, la lista de variables, la lista de lexemas e
información de las palabras reservadas del lenguaje.
//***************************************\\
//********Programa Principal*********\\
//***************************************\\
void main()
{
//Limpiar Pantalla MS-DOS
clrscr();
//Declaración y construcción del Objeto AUTOMATAS
AUTOMATAS Obj;
//Llamado al evento BUSCA_LEXEMA de la Clase AUTOMATAS
Obj.BUSCA_LEXEMAS();
//Llamado al evento PRINCIPAL de la Clase AUTOMATAS
Obj.PRINCIPAL();
//*** Fin del Programa Principal ***//
return;
}
Figura No. 2: Programa principal realizador de operaciones
En el programa principal se describe un objeto de la clase AUTOMATAS la cual hereda
los atributos y eventos de las otras estructuras y en la cual se hace el aprendizaje del
compilador Micropic v1.0. El objeto declarado hace referencia a la función
BUSCA_LEXEMAS() que hace la búsqueda de los lexemas incluidos en el archivo
plano codigofuente.txt para luego hacer referencia al evento PRINCIPAL() que se
encarga
de
realizar
los
analizadores
sintáctico
simultáneamente.
136
y
semántico
que
trabajan
2.2 DECLARACION DE ESTRUCTURAS
Las clases en C++ son definidas de dos formas una de ellas es por medio de la palabra
reservada class que se caracteriza por que las variables declaradas dentro de ella son
tomadas por defecto privadas esto limita a que se definan los eventos externos con la
palabra reservada public.
Por otra parte, las clases en C++ también se pueden definir con la palabra reservada
struct que por defecto todas sus variables son tomadas de manera publica por lo cual se
entiende que sus eventos privados son definidos con la palabra reservada private. Para
la codificación actual utilizamos clases bajo la definición de la palabra reservada
STRUCT.
2.2.1 Estructura lista de etiquetas
struct LISTA_ETIQUETAS
{
char *Eti; //Nombre de la etiqueta
char IdEti[10]; //Nombre genérico dado a la etiqueta
struct LISTA_ETIQUETAS *s; //Etiqueta siguiente
};
Figura No. 3: Estructura de lista de etiquetas
La estructura o clase LISTA_ETIQUETAS consta de tres campos, dos de tipo cadena en
los cuales se almacenará el nombre de la etiqueta y el nombre genérico de la etiqueta
respectivamente, el nombre genérico de la etiqueta permitirá identificar a una etiqueta
cuando se encuentre codificada en el lenguaje ensamblador. Y el tercer campo es un
137
puntero que guarda la dirección de la siguiente etiqueta, estableciendo de esta manera el
tratamiento de una lista enlazada sencilla o simple.
2.2.2 Estructura lista de variables
struct LISTA_VARIABLES
{
char *Var; //Nombre de la Variable lexema
char *TipVar; //Tipo de Variable encontrada
char IdVar[10]; //Nombre genérico dado a la variable
float ValVar; //Valor de la variable
struct LISTA_VARIABLES *s; //Variable siguiente
};
Figura No. 4 Estructura de lista de variables
Clase o estructura LISTA_VARIABLES esta implementada en una Lista Enlazada
Sencilla de Variables la cual contiene cinco campos tres de tipo cadena en los cuales se
almacenara el nombre de la variable, el tipo de la variable y el nombre genérico de la
variable respectivamente, el nombre genérico de la variable permitirá identificar a una
variable cuando se encuentre codificada en el lenguaje ensamblador, el cuarto campo
contiene el valor con el cual se inicializa la variable y si no la inicializa por defecto en
cero, además el último de los campos es un puntero que almacena la dirección de la
siguiente variable.
138
2.2.3 Estructura Variables
struct VARIABLES
{
char c; //Guarda un carácter
struct VARIABLES *s; //Carácter siguiente
};
Figura No. 5: Estructura de creación de variable
La clase o estructura VARIABLES esta conformada por dos campos, uno de tipo cadena
en el cual se almacenara temporalmente los caracteres de los lexemas encontrados y esta
implementada con el concepto de lista enlazada y el otro campo es un apuntador que
almacena la dirección del siguiente carácter.
2.2.4 Estructura Lexemas
struct LEXEMAS
{
char *lex; /Nombre del lexema
int tip; //tipo de lexema
long fil; //fila en donde se encuentra
long col; //columna en donde se encuentra
long posi; //posición inicial
long posf; //posición final
struct LEXEMAS *sig; //lexema siguiente
};
Figura No. 6: Estructura de características de lexemas
139
La clase o estructura LEXEMAS consta de siete campos, uno de tipo cadena que
almacenara el nombre del lexema encontrado, el segundo es de tipo entero que permitirá
almacenar el tipo del lexema encontrado y cuatro de tipo long (fil, col, posi, posf), donde
los dos primeros permiten almacenar la fila y la columna donde se encuentra el lexema,
los otros dos son la posición donde inicia y la posición donde finaliza el lexema. Él
último campo es un puntero el cual guarda la dirección del siguiente lexema a tratar.
2.2.5 Clase autómatas
Esta es la clase principal la cual se encarga de realizar todas las operaciones básicas del
compilador MICROPIC tales como:
-
Análisis Léxico
-
Análisis sintáctico
-
Análisis semántico
-
Generador de código
Para establecer estas operaciones la clase AUTOMATAS hace referencia a las demás
estructuras utilizando el concepto de herencia de atributos.
-
ESTRUCTURA VARIABLES
-
ESTRUCTURA LISTA_VARIABLES
-
ESTRUCTURA LISTA_ETIQUETAS
-
ESTRUCTURA LEXEMAS
En esta estructura se definen todos los autómatas que determinan el tipo de lenguaje a
utilizar en software MicroPic v 1.0 entre los eventos de la clase autómatas se caracteriza
140
el procedimiento SINTACTICO() que se encarga de llamar y verificar que una línea de
código sea uno de los autómatas preescrito por el intérprete de MicroPic 1.0. A
continuación la declaración de la clase AUTOMATAS.
class AUTOMATAS
{
private:
//apuntador a archivo fuente (*.txt) y archivo ensamblador (*.asm)
FILE *f1,*fasm;
// x = variable para realizar ciclos
// Cond = indica la cantidad de condicionales encontrados
// Ciclo = indica la cantidad de ciclo repetitivos encontrados
// OpMulti = cantidad de múltiplo encontrados
// OpDivi = cantidad de cocientes encontrados
int x, mostrar, Cond, Ciclo, OpMulti, OpDivi;
//car = almacena el carácter capturado desde el archivo fuente
char car;
//Variable que contiene números convertidos en hexadecimal
char *NumHex;
//código ascii de un carácter capturado
//salir = variable para romper ciclos repetitivos
//Bandera = indica la operación realizada
int ascii,salir,cont,Bandera;
//Fila y columna en donde se encuentra un lexema
//resp = índice que indica que error se produjo
//conEti = Cantidad de etiquetas
long fila,columna,resp,contEti,Tempausa;
//Posición inicial y final de un lexema dentro del código fuente
//etapa determina la profundidad del árbol de asignación de variables
long posini,posfin,etapa;
//Declaración de Objetos de la Clase LEXEMAS
LEXEMAS *Ini,*Fin,*Rec,*Ant,*Nuevo,*rastro,*RecAux;
//Declaración de Objetos de la estructura VARIABLES
VARIABLES *vari,*nuev,*ulti;
//Declaración de Objetos de la estructura LISTA_VARIABLES
LISTA_VARIABLES *Vari,*Varf,*Varr,*Varn;
//Declaración de Objetos de la estructura LISTA_ETIQUETAS
LISTA_ETIQUETAS *Etiq,*Etif,*Etir,*Etin;
//Declaración de Objetos de la estructura ARBOL_ASIGNACION
ARBOL_ASIGNACION *Anuevo,*Araiz,*Asecun,*Arec;
141
//Variable de chequeo de valores
char *OffSet;
public:
AUTOMATAS(); //Constructor de la Clase
//Busca si existe una etiqueta en la lista de etiquetas
LISTA_ETIQUETAS *BUSCA_ETIQUETAS(char *identificador);
//se encarga de Buscar los lexemas en el código fuente
void BUSCA_LEXEMAS();
//Busca si una Variable existe en la lista de Variables
LISTA_VARIABLES *BUSCA_VARIABLES(char *VARI);
//verifica que un valor numérico este dentro de los parámetros indicados
void CONSTANT_NUMERIC(int Mini,int Maxi);
//evento de la clase autómatas que verifica la sintaxis correcta
//de una expresión condicional cuando se desconoce el numero de
parámetros
void CONDICION();
//evento de la clase autómatas que verifica la sintaxis correcta
//de una expresión condicional utilizando dos parámetros referencia
void CONDICIONES();
//verifica la sintaxis correcta de un condicional (IF THEN...END IF)
void CONDICIONAL();
//Verifica la sintaxis de las variables declaradas en el código fuente
void DECLARACION();
//Se encarga de buscar y determinar lexemas tipo variables y números
void IDENTIFICADOR_NUMERO();
//se encarga de determinar los lexemas tipo texto
void IDENTIFICADOR_TEXTO();
//verifica parámetros de las funciones de entrada/salida de datos por puerto
void INOUTDATA(long IndicaFila,int Oper);
//verifica la sintaxis de los parámetros de la función (BRANCH)
void LISTA_PARAMETROS(char *SimIni,char *SimFin);
//verifica la secuencia de parámetros que pueden ser
//variables, números o expresiones aritméticas
void
LISTA_VARI_CONS_EXPRE(char
*SimIni,char
*SimFin,long
mini,long maxi);
//Verifica la lista de parámetros LCD(IN/OUT)
void LISTDATA(long IndicaFila);
//evento que verifica dos parámetros (Nota,Periodo), [Nota,Periodo]
void NOTA_PERIODO(long IndicaFila,char *LimIni,char *LimFin);
//verifica parámetros que pueden ser variables, números y expresiones
//dentro de un rango de intervalos proporcionados (min,max)
void OPERACIONES(long min,long max);
142
//determina los lexemas operador aritmético, lógicos y símbolos
void OPERADOR_SIMBOLO();
//función que hace el llamado a los analizadores
void PRINCIPAL();
//imprime mensaje al compilar
void PRINT(long posición);
//recupera todos los lexemas de la lista que esta guardada en la memoria.
void RECUPERA_LEXEMA(long IndicaFila);
//analizador sintáctico
void SINTACTICO();
//verifica parámetro de tipo variables y numero dentro de un intervalo
void VARIABLES_CONTANTES(long IndicaFila,long mini,long maxi);
//Determina el valor decimal de un numero entero o hexadecimal
long VERIFICA_NUMERO(char *Num);
//método de búsqueda de un árbol binario en in-orden (adicional)
long BUSQUEDA_INORDEN(ARBOL_ASIGNACION *árbol);
//método de búsqueda de un árbol binario en pre-orden (adicional)
long BUSQUEDA_PREORDEN(ARBOL_ASIGNACION *árbol);
//método de búsqueda de un árbol binario en post-orden (adicional)
long BUSQUEDA_POSTORDEN(ARBOL_ASIGNACION *árbol );
//convierte un numero decimal en hexadecimal en ensamblador
void CONVERTIR_HEXADECIMAL(long numero);
//verifica asignación a través de un árbol binario de búsqueda
void ASIGNACION();
//verifica que se cumpla la asignación de solo dos operandos ya sean de tipo
//variable o número a otra exclusivamente de tipo una variable, cumpliendo
//todas las características de las operaciones aritméticas.
void ASIGNACION_SIMPLE();
void AUXIO(); //función auxio propia del lenguaje
void BRANCH(); //función branch propia del lenguaje
void COUNT(); //función count propia del lenguaje
void DTMFOUT(); //función dtmfout propia del lenguaje
void DEBUG(); //función debug propia del lenguaje
void ETIQUETAS(); //función para la creación de etiquetas
void EEPROM(); //función eeprom propia del lenguaje
void EXIT(); //función exit propia del lenguaje
void FOR_NEXT(); //función for_next propia del lenguaje
void GOTO(); //función goto propia del lenguaje
void GOSUB(); //función gosub propia del lenguaje
void HIGH(); //función high propia del lenguaje
void INPUT(); //función input propia del lenguaje
void I2CIN(); //función i2cin propia del lenguaje
void I2COUT(); //función i2cout propia del lenguaje
143
void LCDCMD(); //función lcdcmd propia del lenguaje
void LCDIN(); //función lcdin propia del lenguaje
void LCDOUT(); //función lcdout propia del lenguaje
void LOW(); //función low propia del lenguaje
void LOOKDOWN(); //función lookdown propia del lenguaje
void LOOKUP(); //función lookup propia del lenguaje
void MAINIO(); //función mainio propia del lenguaje
void OUTPUT(); //función output propia del lenguaje
void OWIN(); //función owin propia del lenguaje
void OWOUT(); //función owout propia del lenguaje
void PAUSE(); //función pause propia del lenguaje
void RANDOM(); //función random propia del lenguaje
void READ(); //función read propia del lenguaje
void RETURN(); //función return propia del lenguaje
void SLEEP(); //función sleep propia del lenguaje
void SOUND(); //función sound propia del lenguaje
void STOP(); //función stop propia del lenguaje
void TOGGLE(); //función toggle propia del lenguaje
void WRITE(); //función write propia del lenguaje
};
Figura No. 7: Clase principal autómatas
2.3 LISTA O TABLA DE ERRORES
Arreglo Bidimensional de tipo cadena el cual contiene la descripción especifica de los
posibles errores que se pueden encontrar al momento de analizar el código fuente o
código de usuario, es un arreglo de tipo char de 39 filas por tamaño de 50 caracteres
cada una de las filas.
144
char errores[39][50]={
"Nulo",
"Correcto",
"Variable no definida",
"Se espera operador",
"Faltan parámetros",
"Identificador, numero u operador desconocido",
"Se espera Identificador o Numero",
"Redundancia de Variable",
"Se espera Identificador",
"Falta tipo de dato",
"Se espera palabra reservada",
"Error de Sintaxis",
"Se espera etiqueta",
"Verificar parámetros",
"Se espera separador",
"Valor numérico entre (0-65535)",
"Valor numérico fuera del intervalo",
"Se espera paréntesis",
"Lexema desconocido del lenguaje",
"Se espera símbolo '()','[]'",
"Se espera valor numérico",
"Faltan parámetros o fuera de línea",
"Valor numérico entre (0-15)",
"Valor numérico entre (0-255)",
"Valor numérico entre (1-65535)",
"Se espera operador de igualdad '='",
"Se espera palabra reservada 'To'",
"Instrucciones con salto de línea",
"Se espera palabra reservada 'NEXT'",
"Se espera variable después del 'NEXT'",
//0
//1
//2
//3
//4
//5
//6
//7
//8
//9
//10
//11
//12
//13
//14
//15
//16
//17
//18
//19
//20
//21
//22
//23
//24
//25
//26
//27
//28
//29
"No coinciden los tipos de datos",
"Se espera operador relacional",
"Se espera palabra reservada THEN",
"Se espera palabra reservada ENDIF",
"Los factores deben ser tipo BYTE",
"El producto se debe almacenar en entero",
"División entre cero",
"Inicializar variable (var = 1)",
"Limite de variable sobrepasado" };
//30
//31
//32
//33
//34
//35
//36
//37
//38
Figura No. 8: Lista o tabla de errores
145
2.4 LISTA PALABRAS RESERVADAS
Es un arreglo matricial de tipo cadena que guarda todas las palabras reservadas
utilizadas por el compilador MICROPIC. En la lista de palabras reservadas para el
compilador Micropic existe un número limite definido por la variable max = 50 y un
tamaño de la palabra no mayor de 10 caracteres.
char reservadas[Max][10]={
"Declare",
//0
"End",
//1
"If",
//2
"Then",
//3
"Endif",
//4
"For",
//5
"To",
//6
"Step",
//7
"Next",
//8
"Int",
//9
"Byte",
//10
"Return",
//11
"Goto",
//12
"Input",
//13
"Output",
//14
"Count",
//15
"Auxio",
//16
"Return",
//17
"Mainio",
//18
"Stop",
//19
"Pause",
//20
"Exit",
//21
"Low",
//22
"High",
//23
"Toggle",
//24
"Branch",
//25
"Gosub",
//26
"Dtmfout",
//27
"Lcdcmd",
//28
"Dec",
//29
"Hex",
//30
146
"Bin",
"Str",
"Lcdin",
"Lcdout",
"Text",
"Rep",
"I2cin",
"I2cout",
"Lookdown",
"Lookup",
"Owin",
"Owout",
"Read",
“Write”,
"Sleep",
"Sound",
"Else",
"EndDeclare",
"Random"
};
//31
//32
//33
//34
//35
//36
//37
//38
//39
//40
//41
//42
//43
//44
//45
//46
//47
//48
//49
Figura No 9: Lista de palabras reservadas para MicroPic v 1.0
2.5 TIPO DE LEXEMA
Los tipos de lexemas utilizados para el software compilador MicroPic versión 1.0 están
determinados por una constante numérica. Él número total de tipos de lexemas
encontrados en el lenguaje es de once (11) y están comprendidos desde el 1 hasta el 11,
ver relación en la siguiente:
147
TIPO DE LEXEMA
CONSTANTE NUMERICA
Identificador
1
Palabra Reservada
2
Número
3
Desconocido
4
Operador Aritmético
5
Operador Relacional
6
Operador Lógico
7
Símbolo
8
Tipo de Datos
9
Cadena de Texto
10
Etiquetas
11
Tabla No. 1: Lista de lexemas y Constantes de identificación
2.5 MANEJO DE CODIFICACION IMPORTANTE
A continuación se hace referencia a la codificación más importante entre ellas se
muestran las funciones mas utilizadas al momento de recuperación, creación de lexemas
y analizadores del lenguaje. Las funciones más utilizadas son:
-
BUSCA_LEXEMAS()
-
BUSCA_ETIQUETAS()
-
BUSCA_VARIABLES()
-
RECUPERA_LEXEMA()
148
void AUTOMATAS::BUSCA_LEXEMAS(){
contEti = 0;
//---Lectura del archivo fuente---\\
f1 = fopen("CodigoFuente.txt", "r");
//Verifica si no hubo errores al abrir el archivo
if(f1==NULL)
{
exit(0);
}
//Inicializa posición de lexemas
posfin=0;
//Inicializa numero de la línea
fila=1;
//Inicializa numero de la columna
columna=0;
//Lectura de carácter
car=fgetc(f1);
//código Ascii del carácter
ascii = car;
//Recorrido del archivo fuente
while(car!=EOF){
//Identificador de variables, Etiquetas y palabras reservadas
if(((65 <= ascii && ascii <= 90)||ascii==209) ||
((97 <= ascii && ascii <= 122)||ascii==241))
{
//llamado a función que busca variable y números
IDENTIFICADOR_NUMERO();
//Ciclo para el recorrido de palabras reservadas
for(cont=0;cont<Max;cont++)
{
//verifica si es una palabra esta guarda en la lista de palabra reservada
if(strcmpi(reservadas[cont],Fin->lex)==0)
{
salir=3; //Rompe el ciclo
break;
}
}
Figura No. 10: Autómata para la búsqueda e identificación de lexema
149
LISTA_ETIQUETAS *AUTOMATAS::BUSCA_ETIQUETAS(char *identificador)
{
LISTA_ETIQUETAS *VariabEti;
int salida; //variable que indica salida del ciclo
char *etiqueta; //Variable para guardar el parámetro enviado
etiqueta = new char[strlen(identificador)+1];
Etir = Etiq; //Apuntadores a lista de etiquetas
salida = 0; //Inicializa indicador de ciclo activo = 0
sprintf(etiqueta,"%s:",identificador);//Asigna parámetro a la variable
//Ciclo para el recorrido de lista de etiquetas
while(Etir != NULL && salida == 0){
if(strcmpi(Etir->Eti,etiqueta) == 0) //Verifica etiqueta
{
VariabEti = Etir;
salida = 1;
break;
}
else
Etir = Etir->s;
}
//Verifica Si existe etiqueta
if(salida == 0)
{ resp = 0;//"Nulo" }
else
{resp = 1;//"Correcto"}
//Retorna la etiqueta encontrada
return VariabEti;
}
Figura No. 11: Autómata que verifica las etiquetas
Este autómata tiene la característica de recibir un parámetro, el cual es el lexema
encontrado y luego proceder a verificar si el lexema existe en la lista de etiquetas que
esta almacenada.
150
LISTA_VARIABLES *AUTOMATAS::BUSCA_VARIABLES(char *VARI)
{
//Variable de retorno de respuesta
LISTA_VARIABLES *valorvariable;
//Indicador de variable encontrada
Bandera = 0;
//Apuntador a la lista de variables
Varr=Vari;
while(Varr!=NULL) //Ciclo de recorrido de lista de variables
{
//compara la nueva varia VARI con la lista ya existentes
if(strcmpi(Varr->Var,VARI)==0) //verifica si existe
{
Bandera = 1; //Variable indica variable encontrada
valorvariable = Varr; //variable encontrada
break; //Rompe ciclo
}
else
Varr=Varr->s; //Apunta a la siguiente nodo
}
if(Bandera == 1) //verifica si fue encontrado
{
resp=1; //Correcto
}
else
{
resp=2; //No esta definida variable
}
//retorna variable de la lista
return (valorvariable);
}
Figura No. 12: Autómata que verifica si un lexema existe en la lista de variable
Función de la clase autómata que recibe un parámetro tipo char para luego verificar si
este parámetro existe en la lista de variables declaradas en el código fuente digitalizado
por el usuario.
151
//*******************************************************************
// AUTOMATAS PARA RECUPERAR LEXEMA SIGUIENTE
//*******************************************************************
void AUTOMATAS::RECUPERA_LEXEMA(long IndicaFila)
{
if(RecAux->sig != NULL) //Verifica nuevos Lexemas
{
//Posicionamiento en el siguiente lexema
RecAux = RecAux->sig;
//Verifica si el lexema encontrado pertenece o esta en la misma fila
if(IndicaFila == RecAux->fil)
{
resp = 1; //"Correcto"
}
else
{
resp = 11; //"Error de sintaxis"
}
}
else
{
resp = 4; //"Faltan parámetros"
}
}
Figura No. 13: Autómata encargado de recupera de la lista de lexemas
La función RECUPERA_LEXEMA() es la encargada de verificar si existen lexemas en
la lista guardada, además de verificar si el lexema siguiente pertenece a la misma fila del
lexema anterior encontrado. En el caso de encontrar un nuevo lexema en la lista la
función actualiza el apuntador Rec que es el encargado de recorrer la lista de lexemas.
152
3. CODIFICACION DE INTERFAZ DE USUARIO
3.1 EJECUCIÓN DE FUNCIÓN STRUCT SEMÁNTICO
Private Sub Menu_Compilar_Click(): Evento clic de la lista de menú Ejecutar que
realiza el llamado del ejecutable Struct Semantico.exe el cual es el encargado de realizar
la compilación del código digitalizado en la caja de texto txtcodigofuente.txt. Para esto
se verifica que este el formulario codificacion.frm abierto identificado con la variable
formulariocodigo si la respuesta es cierta se guarda la digitalización del código en un
archivo de texto llamado CodigoFuente.txt el cual utiliza struct semantico.exe para
interpretar su sintaxis.
Private Sub Menu_Compilar_Click()
'verifica sí el formulario de codificación
'de lenguaje esta abierto
If FormularioCodigo = 1 Then
'La ejecución del programa Struct semántico
'esta activo o inactivo
EjeActiva = 0
'inicializa cantidad de variables en cero
ContVari = 0
'inicializa barra de progreso en cero
Codificacion.ProBar1.Value = 0
'lista de resultados invisible
Codificacion.MsgError.Visible = False
'caja de texto de lenguaje ensamblador limpia
Codificacion.txtEnsamblador.Text = ""
'abre archivo codigofuente y lo limpia para guardar
Open "CodigoFuente.txt" For Output As #4
'guarda texto de la caja de entrada en el archivo abierto
Print #4, Codificacion.txtCodigofuente1.Text
'cierra el archivo
Close #4
153
'llamado de ejecutable de plataforma MS-DOS
Mostrar = Shell(App.Path & "\Struct semantico.exe", 0)
End If
'salida de procedimiento
End Sub
Figura No. 14: Función que hace el llamado al ejecutable de MS-DOS
3.2 FUNCION MOSTRAR_MENSAJE
Private Function MOSTRAR_MENSAJE() As String: la compilación devuelve un
mensaje agregado en un archivo localizado en directorio de struct semantico.exe
llamado resultado.dat el cual es abierto por la función MOSTRAR_MENSAJE() y
determinar si hubo algún error o por el contrario se realizo correctamente la ejecución
del código usuario. La función devuelve la última línea de datos guardado en el archivo
abierto.
Private Function MOSTRAR_MENSAJE() As String
'Activa eventos de verificación de errores
On Error GoTo ControlError1
'variable para recuperar lista de respuesta
Dim msg As String
'limpias control de lista de resultados
MsgError.Clear
'abre el archivo de resultados de la compilación
Open App.Path & "\resultado.dat" For Input As #5
'ciclo para recorrer el archivo abierto
Do While Not EOF(5)
'recupera línea de registro
Line Input #5, msg
154
'adiciona en el control Lista de resultados
MsgError.AddItem msg
'fin del ciclo
Loop
'cierra el archivo
Close #5
'retorna último mensaje de resultados
MOSTRAR_MENSAJE = msg
'salida de función
Exit Function
'etiqueta de mensaje de errores cometido
ControlError1:
'mensaje de error con su descripción
MsgBox Err.Description, vbCritical + vbOKOnly, "Error"
End Function
Figura No. 15: Función que muestra errores
3.3 FUNCION MOSTRAR_ENSAMBLADOR
Private Sub MOSTRAR_ENSAMBLADOR(): Él intérprete de código Struct
semántico se encarga de convertir la codificación del usuario y guardarla en un archivo
el cual la interfaz de usuario realizada en visual Basic recuperara posteriormente a la
ejecución correcta. Esta función se encarga de realizar este procedimiento y mostrarlo en
la caja de texto asignada para visualizar el lenguaje ensamblador proporcionado por el
intérprete.
155
Private Sub MOSTRAR_ENSAMBLADOR()
'Activa eventos de verificación de errores
On Error GoTo ControlError2
'variable para recuperar lista de ensamblador
Dim msg As String
'limpia variables
msg = ""
'limpia caja de texto
txtEnsamblador.Text = ""
'abre archivo de código interpretado
Open App.Path & "\micropic2005v1.asm" For Input As #6
'ciclo para recorrer el archivo
Do While Not EOF(6)
'hace invisible la lista de resultado
MsgError.Visible = False
'recupera datos desde el archivo
msg = msg & Input(1, #6)
'retorna evento o enfoque
y = DoEvents
'llenado de la barra de estado
If ProBar1.Value < 100 Then
ProBar1.Value = ProBar1.Value + 1
Else
ProBar1.Value = 0
End If
'fin del ciclo
Loop
'hace visible la lista de resultado
MsgError.Visible = True
'muestra resultado en la caja de texto
txtEnsamblador.Text = msg
'Crea archivo con el nombre del documento abierto
Open App.Path & "\" & NombreDocumento & ".asm" For Output As #7
Print #7, msg
'cierra el archivo
Close #7
'cierra el archivo
Close #6
‘salida de procedimiento
Exit Sub
156
'etiqueta de mensaje de errores cometido
ControlError2:
'mensaje de error con su descripción
MsgBox Err.Description, vbCritical + vbOKOnly, "Error"
End Sub
Figura No. 16: Función de mostrado del código ensamblador
157
JUEGO DE INSTRUCCIONES
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMAS
CARTAGENA DE INDIAS D.T. Y C., JUNIO DE 2005
159
1. JUEGO DE INSTRUCCIONES PARA LOS PIC’S
Con el fin de proporcionarle un texto tan práctico como sea posible, para cada
instrucción que se presenta se indica:
− Su sintaxis, indicando la notación de forma precisa.
− Su codificación con 14 bits.
Este punto le permitirá comprender cómo se llegan a codificar las instrucciones y los
modos de direccionamiento. Además, también le permitirá comprender los límites de los
tamaños impuestos a determinados datos, límites que se deben exclusivamente al
número de bits que se pueden utilizar.
Número de palabras y el número de ciclos de máquina utilizados. Puede así comprobar
que el principio fundamental de la arquitectura RISC se respeta, con una instrucción por
ciclo, salvo raras ocasiones. Los datos son todos en hexadecimal.
La notación adoptada para los datos y direcciones manipuladas por las instrucciones es
muy sencilla, y es como sigue:
− d representa estado, codificado con un bit.
− f representa un número de registro, codificado con siete bits.
− b representa un número de bit, codificado con tres bits. El bit 0 es siempre el bit de
menor peso.
− k representa un dato, el literal mencionado antes. El número de bits que se emplea
para su codificación es variable, dependiendo de la instrucción.
160
1.1 INSTRUCCIONES QUE MANEJAN REGISTROS
La mayoría de las instrucciones que manejan registros o están orientadas a los bytes
contienen dos parámetros, donde el primer parámetro es el registro con el cual el registro
de trabajo W efectuará la operación y el segundo parámetro escogerá el registro destino
donde se almacenará el resultado de la operación efectuada, todo eso dependiendo del
valor que tome el segundo parámetro, estos valores pueden ser 0 o 1, se explicara que
sucede si se coloca uno 0 un cero:
− Si d = 0, el resultado se almacenará en W.
− Si d = 1, el resultado se almacenará en el registro f.
Para el caso de las instrucciones que solo tienen un parámetro, tales como limpiar un
registro diferente al registro de trabajo y mover un registro o dato a W que son CLRF y
MOVWF respectivamente, en este caso será el registro a operar y en algunos caso hay
instrucciones que no tienen parámetro tales como limpiar el registro W que es CLRW ya
que el registro a limpiar es el de trabajo y NOP que no ejecuta ninguna operación.
Las instrucciones son la s siguientes:
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
INCF
INCFSZ
IORWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XORWF
161
•
Instrucción ADDWF
La suma de esta instrucción se realiza bit a bit entre el registro de trabajo W y un
registro cualquiera. Ejemplo: el resultado se almacenará en W en este caso.
Bits
8
4
2
1
8
Byte_H
Lleva
4
2
1
Byte_L
1
1
reg = 4 9
0
1
0
0
1
0
0
1
W=2D
0
0
1
0
1
1
0
1
W=76
0
1
1
1
0
1
1
0
C=0
C=1
Si la suma lleva acarreo, es decir, si la suma lleva por que paso el limite, en este caso F
con valor de 15 se activa el bit de CARRY del registro STATUS.
ADDWF
ADD W to F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
ADDWF f,d
00
0111 dfff
ffff
1, 1
W + f → f si d = 1 o W + f → W si d = 0
C, DC, Z
Añade el contenido de W al contenido de f, y
almacena el resultado en W si d = 0, y en f si d = 1.
ADDWF reg,0
Antes de la instrucción:
W = 17
reg = C2
Después de la instrucción: W = D9
reg = C2
Ejemplo:
Figura No. 8.1: Instrucción ADDWF
162
•
Instrucción ANDWF
Esta instrucción realiza un AND lógico bit a bit entre el registro W y un registro
cualquiera, teniendo en cuenta que la única forma que el bit de cómo resultado uno es
que el bit de los dos registros f sea uno, de lo contrario el resultado será cero. Ejemplo:
en este caso se almacenará el resultado en registro.
Bits
8
4
2
1
8
Byte_H
4
2
1
Byte_L
reg = 1 3
0
0
0
1
0
0
1
1
W = 91
1
0
0
1
0
0
0
1
reg = 1 1
0
0
0
1
0
0
0
1
ANDWF
AND W with F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
ANDWF f,d
00
0101 dfff
ffff
1, 1
W AND f → f si d = 1 o W AND f → W si d = 0
Z
Efectúa un AND lógico entre el contenido de los
registros W y f, almacena el resultado en W si d = 0,
y en f si d = 1.
ANDWF reg,1
Antes de la instrucción:
W = 17
reg = C2
Después de la instrucción: W = 17
reg = 02
Ejemplo:
Figura No. 8.2: Instrucción ANDWF
163
•
Instrucción CLRF
CLRF
Clear F with F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
CLRF f
00
0001 1fff
ffff
1, 1
00 → f
Z
Pone el contenido de f a cero y activa el bit Z.
CLRF reg
Antes de la instrucción:
reg = 5A
Después de la instrucción: reg = 00 y Z = 1
Figura No. 8.3: Instrucción CLRF
•
Instrucción CLRW
CLRW
Clear W register
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
CLRW
00
0001 0xxx xxxx
1, 1
00 → W
Z
Pone el registro W a cero y activa el bit Z.
CLRF W
Antes de la instrucción:
W = 5A
Después de la instrucción: W = 00 y Z = 1
Figura No. 8.4: Instrucción CLRW
164
•
Instrucción COMF
COMF
Complement F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
COMF f,d
00
1001 dfff
ffff
1, 1
|f → f si d = 1 o |f → W si d = 0
Z
Hace complemento de f bit a bit. El resultado se
almacena de nuevo en f si d = 1, y en W si d = 0
(en este caso, f no varia).
COMF reg,0
Antes de la instrucción:
reg = 13, W = ?
Después de la instrucción: reg = 13, W = EC
Ejemplo:
Figura No. 8.5: Instrucción COMF
•
Instrucción DECF
DECF
Decrement F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
DECF f,d
00
0011 dfff
ffff
1, 1
f – 1 → f si d = 1 o f – 1 → W si d = 0
Z
Decrementa el contenido de f en una unidad. El
resultado se almacena de nuevo en f si d = 1, y en
W si d = 0 (en este caso, f no varia).
DECF reg,1
Antes de la instrucción:
reg = 13
Después de la instrucción: reg = 12
Ejemplo:
Figura No. 8.6: Instrucción DECF
165
•
Instrucción DECFSZ
DECFSZ
Decrement F, Skip if Zero
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
DECFSZ f,d
00
1011 dfff
ffff
1, 1 (2)
f – 1 → f si d =1 o f – 1 → W si d=0 y salto si f – 1=0
Ninguno
Decrementa el contenido de f en una unidad. El
resultado se almacena de nuevo en f si d = 1, y en
W si d = 0 (en este caso, f no varia). Si el resultado
es nulo, se ignora la siguiente instrucción y, en ese
caso, esta instrucción dura dos ciclos.
aquí DECFSZ
reg,1
GOTO
ciclo
continua ...
Antes de la instrucción:
PC = dirección (aquí)
Después de la instrucción: reg = reg - 1
si reg = 0, entonces
PC = dirección continua
si reg != 0, entonces
PC =dirección (aquí +1)
Ejemplo:
Figura No. 8.7: Instrucción DECFSZ
•
Instrucción INCF
INCF
Increment F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
INCF f,d
00
1010 dfff
ffff
1, 1
f + 1 → f si d = 1 o f + 1 → W si d = 0
Z
Incrementa el contenido de f en una unidad. El
resultado se almacena de nuevo en f si d = 1, y en
W si d = 0 (en este caso, f no varia).
INCF reg,1
Antes de la instrucción:
reg = 2A
Después de la instrucción: reg = 2B
Ejemplo:
Figura No. 8.8: Instrucción INCF
166
•
Instrucción INCFSZ
INCFSZ
Increment F, Skip if Zero
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
INCFSZ f,d
00
1111 dfff
ffff
1, 1 (2)
f + 1 → f si d =1 o f + 1 → W si d=0 y salto si f + 1=0
Ninguno
Incrementa el contenido de f en una unidad. El
resultado se almacena de nuevo en f si d = 1, y en
W si d = 0 (en este caso, f no varia). Si el resultado
es nulo, se ignora la siguiente instrucción y, en ese
caso, esta instrucción dura dos ciclos.
aquí INCFSZ
reg,1
GOTO
ciclo
continua ...
Antes de la instrucción:
PC = dirección (aquí)
Después de la instrucción: reg = reg + 1
si reg = 0, entonces
PC = dirección continua
si reg != 0, entonces
PC =dirección (aquí +1)
Ejemplo:
Figura No. 8.9: Instrucción INCFSZ
•
Instrucción IORWF
Esta instrucción realiza un OR lógico inclusivo bit a bit entre el registro W y el registro
f, teniendo en cuenta que la única forma que el bit de cómo resultado cero es que el bit
de los dos registros W y f sean ceros, de lo contrario el resultado será uno. Ejemplo:
Bits
8
4
2
1
8
Byte_H
4
2
1
Byte_L
reg = 1 3
0
0
0
1
0
0
1
1
W =91
1
0
0
1
0
0
0
1
W =93
1
0
0
1
0
0
1
1
167
IORWF
Inclusive OR W with F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
IORWF f,d
11
0100 dfff
ffff
1, 1
W OR f → f si d = 1 o W OR f → W si d = 0
Z
Efectúa un OR lógico inclusivo entre el contenido de
W y el contenido de f, y almacena el resultado en f
si d = 1 y en W si d = 0.
IORWF reg,0
Antes de la instrucción:
reg = 13, W = 91
Después de la instrucción: reg = 13, W = 93
Ejemplo:
Figura No. 8.10: Instrucción IORWF
•
Instrucción MOVF
MOVF
Move F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
¡Atención!
MOVF f,d
00
1000 dfff
ffff
1, 1
f → f si d = 1 o f → W si d = 0
Z
Desplaza el contenido de f a f si d =1 o a W si d =0.
El desplazamiento de f a f, que a priori parece inútil,
permite comprobar el contenido de f con respecto a
cero, ya que esta instrucción actúa sobre el bit Z.
MOVF reg,0
Antes de la instrucción:
W=?
Después de la instrucción: W = reg
Ejemplo:
Figura No. 8.11: Instrucción MOVF
168
•
Instrucción MOVWF
MOVWF
Move W to F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
MOVWF f
00
0000 1fff
ffff
1, 1
W→f
Ninguno
Cargar f con el contenido de W.
MOVWF reg
Antes de la instrucción:
reg = ?, W = 5A
Después de la instrucción: reg = 5A, W = 5A
Figura No. 8.12: Instrucción MOVWF
•
Instrucción NOP
NOP
No Operation
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
NOP
0000 0xx0 0000
1, 1
Ninguna
Ninguno
Solo consume tiempo de maquina (en este caso, un
ciclo) como cualquier otro NOP. No hace nada.
NOP
Ejemplo:
Figura No. 8.13: Instrucción NOP
169
•
Instrucción RLF
RLF
Rotate Left F through Carry
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
RLF f,d
00
1101 dfff
ffff
1, 1
Ver descripción
C
El contenido del registro f se rota una posición a la
izquierda. El bit de más peso pasa al carry y el carry
se almacena en el bit de menos peso de f. Si d = 0,
el resultado introduce W. Si d = 1, el resultado
queda en el registro f.
7
6
5
4
3
2
1
0
C
Registro f
Ejemplo:
RLF reg,0
Antes de la instrucción:
Después de la instrucción:
C = 0, reg = 1110 0110
W=?
C = 1, reg = 1110 0110
W = 1100 1100
Figura No. 8.14: Instrucción RLF
170
•
Instrucción RRF
RRF
Rotate Right F through Carry
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
RRF f,d
00
1100 dfff
ffff
1, 1
Ver descripción
C
El contenido del registro f se rota una posición a la
derecha. El bit de menos peso pasa al carry y el
carry se coloca en el bit de más peso de f. Si d = 0,
el resultado introduce W. Si d = 1, el resultado
queda en el registro f.
7
6
5
4
3
2
1
0
C
Figura No. 8.14: Instrucción RLF
Registro f
Ejemplo:
RRF reg,0
Antes de la instrucción:
Después de la instrucción:
C = 0, reg = 1110 0110
W=?
C = 0, reg = 1110 0110
W = 0111 0011
Figura No. 8.15: Instrucción RRF
171
•
Instrucción SUBWF
La resta de esta instrucción se realiza bit a bit entre el registro de trabajo W y un registro
cualquiera. Ejemplo: el resultado se almacenará en el registro en este caso.
Bits
8
4
2
1
8
Byte_H
Lleva
4
2
1
Byte_L
1
1
reg = 0 3
0
0
0
0
0
0
1
1
W = 02
0
0
0
0
0
0
1
0
reg = 0 1
0
0
0
0
0
0
0
1
C=?
C=1
SUBWF
Substract W from F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
SUBWF f,d
00
0010 dfff
ffff
1, 1
f – W → f si d = 1, o f – W → W si d = 0
C, DC, Z
Sustrae el contenido de W del contenido de f, y
almacena el resultado en W si d = 0 y en f si de = 1.
La sustracción se realiza en complemento a dos. Si
el resultado es negativo, el carry se pone a 0.
SUBWF reg,1
Antes de la instrucción:
reg = 1, W = 2, C = ?
Después de la instrucción: reg = FF, W = 2, C = 0
Ejemplo:
Figura No. 8.16: Instrucción SUBWF
172
•
Instrucción SWAPF
SWAPF
Swap F
Sintaxis
Codificación
Palabras, ciclos
Operación
SWAPF f,d
00
1110 dfff
ffff
1, 1
f (0 - 3) → f (4 - 7) y f (4 - 7) → f( 0 - 3),
Resultado → f o W dependiendo de d
Ninguno
Intercambia los cuatro bits de mayor peso con los
cuatro bits de menor peso de f, y almacena el
resultado en f si d = 1, o en W si d = 0.
SWAPF reg,0
Antes de la instrucción:
reg = A5, W = ?
Después de la instrucción: reg = A5, W = 5A
Bit de estado
Descripción
Ejemplo:
Figura No. 8.17: Instrucción SWAPF
•
Instrucción XORWF
Esta instrucción realiza un OR lógico exclusivo bit a bit entre el registro W y el registro
f, teniendo en cuenta que la única forma que el bit de cómo resultado cero es que el bit
de los dos registros W y f sean iguales, de lo contrario el resultado será uno. Ejemplo: el
resultado se almacenará en el registro, para este caso.
Bits
8
4
2
1
8
Byte_H
4
2
1
Byte_L
reg = A F
1
0
1
0
1
1
1
1
W=B5
1
0
1
1
0
1
0
1
reg = 1 A
0
0
0
1
1
0
1
0
173
XORWF
Exclusive OR W with F
Sintaxis
Codificación
Palabras, ciclos
Operación
XORWF f,d
00
0110 dfff
ffff
1, 1
W OR EXCLUSIVO f → f si d = 1 o
W OR EXCLUSIVO f → W si d = 0
Z
Efectúa un OR lógico exclusivo entre el contenido
de W y el contenido de f, y almacena el resultado en
f si d = 1 y en W si d = 0.
XORWF reg,1
Antes de la instrucción:
reg = AF, W = B5
Después de la instrucción: reg = 1A, W = B5
Bit de estado
Descripción
Ejemplo:
Figura No. 8.18: Instrucción XORWF
1.2 INSTRUCCIONES QUE MANIPULAN BITS
Estas instrucciones que manipulan bits o están orientadas a los bits, al igual que las
anteriores instrucciones contienen u operan con dos parámetros, el primero indica el
registro a manipular, dependiendo del valor que tenga el segundo parámetro el cual
puede tomar máximo tres bits, es decir, que el mínimo valor que puede tomar es 0 y el
máximo es el 7.
Las instrucciones son las siguientes:
BCF
BSF
BTFSC
BTFSS
174
•
Instrucción BCF
Esta instrucción pone en cero el bit indicado con el valor del segundo parámetro, en este
caso b de cualquier registro, esto a su vez le cambia el valor al registro tratado. Ejemplo:
Byte_H
Byte_L
reg = B 8
1
0
1
1
1
0
0
0
reg = 3 8
0
0
1
1
1
0
0
0
BCF
Bit Clear F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
BCF f,b
01
00bb bfff
ffff
1, 1
0 → b( f )
Ninguno
Pone a cero el bit número b de f.
BCF reg,7
Antes de la instrucción:
reg = C7
Después de la instrucción: reg = 47
Figura No. 8.19: Instrucción BCF
•
Instrucción BSF
Esta instrucción pone en uno el bit indicado con el valor del segundo parámetro, en este
caso b de cualquiera que sea el registro, esto a su vez le cambia el valor al registro
tratado. Ejemplo:
Byte_H
Byte_L
reg = 6 D
0
1
1
0
1
1
0
1
reg = E D
1
1
1
0
1
1
0
1
175
BSF
Bit Set F
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
BSF f,b
01
01bb bfff
ffff
1, 1
1 → b( f )
Ninguno
Pone a uno el bit número b de f.
BSF reg,7
Antes de la instrucción:
reg = 0A
Después de la instrucción: reg = 8A
Figura No. 8.20: Instrucción BSF
•
Instrucción BTFSC
BTFSC
Bit Test, Skip If Clear
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
BTFSC f, b
01
10bb bfff
ffff
1, 1 o 2
Salta si b (f) = 0
Ninguno
Si el bit numero b de f es nulo, la instrucción que
sigue a esta se ignora y se trata como un NOP. En
este caso, y solo en este caso, la instrucción
BTFSC precisa dos ciclos para ejecutarse.
aquí BTFSS
reg,1
falso GOTO
inicio
verdad ...
Antes de la instrucción:
PC = dirección (aquí)
Después de la instrucción: si reg (1) = 0, entonces
PC = dirección verdad
si reg (1) = 1, entonces
PC = dirección falso
Ejemplo:
Figura No. 8.21: Instrucción BTFSC
176
•
Instrucción BTFSS
BTFSS
Bit Test, Skip If Set
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
BTFSC f, b
01
11bb bfff
ffff
1, 1 o 2
Salta si b (f) = 1
Ninguno
Si el bit numero b de f esta en uno, la instrucción
que sigue a esta se ignora y se trata como un NOP.
En este caso, y solo en este caso, la instrucción
BTFSS precisa dos ciclos para ejecutarse.
aquí BTFSS
reg,1
falso GOTO
inicio
verdad ...
Antes de la instrucción:
PC = dirección (aquí)
Después de la instrucción: si reg (1) = 1, entonces
PC = dirección verdad
si reg (1) = 0, entonces
PC = dirección falso
Ejemplo:
Figura No. 8.22: Instrucción BTFSS
1.3 INSTRUCCIONES DE CONTROL Y DE OPERANDOS INMEDIATOS
La mayoría de estas instrucciones de control y operandos inmediatos o de operaciones
con literal trabajan con un solo parámetro, que es un valor numérico el cual puede operar
directamente con el registro de trabajo W, las que no tienen parámetro son instrucciones
de control interno del microcontrolador. Las instrucciones son las siguientes:
ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
177
MOVLW
OPTION
RETFIE
RETLW
RETURN
SLEEP
SUBLW
TRIS
XORLW
•
Instrucción ADDLW
La suma de esta instrucción se realiza bit a bit entre el registro de trabajo y el literal o
valor a operar. Ejemplo: el resultado se almacenará siempre en W.
Byte_H
Lleva
Byte_L
1
1
1
1
19
0
0
0
1
1
0
0
1
W=2D
0
0
1
0
1
1
0
1
W=46
0
1
0
0
0
1
1
0
C=0
C=1
Si la suma lleva acarreo, es decir, si la suma lleva por que paso el limite, en este caso F
con valor de 15 se activa el bit de CARRY del registro STATUS.
ADDLW
ADD Literal to W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
ADDLW k
11
111x kkkk kkkk
1, 1
W+k→W
C, DC, Z
Añade el contenido de W al literal k, y almacena el
resultado en W.
ADDLW 7A
Antes de la instrucción:
W = 14
Después de la instrucción: W = 8E
Ejemplo:
Figura No. 8.23: Instrucción ADDLW
178
•
Instrucción ANDLW
Esta instrucción realiza un AND lógico bit a bit entre el registro W y el literal o valor a
operar, teniendo en cuenta que la única forma que el bit de cómo resultado uno es que el
bit del registrote trabajo W y el valor del literal sea uno, de lo contrario el resultado será
cero. Ejemplo: en este caso se almacenará el resultado siempre en W.
Bits
8
4
2
1
8
Byte_H
4
2
1
Byte_L
reg = 4 D
0
1
0
0
1
1
0
1
W = C9
1
1
0
0
1
0
0
1
reg = 4 9
0
1
0
0
1
0
0
1
ANDLW
AND Literal and W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
ANDLW k
11
1001 kkkk kkkk
1, 1
W AND k → W
Z
Efectúa un AND lógico entre el contenido de W y el
literal k, y almacena el resultado en W.
ANDLW 5F
Antes de la instrucción:
W = A3
Después de la instrucción: W = 03
Ejemplo:
Figura No. 8.24: Instrucción AN DLW
179
•
Instrucción CALL
CALL
Subrutina CALL
Sintaxis
Codificación
Palabras, ciclos
Operación
CALL k
10
0kkk kkkk kkkk
1, 2
En el caso de los 16c5X:
PC + 1 → Pila, k → PC(0-7), 0 → PC(8),
PA2 a PA0 → PC(9-11)
En el caso de los 16c64, 71, 74, 84:
PC + 1 → Pila, k → PC(0-10),
PCLATH(3,4) → PC(11,12)
Ninguno
Guarda la dirección de vuelta en la pila y después
llama a la subrutina situada en la dirección cargada
en el PC.
El modo de cálculo de la dirección difiere según la
familia PIC utilizada. También hay que posicionar
bien PA2, PA1, PA0 (16c5X) o el registro PCLATH
(en los demás PIC), antes de ejecutar la instrucción
CALL.
aquí CALL
rutina
Antes de la instrucción:
PC = dirección (aquí)
Después de la instrucción: PC = dirección rutina
Bit de estado
Descripción
¡Atención!
Ejemplo:
Figura No. 8.25: Instrucción CALL
180
•
Instrucción CLRWDT
CLRWDT
Clear Watchdog Timer
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
CLRWDT
00
0000 0110 0100
1, 1
00 → WDT y 0 → predivisor del temporizador
1 → TO 1 y 1 → PD
Pone a cero el registro contador del temporizador
watchdog, así como el predivisor.
CLRWDT
Antes de la instrucción:
contador WDT = ?
Después de la instrucción: contador WDT = 00
Ejemplo:
Figura No. 8.26: Instrucción CLRWDT
•
Instrucción GOTO
GOTO
Salto incondicional
Sintaxis
Codificación
Palabras, ciclos
Operación
GOTO k
10
1kkk kkkk kkkk
1, 2
En el caso de los 16C5X:
k → PC (0 - 8), PA2, PA1,
PA0 → PC (9 - 11).
k → PC (0 - 10),
PCLATH (3,4) → PC (11,12).
Ninguno
Llama a la subrutina situada en la dirección cargada
en el PC.
GOTO
ciclo
Antes de la instrucción:
PC = ?
Después de la instrucción: PC = ciclo
Bit de estado
Descripción
Ejemplo:
Figura No. 8.27: Instrucción GOTO
181
•
Instrucción IORLW
Esta instrucción realiza un OR lógico inclusivo bit a bit entre el registro W y el literal o
valor a operar, teniendo en cuenta que la única forma que el bit de cómo resultado cero
es que el bit de los dos registros W y f sean ceros, de lo contrario el resultado será uno.
Ejemplo: se almacenará en el registro en este caso.
Bits
8
4
2
1
8
Byte_H
4
2
1
Byte_L
reg = 5 3
0
1
0
1
0
0
1
1
W =4A
0
1
0
0
1
0
1
0
W =5B
0
1
0
1
1
0
1
1
IORLW
Inclusive OR Literal with W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
IORLW k
11
1000 kkkk kkkk
1, 1
W OR k → W
Z
Efectúa un OR lógico inclusivo entre el contenido de
W y el literal k, y almacena el resultado en W.
IORLW
35
Antes de la instrucción:
W = 9A
Después de la instrucción: W = BF
Ejemplo:
Figura No. 8.28: Instrucción IORLW
182
•
Instrucción MOVLW
MOVLW
Move Literal to W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
Ejemplo:
MOVLW k
11
00xx kkkk kkkk
1, 1
k→W
Ninguno
Cargar W con el literal k.
MOVLW
5A
Antes de la instrucción:
Después de la instrucción:
W=?
W = 5A
Figura No. 8.29: Instrucción MOVLW
•
Instrucción OPTION
OPTION
Load Option Register
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
¡Atención!
OPTION
00
0000 0110 0010
1, 1
W → OPTION
Ninguno
Cargar el registro OPTION con el contenido de W.
Esta instrucción no debe utilizarse en otros circuitos
que no sean los PIC 16C5X. No obstante, es
correctamente interpretada por los circuitos 16C64,
71, 74 y 84, con el fin de asegurar una
compatibilidad ascendente.
OPTION
Ejemplo:
Figura No. 8.30: Instrucción OPTION
183
•
Instrucción RETFIE
RETFIE
Return From Interrupt
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
RETFIE
00
0000 0000 1001
1, 2
Pila → PC, 1 → GIE
Ninguno
Carga el PC con el valor que se encuentra en la
parte superior de la pila, asegurando así la vuelta de
la interrupción. Pone a 1 el bit GIE, con el fin de
autorizar de nuevo que se tengan en cuenta las
interrupciones.
RETFIE
Antes de la instrucción:
PC = ?
Después de la instrucción: PC = pila
Ejemplo:
Figura No. 8.31: Instrucción RETFIE
•
Instrucción RETLW
RETLW
Return Literal to W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
RETLW k
11
01xx kkkk kkkk
1, 2
k → W, Pila → PC
Ninguno
Carga W con el literal k, y después carga el PC con
el valor que se encuentra en la parte superior de la
pila, efectuando así un retorno de subrutina.
CALL
tabla
:
tabla ADDWF
PC
RETLW
k1
RETLW
k2
:
RETLW
kn
Antes de la instrucción:
W = 07
Después de la instrucción: W = k7
Ejemplo:
Figura No. 8.32: Instrucción RETLW
184
•
Instrucción RETURN
RETURN
Return From Subroutine
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
RETURN
00
0000 0000 1001
1, 2
Pila → PC
Ninguno
Carga el PC con el valor que se encuentra en la
parte superior de la pila, efectuando así una vuelta
de subrutina. Se trata de la instrucción RETLW
simplificada.
Esta instrucción dura dos ciclos.
Esta instrucción no existe en los PIC 16C5X.
RETURN
Antes de la instrucción:
PC = ?
Después de la instrucción: PC = pila
¡Atención!
Ejemplo:
Figura No. 8.33: Instrucción RETURN
•
Instrucción SLEEP
SLEEP
Sleep
Sintaxis
Codificación
Palabras, ciclos
Operación
SLEEP
00
0000 0110 0011
1, 1
0 → PD, 1 → TO, 00 → WDT,
0 → predivisor del WDT
TO, PD
Pone al circuito en modo sep con parada del
oscilador, es decir, lo pone a dormir (stanby).
SLEEP
Bit de estado
Descripción
Ejemplo:
Figura No. 8.34: Instrucción SLEEP
185
•
Instrucción SUBLW
La resta de esta instrucción se realiza bit a bit entre el registro de trabajo W y el literal o
valor numérico a operar. Ejemplo: el resultado se almacenará siempre en el registro W.
Bits
8
4
2
1
8
Byte_H
Lleva
4
2
1
Byte_L
1
1
02
0
0
0
0
0
0
1
0
W = 02
0
0
0
0
0
0
1
0
W =00
0
0
0
0
0
0
0
0
C=?
C=1
SUBLW
Substract W from Literal
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
SUBLW k
11
110x kkkk kkkk
1, 1
k– W →W
C, DC, Z
Sustrae el contenido de W del literal k, y almacena
el resultado en W. La sustracción se realiza en
complemento a dos.
Esta instrucción no existe en los PIC 16C5X.
SUBWF F
Antes de la instrucción:
W = 2, C = ?
Después de la instrucción: W = D, C = 1
¡Atención!
Ejemplo:
Figura No. 8.35: Instrucción SUBLW
186
•
Instrucción TRIS
TRIS
Load TRIS Register
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
TRIS f
00
0000 0110 0fff
1, 1
W → registro TRIS del puerto f
Ninguno
Carga el contenido de W en el registro TRIS del
puerto f.
Esta instrucción no debe utilizarse en otros circuitos
que no sean los PIC 16C5X. No obstante, es
correctamente interpretada por los circuitos 16C64,
71, 74 y 84, con el fin de asegurar una
compatibilidad ascendente.
TRIS puertoA
¡Atención!
Ejemplo:
Figura No. 8.36: Instrucción TRIS
•
Instrucción XORLW
Esta instrucción realiza un OR lógico exclusivo bit a bit entre el registro W y el literal a
operar, teniendo en cuenta que la única forma que el bit de cómo resultado cero es que el
bit de los dos registros W y f sean iguales, de lo contrario el resultado será uno. Ejemplo:
el resultado se almacenará siempre W.
Bits
8
4
2
1
8
Byte_H
AF
4
2
1
Byte_L
1
0
1
0
1
1
1
1
W=35
0
0
1
1
0
1
0
1
W=9A
1
0
0
1
1
0
1
0
187
XORLW
Exclusive OR Literal with W
Sintaxis
Codificación
Palabras, ciclos
Operación
Bit de estado
Descripción
XORLW k
11
1010 kkkk kkkk
1, 1
W OR EXCLUSIVO k → W
Z
Efectúa un OR lógico exclusivo entre el contenido
de W y el literal k, y almacena el resultado en W.
XORLW AF
Antes de la instrucción:
W = B5
Después de la instrucción: W = 1A
Ejemplo:
Figura No. 8.37: Instrucción XORLW
188
AUTÓMATAS, PSEUDOCÓDIGOS Y DIAGRAMAS DE FLUJOS DE LAS
INSTRUCCIONES EN ENSAMBLADOR
JULIÁN ROBERTO HERNÁNDEZ DÍAZ
JAVIER MEZA CARABALLO
CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ
FACULTAD DE INGENIERÍA DE SISTEMAS
CARTAGENA DE INDIAS D.T. Y C., MAYO DE 2005
190
1. AUTÓMATAS, PSEUDOCÓDIGOS Y DIAGRAMAS DE FLUJOS
DE LAS INSTRUCCIONES EN ENSAMBLADOR
1.1
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (ADDLW, ADDWF, ANDLW, ANDWF)
Diagrama 1: Autómata de instrucciones que comienzan con la letra A
191
192
Figura No. 1.1: Pseudocódigo de instrucciones que comienzan con la letra A
193
Diagrama 2: Diagrama de flujo de instrucciones que comienzan con la letra A
194
1.2
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (BCF, BSF, BTFSC, BTFSS)
Diagrama 3: Autómata de instrucciones que comienzan con la letra B
195
Figura No. 1.2: Pseudocódigo de instrucciones que comienzan con la letra B
196
Diagrama 4: Diagrama de flujo de instrucciones que comienzan con la letra B
197
1.3
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (CALL, CLRF, CLRW, CLRWDT, COMF)
Diagrama 5: Autómata de instrucciones que comienzan con la letra C
198
199
Figura No. 1.3: Pseudocódigo de instrucciones que comienzan con la letra C
200
Diagrama 6: Diagrama de flujo de instrucciones que comienzan con la letra C
201
1.4
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (DECF, DECFSZ)
Diagrama 7: Autómata de instrucciones que comienzan con la letra D
Figura No. 1.4: Pseudocódigo de instrucciones que comienzan con la letra D
202
Diagrama 8: Diagrama de flujo de instrucciones que comienzan con la letra D
203
1.5
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LA
INSTRUCCIÓN (GOTO)
Diagrama 9: Autómata de instrucción que comienza con la letra G
Figura No. 1.5: Pseudocódigo de instrucción que comienza con la letra G
204
Diagrama 10: Diagrama de flujo de instrucción que comienza con la letra G
205
1.6
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (INCF, INCFSZ, IORLW, IORWF)
Diagrama 11: Autómata de instrucciones que comienzan con la letra I
206
Figura No. 1.6: Pseudocódigo de instrucciones que comienzan con la letra I
207
Diagrama 12: Diagrama de flujo de instrucciones que comienzan con la letra I
208
1.7
AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (MOVF, MOVLW, MOVWF)
Diagrama 13: Autómata de instrucciones que comienzan con la letra M
209
Figura No. 1.7: Pseudocódigo de instrucciones que comienzan con la letra M
210
Diagrama 14: Diagrama de flujo de instrucciones que comienzan con la letra M
211
1.8
AUTÓMATA,
PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LA
INSTRUCCIÓN (NOP)
Diagrama 15: Autómata de instrucción que comienza con la letra N
Figura No. 1.8: Pseudocódigo de instrucción que comienza con la letra N
212
Diagrama 16: Diagrama de flujo de instrucción que comienza con la letra N
213
1.9
AUTÓMATA,
PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LA
INSTRUCCIÓN (OPTION)
Diagrama 17: Autómata de instrucción que comienza con la letra O
Figura No. 1.9: Pseudocódigo de instrucción que comienza con la letra O
214
Diagrama 18: Diagrama de flujo de instrucción que comienza con la letra O
215
1.10 AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LA
INSTRUCCIÓN (RETFIE, RETLW, RETURN, RLF, RRF)
Diagrama 19: Autómata de instrucciones que comienzan con la letra R
216
217
Figura No. 1.10: Pseudocódigo de instrucciones que comienzan con la letra R
218
Diagrama 20: Diagrama de flujo de instrucciones que comienzan con la letra R
219
1.11 AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (SLEEP, SUBLW, SUBWF, SWAPF)
Diagrama 21: Autómata de instrucciones que comienzan con la letra S
220
221
Figura No. 1.11: Pseudocódigo de instrucciones que comienzan con la letra S
222
Diagrama 22: Diagrama de flujo de instrucciones que comienzan con la letra S
223
1.12 AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LA
INSTRUCCIÓN (TRIS)
Diagrama 23: Autómata de instrucción que comienza con la letra T
Figura No. 1.12: Pseudocódigo de instrucción que comienza con la letra T
224
Diagrama 24: Diagrama de flujo de instrucción que comienza con la letra T
225
1.13 AUTÓMATA, PSEUDOCÓDIGO Y DIAGRAMA PARA EVALUAR LAS
INSTRUCCIONES (XORLW, XORWF)
Diagrama 25: Autómata de instrucciones que comienzan con la letra X
226
Figura No. 1.13: Pseudocódigo de instrucciones que comienzan con la letra X
227
Diagrama 26: Diagrama de flujo de instrucciones que comienzan con la letra X
228
1.14 TABLAS PARA EL MANEJO DE BITS DE LOS PUERTOS
Las instrucciones que utilizan una variable pin como parámetro que varía entre (0 – 15)
deben manejar la siguiente lógica para poder hacer referencia a los distintos pines de
cada puerto a utilizar, hay que tener en cuenta que solo se manejan dos puertos que son:
el Puerto A y el Puerto B, dichos puertos se pueden configurar como entrada o salida.
Los puertos inicialmente se encuentran configurados como entrada.
El Puerto A solo se utiliza desde el bit 0 hasta el bit 4 ya que los otros tres no son
manejables y Puerto B maneja todos sus bits. Ver las tablas No. 1 y 2.
Para hacer referencia al Puerto A el valor del bit debe ser de (0 – 7) y para utilizar el
Puerto B el valor debe ser de (8 – 15). Ver tabla No. 3.
Bit
Nombre
Puerto
7
RA7
6
RA6
5
RA5
4
3
RA4
RA3
PORTA
2
RA2
1
RA1
0
RA0
2
RB2
1
RB1
0
RB0
Tabla No. 1: Puerto A.
Bit
Nombre
Puerto
7
RB7
6
RB6
5
RB5
4
3
RB4
RB3
PORTB
Tabla No. 2: Puerto B.
229
PORTA
Puerto
PORTB
Valor
Pin
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bit
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
Tabla No. 3: Valor de las referencias de los bits de los puertos.
Veamos un ejemplo:
Si el valor del pin es 10 el puerto que se utiliza es el puerto B haciendo referencia el bit
2 de ese puerto. Así, PORTB,2 en su respectivo lenguaje ensamblador.
230
Descargar