Está en la página 1de 17

TECNOLÓGICO NACIONAL DE MÉXICO

Instituto Tecnológico de Oaxaca

INSTITUTO TECNOLÓGICO DE OAXACA


DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN

TEMA:
PROGRAMACIÓN DE MICROCONTROLADORES
MATERIA:

SISTEMAS PROGRAMABLES.

DOCENTE:
MARICELA MORALES HERNÁNDEZ.

UNIDAD 4

FLORES HERNÁNDEZ ERNESTO.

GRUPO: 8SA HORA: 15:00 – 16:00 HRS.


CONTENIDO

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.

De esta manera se desarrollará el tema y se comprenderá relacionados que se tienen entre si


los temas y sus funciones.
PROGRAMACIÓN DE MICROCONTROLADORES
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 (Nestor, s.f.).

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.

 Máquina de estados finita (FSM)


o Estados: Son las diferentes situaciones en las que puede encontrarse el sistema.
o Entradas (señales de transición de estados): Constituyen los acontecimientos que
producen los cambios de estado.
o Salidas: Respuesta del sistema ante los cambios en las entradas.
o 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 la que se representan son:
o Diagrama de grafo de estado
o Tabla de transiciones

Programación en lenguajes de bajo nivel.

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.

Cuando se compila un programa en Ensamblador, el compilador de Ensamblador realiza


automáticamente la traducción de los mnemónicos a Código Máquina (conjunto de bits), que es el
único lenguaje que entiende la CPU.

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.

Programación en lenguajes de alto nivel

La programación en lenguaje de alto nivel permite la creación de programas independientemente de


la plataforma utilizada, ya estemos hablando de microprocesadores o microcontroladores. Además,
hay que tener en cuentan que los microcontroladores evolucionaron a partir de los microprocesadores
y no al revés, los microcontroladores aparecieron en la industria por la necesidad de tener sistemas
programados embebidos, es decir que tanto CPU, memoria y periféricos estuvieran integrados dentro
de un mismo circuito integrado.

Algunos de estos lenguajes de alto nivel son el BASIC, FORTRAN, PASCAL y C.

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.).

ESTRUCTURA DE LOS REGISTROS DEL CPU


Los registros sirven para almacenar los resultados de la ejecución de instrucciones, cargar datos desde
la memoria externa o almacenarlos en ella (portalhuarpe, s.f.).

Los registros de la CPU son:

 Registros visibles al usuario: Permiten al programador de lenguaje de máquina o


ensamblador minimizar las referencias a memoria principal optimizando el uso de
los registros.
 Registros de control: Son utilizados por la unidad de control para controlar el
funcionamiento de la CPU y por programas privilegiados del sistema para controlar
la ejecución de programas.
 Registro de estado: Se utiliza para tomar decisiones en función de operaciones
realizadas.
 Registro puntero a pila.

Registros visibles al usuario

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.

Podemos clasificarlos en:

 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.

Bit de estado Nombre Descripción


C ACARREO Puesto a uno si una operación da lugar a un acarreo
(suma) o adeudo (resta) de un bit de orden superior.
P PARIDAD Paridad del resultado de una operación aritmética o
lógica. Un 1 indica paridad par y el 0 paridad impar.
Z CERO Puesto a uno cuando el resultado de una operación
aritmética o lógica es cero.
S SIGNO Contiene el bit de signo del resultado de la última
operación aritmética.
O DESVORDAMIENTO Usado para indicar un desbordamiento aritmético.
I INTERRUPCION Usado para habilitar o inhabilitar interrupciones

Registro puntero a pila

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.

Objeto: dato o instrucción que se desea direccionar.


Un computador dispone de varios modos de direccionamiento.

Objetivos de los modos de direccionamiento:

 Reducir el espacio ocupado en memoria por las instrucciones.


 Permitir la reubicación del código.
 Facilitar el manejo de las estructuras de datos.

Modo de direccionamiento en las instrucciones

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.).

 Código de operación (CO) y modificador (MD)


 Operandos (OPi) y resultado (RES)

Dir

En el direccionamiento directo, se indica la dirección a operar de forma absoluta.

Para la familia de microcontroladores 8051 se dispone de 256 direcciones directas, correspondientes


a (Ram interna + Registros SFR).

El OpCode va seguido de un byte que representa la dirección.

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

Por registro (Rn)

Rn. Para el direccionamiento por registro el código de la instrucción (OpCode) contiene la


información del registro a operar, del banco de registros seleccionado.

MOV R1,A ; R1<-(A), El contenido del acumulador se mueve al registro R1

OpCode de (MOV Rn,A) es F8H, en binario:

1 1 1 1 1 0 0 1 Los tres últimos bits identifican el registro sobre el cual se opera.

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

La instrucción indica implícitamente el registro sobre el que se ha de operar.

INC A ; A<-(A)+1, incrementar el acumulador

CPL A ; A<-(Ã), complementa el acumulador

