Académique Documents
Professionnel Documents
Culture Documents
TEMA:
PROGRAMACIÓN DE MICROCONTROLADORES
MATERIA:
SISTEMAS PROGRAMABLES.
DOCENTE:
MARICELA MORALES HERNÁNDEZ.
UNIDAD 4
INTRODUCCIÓN............................................................................................................................3
PROGRAMACIÓN DE MICROCONTROLADORES ................................................................4
MODELO DE PROGRAMACIÓN ................................................................................................4
ESTRUCTURA DE LOS REGISTROS DEL CPU .......................................................................6
MODOS DE DIRECCIONAMIENTO ...........................................................................................8
CONJUNTO DE INSTRUCCIONES ...........................................................................................10
LENGUAJE ENSAMBLADOR ....................................................................................................14
CODIFICACIÓN ...........................................................................................................................15
CONCLUSIÓN...............................................................................................................................16
BIBLIOGRAFÍA ............................................................................................................................17
INTRODUCCIÓN
En este trabajo se estará hablando acerca de la programación de microcontroladores, el
modelo de programación, la estructura de los registros del CPU de un microcontrolador sus
modos de direccionamiento, conjunto de instrucciones.
Se abarcará también el leguaje ensamblador que es, para que sirve, como funciona y la
codificación.
MODELO DE PROGRAMACIÓN
Funciones de un programa de control de procesos:
o Adquisición y acondicionamiento de datos
o Control digital directo
o Supervisión del sistema
o Control de secuencias
Modelos a estudiar
o Organigramas (diagramas de flujo)
o Máquinas de estado finita (Finite State Machine--FSM)
Organigramas
o Suelen utilizarse en aplicaciones sencillas o en la planificación de rutinas en las
que se divide una aplicación más compleja.
En el principio de los tiempos de los Microprocesadores la única forma que había de programarlos
era utilizando el Código Máquina en el cual la unidad central de proceso o CPU procesaba
instrucciones que venían definidas por un conjunto de unos y ceros de 8, 16, 32 o más bits. Cada
combinación diferente de bits, tiene para el micro un significado distinto, y le indicará a éste que
realice una tarea determinada.
Sin embargo, este tipo de programación resultaba poco inteligible para el ser humano, porque se
tenían que manejar constantemente conjuntos de ‘unos’ y ‘ceros’ sin ningún significado aparente.
Por este motivo se desarrollo el lenguaje Ensamblador (Assembler), que consistía en asignar a cada
combinación de bits un conjunto de pocas letras (denominado mnemónico) que representaba mejor
el significado de la operación o instrucción que se le indica al microprocesador.
Durante mucho tiempo el ensamblador ha sido el lenguaje utilizado de manera casi mayoritaria para
programar microcontroladores. Sin embargo, este lenguaje implementa el conjunto de instrucciones
que cada microcontrolador en concreto entiende, por lo que es totalmente dependiente del hardware,
sin que pueda hacerse transportable a otros microcontroladores de una manera fácil.
Esto quiere decir que el Ensamblador no constituye realmente un lenguaje de programación estándar,
capaz de permitir el transportar un programa diseñado para un microcontrolador a otro que tenga un
conjunto de instrucciones diferente.
Este último además de permitir la programación desde un nivel cercano al programador (alto nivel),
también brinda la posibilidad de controlar aspectos más cercanos al hardware (bajo nivel), como la
manipulación directa de bits y bytes, por lo que se considera que es un lenguaje de nivel medio, más
que de alto nivel, esta ya sería una razón para decantarse por compiladores de C y no de otros
lenguajes de alto nivel como el Basic ó Pascal (scribd, s.f.).
Un registro visible al usuario es aquél que puede ser referenciado por medio del lenguaje máquina
que ejecuta la CPU. Prácticamente todos los diseños contemporáneos de CPUs están provistos de
varios registros visibles al usuario, en oposición a disponer de un único acumulador.
Uso General
Datos
Direcciones
Códigos de Condición
Registros de control
Hay diversos registros de la CPU que se pueden emplear para controlar su funcionamiento. En la
mayor parte de las máquinas, no son visibles al usuario. Algunos de ellos pueden ser visibles a
instrucciones de máquina ejecutadas en un modo de control o de sistema operativo. Naturalmente,
máquinas diferentes tendrán diferentes organizaciones de registros y usará distinta terminología. Se
enumera aquí una lista razonablemente completa de tipos de registros, con una breve descripción.
Son esenciales cuatro registros para la ejecución de una instrucción: el contador de programa, el
registro de dirección, el registro de instrucción y el registro de datos. El contador de programa
contiene una dirección de instrucción. Típicamente, la CPU actualiza el PC después de cada captación
de instrucción de manera que siempre apunta a la siguiente instrucción a ejecutar. Una instrucción de
bifurcación o salto también modificará el contenido de PC. La instrucción captada se carga en el
registro de instrucción, donde son analizados el código de operación y los campos de operando. Se
intercambian datos con la memoria por medio de registro de direcciones y el de datos. En un sistema
con organización de bus, el de direcciones se conecta directamente al bus de direcciones, y el de datos
directamente al bus de datos. Los registros visibles al usuario, sucesivamente, intercambian datos con
el de datos. Los cuatro registros que acaban de mencionar se usan para la transferencia de datos entre
la CPU y la memoria. Dentro de la CPU, los datos tienen que ofrecerse a la ALU para su
procesamiento. La ALU puede tener acceso directo al de datos y a los registros visibles al usuario.
Como alternativa, puede haber registros intermedios adicionales en el límite de la ALU; estos
registros sirven como registros de entrada y salida de la ALU e intercambian datos con el de datos y
los registros visibles al usuario.
Registro de estado
Todos los diseños de CPUs incluyen un registro o un conjunto de registros, conocidos a menudo como
palabra de estado de programa "programa status word", PSW), que contiene información de estado.
La PSW contiene típicamente códigos de condición además de otra información de estado. Entre los
campos comunes o indicadores se incluyen los expresados en la tabla.
El registro puntero a pila permite almacenar la dirección de acceso a la memoria pila. Veremos su
funcionamiento al tratar las subrutinas.
MODOS DE DIRECCIONAMIENTO
Modo de direccionamiento: mecanismo que permite conocer la ubicación de un dato o instrucción.
Los operandos y resultado de una instrucción son accedidos a través de modos de direccionamiento.
Cada campo de operando o resultado en una instrucción contiene información acerca del modo
de direccionamiento empleado para acceder a él (Modos de direccionamiento, s.f.).
Dir
MOV A,30H ; A<-(30H), El contenido de la dirección 30H se mueve al acumulador ADD A,31H ;
A<-(A)+(31H), Se suma el contenido de acumulador con el de la dirección 31H ; el resultado
se deposita en el acumulador
Indirecto (@)
@. Se especifica un registro que contiene la dirección del dato a operar.
R0, R1 cuando se accede a la memoria interna de direccionamiento indirecto 256 Bytes. DPTR para
el acceso a la memoria externa 64K Bytes.
MOV R0,#30H ; RO<-30H, mover al registro 0 el dato inmediato 30H (constante) MOV A,@R0 ;
A<-((R0)), mueve el contenido de la posición de memoria indicada en R0 al Acc.
Implícito
Inmediato (#)
#. El OpCode está seguido de una constante que representa el valor con el que se operará.
Indexado
Se utilizan dos registros para apuntar a la dirección que contiene el dato. La suma del contenido del
DPTR más el acumulador determina la dirección a operar.
Este direccionamiento esta limitado a dos únicas instrucciones que mueven datos de la ROM al
acumulador.
CONJUNTO DE INSTRUCCIONES
Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del inglés
Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es una especificación que
detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de
todos los comandos implementados por un diseño particular de una CPU. El término describe los
aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos
nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros
aspectos (Francisco, s.f.).
El pic tiene instrucciones reducido, en total 35 instrucciones o nemónicos que son la base de
funcionamiento del PIC. Al igual que los bits de los registros, sería complicado memorizar estas
instrucciones, se recomienda utilizar este texto como guía, las instrucciones fundamentalmente se
dividen en tres tipos. Esta división depende del tipo de datos con los que trabajan:
d: Selección de destino del resultado de la instrucción, puede ser “0” o “1”, si es “0” el
resultado se guarda en el acumulador (w) y si es “1” se guarda en el registro f al que afecta la
instrucción.
addwf f,d
andwf f,d
clrf f
clrw
Borra el acumulador
wcomf f,d
Calcula el complemento del registro f, los bits que están a “0” los pone a “1” y viceversa. El resultado
lo guarda según d
decf f,d
decfsz f,d
incf f,d
incfsz f,d
iorwf f,d
movf f,d
movwf f
Mueve el valor de w a f
Nop
rlf f,d
Rota el registro f hacia la izquierda a través del bit CARRY (todos los bits se mueven un lugar hacia
la izquierda, el bit 7 de f pasa al CARRY y el bit CARRY pasa al bit 0 de f). El resultado lo guarda
según d
rrf f,d
Lo mismo que rlf pero hacia la derecha
subwf f,d
swapf f,d
Intercambia los 4 primeros bit de f por los otros cuatro. El resultado lo guarda según d
xorwf f,d
Realiza la operación lógica XOR (OR exclusiva) entre w y f. El resultado lo guarda según d
bcf f,b
bsf f,b
btfsc f,b
btfss f,b
addlw k
andlw k
call k
kclrwdt
Borra el registro Watchdog
goto k
iorlw k
movlw k
retfie
retlw k
LENGUAJE ENSAMBLADOR
El lenguaje es la manera que utilizamos los seres humanos para comunicarnos, por medio de sonidos,
expresiones, símbolos, etc. de igual manera la computadora necesita de un lenguaje para que pueda
funcionar y nosotros como desarrolladores debemos entender. la computadora utiliza el conocido
lenguaje ensamblador, que es un lenguaje de alto nivel y al hablar de lenguajes de alto nivel debemos
comprender que trabaja por medio de código binario.
Existen varios tipos de lenguaje ensamblador, aunque finalmente todos realizan las mismas tareas.
ENSAMBLADORES DE UNA FASE: leen una línea de programa fuente y la traducen directamente
para producir una instrucción en lenguaje máquina, estos ensambladores son sencillos, baratos y
ocupan poco espacio.
ENSAMBLADORES DE DOS FASES: se llaman así por que realizan la traducción en dos etapas,
en la primera fase revisan el código fuente y lo construyen en una tabla de símbolos, en la segunda
fase vuelven a leer el programa fuente y pueden traducirlo por completo. estos ensambladores son los
más utilizados en la actualidad (sistes, s.f.).
Ventajas:
Desventajas:
CODIFICACIÓN
Está compuesto por una sucesión de líneas de texto. Cada línea puede estructurarse en hasta cuatro
campos o columnas separados por uno o más espacios o tabulaciones entre sí.
Campo de etiquetas: Expresiones alfanuméricas escogidas por el usuario para identificar una
determinada línea. Todas las etiquetas tienen asignado el valor de la posición de memoria en
la que se encuentra el código al que acompañan.
Campo de código: Corresponde al nemónico de una instrucción, de una directiva o de una
llamada a macro.
Campo de operandos y datos: Contiene los operandos que precisa el nemónico utilizado.
Según el código, puede haber dos, uno o ningún operando.
Campo de comentarios: Dentro de una línea, todo lo que se encuentre a continuación de un
punto y coma (;) será ignorado por el programa ensamblador y considerado como comentario.
CONCLUSIÓN
En conclusión, todos los elementos están relacionados el uno con el otro y son partes fundamentales
para que el microcontrolador pueda funcionar correctamente, ya que al faltar algún tema visto con
anterioridad no puede ser funcional, vemos también que el lenguaje ensamblador forma parte para
que pueda funcionar y ejecutarse rápidamente un microcontrolador.