SISTEMAS PROGRAMABLES
EXPOSICION DE LA UNIDAD 4: PROGRAMACIÓN
DE LOS MICROCONTROLADORES
Impartida al grupo del S7A
INSTRUCTOR: M.E. ALEJANDRO HERNANDEZ LOPEZ SAN PEDRO, COAHUILA
Introducción
El microcontrolador ejecuta el 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.
Como el proceso de 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.
Tema 4.1: Modelo de 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.
Máquina de estados finita (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
Tema 4.2: Estructura de 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.
Tema 4.3: Modos de 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.
Esta gran variedad de 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.
Tema 4.4: Conjunto de 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.
Dentro de los microcontroladores 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.
Tema 4.5: Lenguajes ensambladores
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.
Muchos sofisticados ensambladores ofrecen 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.
Características
 El código escrito 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.
Tema 4.6: Codificación
A menudo 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.

Unidad 4. Programación de Microcontroladores.pptx

  • 1.
    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.