SISTEMAS PROGRAMABLES
EXPOSICION DELA UNIDAD 4: PROGRAMACIÓN
DE LOS MICROCONTROLADORES
Impartida al grupo del S7A
INSTRUCTOR: M.E. ALEJANDRO HERNANDEZ LOPEZ SAN PEDRO, COAHUILA
2.
Introducción
El microcontrolador ejecutael programa cargado en la memoria Flash. Esto se denomina el código ejecutable y
está compuesto por una serie de ceros y unos, aparentemente sin significado. Dependiendo de la arquitectura
del microcontrolador, el código binario está compuesto por palabras de 12, 14 o 16 bits de anchura. Cada
palabra se interpreta por la CPU como una instrucción a ser ejecutada durante el funcionamiento del
microcontrolador. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se les denominan
colectivamente Conjunto de instrucciones. Como es más fácil trabajar con el sistema de numeración
hexadecimal, el código ejecutable se representa con frecuencia como una serie de los números hexadecimales
denominada código Hex. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el
conjunto de instrucciones tiene 35 instrucciones diferentes.
3.
Como el procesode escribir un código ejecutable era considerablemente arduo, en consecuencia, fue creado el
primer lenguaje de programación denominado ensamblador (ASM). Siguiendo la sintaxis básica del ensamblador,
era más fácil escribir y comprender el código. Las instrucciones en ensamblador consisten en las abreviaturas con
significado y a cada instrucción corresponde una localidad de memoria. Un programa denominado ensamblador
compila (traduce) las instrucciones del lenguaje ensamblador a código máquina (código binario).
Este programa compila instrucción a instrucción sin optimización. Como permite controlar en detalle todos los
procesos puestos en marcha dentro del chip, este lenguaje de programación todavía sigue siendo popular.
4.
Tema 4.1: Modelode Programación
Funciones de un programa de control de procesos:
Adquisición y acondicionamiento de datos
Control digital directo
Supervisión del sistema
Control de secuencias
Modelos que estudiar:
Organigramas (diagramas de flujo)
Máquinas de estado finita (Finite State Machine - - FSM)
Organigramas
Suelen utilizarse en aplicaciones sencillas o en la planificación de rutinas en las que se divide una aplicación más
compleja.
5.
Máquina de estadosfinita (FSM)
Estados: Son las diferentes situaciones en las que puede encontrarse el sistema.
Entradas (señales de transición de estados): Constituyen los acontecimientos que producen los cambios de
estado.
Salidas: Respuesta del sistema ante los cambios en las entradas.
Funciones de transición de estado: Descripción detallada, para cada estado, de cuál es el siguiente estado y
la salida del sistema, cuando se producen las distintas entradas.
La forma en que los representan es:
• Diagrama de grafo de estado
• Tabla de transiciones
6.
Tema 4.2: Estructurade los registros del CPU
Los programas de los microcontroladores suelen dividirse en dos grandes grupos:
La estructura de interrupciones, formada por las rutinas de servicio a las mismas.
El programa principal, que consta de dos partes: La rutina de inicialización del sistema y un lazo de
ejecución perpetua, en donde se ejecutan todas aquellas tareas que no estén ligadas a la estructura de
interrupciones: máquina de estados principal, rutinas de estado principal, rutinas no críticas, inicialización
del circuito de vigilancia.
7.
Tema 4.3: Modosde direccionamiento
Una instrucción es un código binario con un significado ya establecido de antemano. Para no tener que
memorizar estos códigos y facilitar de esta manera la tarea del programador, a cada instrucción se le asigna
una abreviatura que dé una idea de la acción que realiza. Así por ejemplo si se pretende cargar un dato en el
acumulador se emplea una instrucción cuyo nemónico es LDA abreviatura de LoaD Accumulator.
Pero además hay que indicar en la instrucción cual es el dato o donde se encuentra el dato con el que hay
que operar.
Así por ejemplo la instrucción LDA (Cargar el acumulador) da lugar a los nueve códigos de operación que se
indican en la tabla siguiente, que tienen como denominador común que todas las instrucciones cargan en el
acumulador un dato, pero difieren en la forma de obtener ese dato.
9.
Esta gran variedadde modos de direccionamiento facilita la labor del programador que deberá de recordar un
grupo de nemónicos más reducido que en otros microprocesadores. El 65C02 dispone de 68 nemónicos, que
expandidos en los 15 modos de direccionamiento posibles dan un total de 210 códigos de operación.
En la siguiente tabla se muestran los modos de direccionamiento del 65C02; en la columna de la derecha se
representa el formato de escritura para cada uno de ellos en un lenguaje ensamblador.
11.
Tema 4.4: Conjuntode Instrucciones
Aunque no aparezca en el esquema, no podíamos dejar al conjunto o repertorio de instrucciones fuera de esta
fiesta, porque este elemento determina lo que puede hacer el procesador.
Define las operaciones básicas que puede realizar el procesador, que conjugadas y organizadas forman lo que
conocemos como software. El conjunto de instrucciones viene siendo como las letras del alfabeto, el elemento
básico del lenguaje, que organizadas adecuadamente permiten escribir palabras, oraciones y cuanto programa
se le ocurra.
Existen dos tipos básicos de repertorios de instrucciones, que determinan la arquitectura del procesador: CISC y
RISC.
CISC, del inglés Complex Instruction Set Computer, Computadora de Conjunto de Instrucciones Complejo. Los
microprocesadores CISC tienen un conjunto de instrucciones que se caracteriza por ser muy amplio y que
permiten realizar operaciones complejas entre operandos situados en la memoria o en los registros internos.
Este tipo de repertorio dificulta el paralelismo entre instrucciones, por lo que, en la actualidad, la mayoría de los
sistemas CISC de alto rendimiento, convierten las instrucciones complejas en varias instrucciones simples del
tipo RISC, llamadas generalmente microinstrucciones.
12.
Dentro de losmicrocontroladores CISC podemos encontrar a la popular familia INTEL – 51 y la Z80, aunque
actualmente existen versiones CISC – RISC de estos microcontroladores, que pretenden aprovechar las
ventajas de los procesadores RISC a la vez que se mantiene la compatibilidad hacia atrás con las instrucciones
de tipo CISC.
RISC, del inglés Reduced Instruction Set Computer, Computadora con Conjunto de Instrucciones Reducido. Se
centra en la obtención de procesadores con las siguientes características fundamentales:
o Instrucciones de tamaño fijo
o Pocas instrucciones
o Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos
o Número relativamente elevado de registros de propósito general
Una de las características más destacables de este tipo de procesadores es que posibilitan el paralelismo en la
ejecución, y reducen los accesos a memoria. Es por eso por lo que los procesadores más modernos,
tradicionalmente basados en arquitecturas CISC implementan mecanismos de traducción de instrucciones
CISC a RISC, para aprovechar las ventajas de este tipo de procesadores.
Los procesadores de los microcontroladores PIC son de tipo RISC.
13.
Tema 4.5: Lenguajesensambladores
El lenguaje ensamblador, o assembler (assembly en inglés) es un lenguaje de programación de bajo nivel para
los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables.
Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para
programar una arquitectura dada de CPU y constituye la representación más directa del código máquina
específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el
fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las
instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un
lenguaje ensamblador es por lo tanto específico a cierta arquitectura de computador física (o virtual). Esto está
en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al
código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un
mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en
contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas
instrucciones de máquina.
14.
Muchos sofisticados ensambladoresofrecen mecanismos adicionales para facilitar el desarrollo del programa,
controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los
ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro
ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes
lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes
académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, altos
rendimientos, o un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la
única manera de ser manipulados.
15.
Características
El códigoescrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su
estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador
puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina
con arquitectura diferente, generalmente es necesario reescribirlo completamente.
Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho
más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente
compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se
pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de
alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un
microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de
programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone
de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.
También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa
durante su ejecución.
16.
Tema 4.6: Codificación
Amenudo gastamos una gran cantidad de energía diseñando un circuito elegante, bien diseñado y robusto.
Hoy día, el cerebro de muchos de estos circuitos es un microcontrolador que necesita un software para
funcionar. ¿No es razonable entonces esperar un programa bien diseñado y escrito adecuadamente que se
complemente con la calidad del trabajo del circuito? Aparentemente así es.
Hablemos de la cualidad del software. Es un hecho muy bien conocido: los errores matan a gente y los errores
de programación no son una excepción. Todos los años muere gente debido a errores de programas. Algunos
accidentes fatales de avión, helicóptero y coches pueden ser atribuidos a problemas en el software. El mal
funcionamiento del ‘firmware’ interno de los dispositivos médicos crea víctimas de manera regular. Los
edificios se convierten en humo debido a errores de programa, y algunas personas son asesinadas a
machetazos. El software erróneo puede incluso hundir barcos. Creerme, he visto que eso sucede.