Inmediato (#)

#. El OpCode está seguido de una constante que representa el valor con el que se operará.

MOV A,#0 ; A<-0, poner cero en el Acc

MOV R1,#123 ; R1<-123, poner el valor 123 (decimal) en el registro uno

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.

MOVC A,@A+DPTR ; A<-((DPTR+A)), el contenido de la posición que apunta el DPTR+A se


deposita en el Acc.

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:

1. Instrucciones orientadas a los registros o bytes.

2. Instrucciones orientadas a los bits.

3. Operaciones con literales y de control.

Para entender mejor cada instrucción a continuación se explicará el significado de algunos


parámetros:

f: Registro al que afecta la instrucción

w: Acumulador (Working register)

b: Número de bit (hay instrucciones que afectan a un solo bit)

k: Constante (un número)

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.

Instrucciones orientadas a registros

addwf f,d

Suma w y el registro f, el resultado lo guarda según d (si d = 0 se guarda en w y si d = 1 se guarda en


f).

andwf f,d

Realiza la operación AND lógica entre w y f, el resultado lo guarda según d

clrf f

Borra el registro f (pone todos sus bits a cero)

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

Decrementa f en uno (le resta uno). El resultado lo guarda según d

decfsz f,d

Decrementa f en uno y salta la siguiente instrucción si el resultado es cero. El resultado lo guarda


según d

incf f,d

Incrementa f en uno (le suma uno). El resultado lo guarda según d

incfsz f,d

Incrementa f y se salta la siguiente instrucción si el resultado es 0 (cuando se desborda un registro


vuelve al valor 00h). El resultado lo guarda según d

iorwf f,d

Realiza la operación lógica OR entre w y f. El resultado lo guarda según d

movf f,d

Mueve el contenido del registro f a w si d = 0 (si d = 1 lo vuelve a poner en el mismo registro f)

movwf f

Mueve el valor de w a f

Nop

No hace nada, solo pierde el tiempo durante un ciclo

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

Resta f y w (f - w). El resultado lo guarda según 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

Instrucciones orientadas a bits:

bcf f,b

Pone a “0” el bit b del registro f

bsf f,b

Pone a “1” el bit b del registro f

btfsc f,b

Se salta la siguiente instrucción si el bit b del registro f es “0”

btfss f,b

Se salta la siguiente instrucción si el bit b del registro f es “1”

Instrucciones orientadas a constantes y de control:

addlw k

Le suma el valor k al acumulador w (resultado en w)

andlw k

Operación lógica AND entre w y el valor k (resultado en w)

call k

Llamada a subrutina cuyo inicio esta en la dirección

kclrwdt
Borra el registro Watchdog

goto k

Salta a la dirección k de programa

iorlw k

Operación lógica OR entre w y el valor k (resultado en w)

movlw k

Carga el acumulador con el valor k

retfie

Instrucción para retornar de la interrupción

retlw k

Carga el valor k en W y retorna de la subrutinareturn Retorna de una subrutina

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 CRUZADOS: permiten el soporte de medios físicos como pantallas,


impresoras, teclado, etc. y la programación que ofrecen maquinas potentes que luego serán ejecutados
en sistemas especializados.

ENSAMBLADORES RESIDENTES: permanecen en la memoria de la computadora, y cargan para


su ejecución al programa objeto producido. es el indicado para el desarrollo de pequeños sistemas de
control.

MACROENSAMBLADORES: permiten el uso de macroinstrucciones, son programas grandes que


no permanecen en memoria una vez que se a generado el código objeto, normalmente son programas
complejos y residentes.
MICROENSAMBLADORES: Indica al interprete las instrucciones de cómo debe actuar la CPU.

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:

 Permite desarrollar programas muy eficientes:


 Uso eficiente de recursos
 Código compacto
 Control total sobre el tiempo de ejecución de las instrucciones especialmente importante en
aplicaciones en tiempo real

Desventajas:

 Programación costosa y difícil de modificar

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.

Los microcontroladores PIC están en auge, utilizándose en proyectos industriales, de investigación y


para docencia. No tiene sentido que el diseñador sólo pueda utilizar una única plataforma para
desarrollar aplicaciones con ellos. Parece más lógico que el diseñador utilice la que más le convenga,
o la que normalmente use
BIBLIOGRAFÍA
Francisco, A. S. (s.f.). Universidad . Obtenido de
http://repositorio.uasf.edu.pe/bitstream/UASF/87/1/LibroPICFinal.pdf

ingenieria electronica.org. (17 de Enero de 2017). Obtenido de


https://ingenieriaelectronica.org/fotodiodo-definicion-caracteristicas-y-tipos/

Modos de direccionamiento. (s.f.). Obtenido de


https://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r100112.PDF

Nestor. (s.f.). DevCode. Obtenido de https://devcode.la/articulos/programacion-de-


microcontroladores/

portalhuarpe. (s.f.). Obtenido de


http://www.portalhuarpe.com.ar/medhime20/Sitios%20con%20Medhime/Computaci%C3
%B3n/COMPUTACION/Menu/modulo%205/5-6.htm

Proyectos Electronicos. (27 de Junio de 2008). Obtenido de


http://proyectoselectronics.blogspot.com/2008/06/sensor-infrarrojo-controlando-un-
motor.html

scribd. (s.f.). Obtenido de https://es.scribd.com/document/187821944/MODELOS-DE-


PROGRAMACION-DE-MICROCONTROLADORES

sistes. (s.f.). Obtenido de https://sites.google.com/site/ensambladoralexa/1-1-3-tipos-de-lenguaje-


ensamblador