Fundamentos de Los Microcontroladores
Fundamentos de Los Microcontroladores
Fundamentos de Los Microcontroladores
“Fundamentos de microcontroladores”
Secuencia: 1CV10
Alumno:
Pérez González Fernando
Profesor:
José Romero Méndez
INDICE.
I. Definición de microcontrolador………………………………………………………………..1
I.1. Arquitectura interna del microcontrolador…………………………….………...1
I.2. Diferencia entre microprocesador y microcontrolador. …………..……………2
I.3. Fabricantes de microcontroladores.……………………………………..………4
II. El microcontrolador PIC 16F716…………………………………………………...…………7
II.1. Arquitectura interna.………………………………………………….……………7
II.2. Puertos de Entrada/Salida.……………………………………….………………8
III. Organización de la Memoria del Microcontrolador PIC 16F716.……………….…………8
III.1. Memoria de programa.………………………………………………...….………9
III.2. Memoria de Datos……………………………………….………...………………9
IV. Registros del Microcontrolador PIC 16F716…………………………………………………9
IV.1. El Contador de Programa.………………………………………...…...…………9
IV.2. Registros del SFR………………………………………...………………….……9
IV.3. Registros relacionados con los Puertos…………………….…………………10
IV.4. Registro PCL………………………………………………………..……………11
IV.5. Registro de trabajo W……………………………………………………………11
IV.6. Registro de Estado o de STATUS……………………..….……………………11
V. Repertorio de instrucciones del Microcontrolador PIC 16F716………………..…………12
V.1. Instrucciones de Carga…………………………………………….……………12
V.2. Instrucciones de Bit………………………………………………………………14
V.3. Configuración de Puertos…………………………………….…………………14
V.4. Instrucciones de Suma…………………………………………….….…………15
V.5. Instrucciones para incrementar y decrementar.………………………………15
V.6. Instrucciones Lógicas……………………………………………………………16
V.7. Instrucciones de Salto……………………………………...……………………17
VI. Lenguaje Ensamblador…………………........................................................................18
VI.1. Etiquetas……………………………………………………………….…………18
VI.2. Código de Operación………….……………..………………….………………19
VI.3. Operandos……………………………….…………………………….…………19
VI.4. Comentarios…………………………………………………………………...…20
VI.5. Normas de estilo para escribir un archivo fuente………………….…….……20
VII. Conclusiones……………………………………………………………..............................21
VIII. Bibliografía………………………………………………………………………………….....21
1
I
Un microcontrolador es un circuito integrado que en su interior contiene una
unidad central de procesamiento (CPU), unidades de memoria (RAM y ROM), puertos de
entrada y salida y periféricos. Estas partes están interconectadas dentro del
microcontrolador, y en conjunto forman lo que se le conoce como microcomputadora. Se
puede decir con toda propiedad que un microcontrolador es una microcomputadora
completa encapsulada en un circuito integrado.
Toda microcomputadora requiere de un programa para que realice una función específica.
Este se almacena normalmente en la memoria ROM. No está de más mencionar que sin
un programa, los microcontroladores carecen de utilidad.
I.I
Para la arquitectura interna del microcontrolador nos encontramos con dos
estructuras que nos guían en la composición esquemática sobre la disposición de sus
diferentes elementos.
De esta forma nos encontramos con la arquitectura tradicional, el modelo de Von
Neumann:
En esta arquitectura de computadoras y microcontroladores la unidad central de
procesamiento, o CPU, está
conectada a una memoria única
donde se almacenan las
instrucciones de programa y los
datos. El tamaño de la unidad de
datos o instrucciones está
determinado por el ancho del
bus de la memoria.
Encontramos pues que las dos
principales limitaciones de esta
arquitectura tradicional son:
Que la longitud de las instrucciones está limitada por la unidad de longitud de los
datos, por lo tanto el microprocesador debe hacer varios accesos a memoria para
buscar instrucciones complejas.
La velocidad de operación (o ancho de banda de operación) está limitada por el
efecto de cuello de botella que significa un bus único para datos e instrucciones
que impide superponer ambos tiempos de acceso.
La arquitectura von Neumann permite el diseño de programas con código automodificable,
una práctica bastante usada en las antiguas computadoras que solo tenían acumulador y
pocos modos de direccionamiento, no obstante innecesaria, en las computadoras
modernas.
Por otra parte, encontramos también la arquitectura conocida como Harvard, que
consiste en un esquema en el que el CPU se encuentra conectado a dos memorias por
medio de dos buses separados. Una de estas memorias contiene únicamente las
instrucciones del programa, y es llamada Memoria de Programa. La siguiente memoria
sólo almacena los datos con los cuales se van a trabajar y es conocida como Memoria de
Datos. Ambos buses son totalmente independientes incluso llegando a ser de distintos
anchos.
2
I.II
Actualmente el mundo se halla diversificado y en abundancia de soluciones
tecnológicas para el procesamiento de datos, la ejecución de tareas y en general para el
tratamiento inteligente de la información. Podemos mencionar específicamente al
microprocesador y a los microcontroladores como herramientas actuales y recurrentes
en los innumerables sistemas digitales que se encargan de realizar diversas tareas
previamente programadas en ellos. Así surge la necesidad de explicar detenidamente la
diferencia entre un microprocesador y un microcontrolador.
El uso de una u otra tecnología depende del fin que se espera, pues debido a sus
características propias, los microcontroladores y los microprocesadores pueden adquirir
variados y diferentes espacios de implementación, por ejemplo, los microprocesadores se
han desarrollado fundamentalmente orientados al mercado de las computadoras
personales y las estaciones de trabajo (Workstation), pues allí se requiere una elevada
potencia de cálculo, el manejo de gran cantidad de memoria y una gran velocidad de
procesamiento. Mientras que los microcontroladores están concebidos principalmente para
ser utilizados en aplicaciones puntuales, es decir, aplicaciones donde el microcontrolador
debe realizar un pequeño número de tareas, al menor costo posible. En estas
3
En cualquier proyecto la opción es usar ambos, cada uno en la tarea que mejor hace. Por
ejemplo, la recolección de datos, supervisión del entorno, envío de alarmas, accionar
motores, etc. lo puede realizar a la perfección un microcontrolador, para el tratamiento de
los datos recogidos, la interfaz gráfica de usuario, envío de correos, etc. lo dejaremos para
un microprocesador con sus debidos aditamentos en forma de una PC.
Existen una serie de diferencias entre el microprocesador y el microcontrolador,
características al usarlos en la implementación de sistemas digitales programables:
Microprocesadores Microcontroladores
interferencia electromagnética
I.III
Podemos darnos cuenta que existe un gran mercado para este tipo de instrumentos
tecnológicos, así que a lo largo de la historia hemos atestiguado diversas empresas que se
han encargado de producir y vender su propia tecnología, dando lugar así a una constante
evolución y mejoras para este tipo de herramientas. En esta sección veremos algunas
empresas dedicadas al rubro de la fabricación de microprocesadores y sobretodo
microcontroladores.
Microchip Technologies:
5
Zilog Inc:
II
Habiendo revisado los conceptos más generales
que engloban a los microprocesadores podemos
adentrarnos al modelo específico solicitado. El
microcontrolador PIC16F716 del fabricante
Microchip Technologies. Los microcontroladores
denominados “PIC” corresponden exclusivamente a la
marca Microchip. PIC significa “Peripheral Interface
Controller” y fue desarrollado por Microchip a principio de los 80.
II.I
La arquitectura que sique este dispositivo es Harvard, pues maneja buses
separados para las memorias de programa y de datos. Podemos observar con
detenimiento la arquitectura interna que sigue este microcontrolador, así como la
organización de sus diferentes partes:
II.II
Los microcontroladores cuentan con una serie de pines destinados a entrada y
salida de datos o señales digitales. A estos pines se les denomina “Puerto”.
Los puertos “A” y “B” del microcontrolador podrán ser programados como entradas y salidas
indiferentemente. Para el caso de que sean programados como salida se denominan “Modo
Fuente” por que suministran corriente y cuando son programados como entrada se
denominan “Modo Sumidero” por que reciben corriente.
En la imagen siguiente se podrá observar claramente que el microcontrolador tiene dos
puertos denominados “A” y “B”. El puerto “A” tiene 5 líneas disponibles (RA0, RA1, RA2,
RA3, RA4) y el puerto “B” tiene 8 líneas disponibles (RB0, RB1, RB2, RB3, RB4, RB5, RB6,
RB7). Ambos puertos suman un total de 13 líneas que podrán ser programadas
independientemente como entradas o como salidas. Estas son las líneas que estarán
destinadas a comunicar el microcontrolador con el mundo exterior, como por ejemplo
motores, diodos luminosos “Leds”, módulos LCD, teclados matriciales, etc.
III
La organización de la memoria en el modelo PIC16F716 está dispuesta de manera
que existen dos bloques de memoria en el PIC16F716. Cada bloque (memoria y datos del
programa) tienen su propio bus para que el acceso simultáneo puede ocurrir.
Organización de la memoria del programa.
El PIC16F716 tiene un contador de programa de 13 bits capaz de abordar un espacio de
memoria de programa de 8K x 14. LosPIC16F716 tiene 2K x 14 palabras de memoria de
programa.
Organización de la memoria datos.
9
IV
IV.I
El Registro Contador de Programa, normalmente denominado PC (Program
Counter), es totalmente equivalente al de todos los microprocesadores y contiene la
dirección de la próxima instrucción a ejecutar. Se incrementa automáticamente al ejecutar
cada instrucción, de manera que la secuencia natural de ejecución del programa es lineal,
una instrucción después de la otra. Algunas instrucciones de control, cambian el contenido
del PC alterando la secuencia lineal de ejecución. Dentro de estas instrucciones se
encuentran el GOTO y el CALL que permiten cargar en forma directa un valor constante en
el PC haciendo que el programa salte a cualquier posición de la memoria. Otras
instrucciones de control son los SKIP o “salteos” condicionales, que producen un
incremento adicional del PC si se cumple una condición específica, haciendo que el
programa saltee, sin ejecutar, la instrucción siguiente.
El PC es un registro de 9 bits en los 16C54/55, 10 bits en el 16C56, y 13 bits en el 16F716,
lo que permite direccionar respectivamente 512, 1024 o 2048 posiciones de memoria de
programa.
IV.II
Los Registros de Funciones Especiales (SFR) son registros utilizados por la CPU
y todos los módulos para controlar el funcionamiento deseado del dispositivo. Estos
10
registros son implementados como RAM estática. Una lista de estos registros es mostrada
en la tabla siguiente. Los Registros de funciones especiales se pueden clasificar en dos
conjuntos; núcleo (CPU) y periférico.
Esta zona de memoria no se puede utilizar como memoria de datos, resulta evidente que
si escribimos de forma descontrolada en la memoria asignada a un registro especial, se
modifica el comportamiento del microcontrolador, obteniéndose resultados inesperados
según el registro afectado. Aunque las posiciones de memoria que no están asignadas a
un registro especial pueden ser utilizadas para contener datos, no es aconsejable su uso,
se ha de tener en cuenta que estas pueden estar reservadas y asignadas a registros
especiales en otros modelos de microcontroladores o de fabricantes y nuestro programa
entrará en conflicto cuando cambiemos de modelo.
IV.III
Los puertos de entrada/salida (I/O) de propósito general, mediante los cuales el
microcontrolador puede monitorizar y controlar otros dispositivos. Resultan muy flexibles
pues muchos de sus pines de entrada/salida están multiplexados con funciones
alternativas. Para la mayoría de los puertos, la dirección del pin I/O es controlada por el
registro de dirección de datos, llamado TRIS. Un 1 en el registro TRIS indica que el pin
es de entrada, un 0 indica que es salida. Esta asignación se hace en: TRISA para los pines
del PUERTO A (5 bits) y TRISB para los pines del PUERTO B (8 bits).
Si TRISA es igual a ‘11110’ todos sus pines serán entradas salvo RA0 que esta como salida.
Si TRISB es igual a ‘00000001’ todos sus pines serán salidas salvo RB0 que esta como
entrada. Por defecto el PIC16F716 tendrá todos los puertos I/O (es decir los puertos RA y
RB), colocados como entrada de datos, y si queremos cambiarlos habrá que configurarlos.
11
IV.IV
Existe un registro, llamado PCL, ubicado en la posición 0x02 en el banco de
memoria. Se utiliza para direccionar las palabras de 14 bits del programa del usuario que
se encuentra almacenado en la memoria ROM; este contador de progamas es de 13 bits
de ancho. Todo empieza con la primera instrucción, esta tiene una posición indicada con
un número en el registro PCL, cuando se accede a esa posición, se lee la instrucción, se
decodifica, y luego se ejecuta, una vez hecho esto, el reloj del microcontrolador incrementa
al contador de programa (PCL) en un unidad, esto hace que el PCL apunte a la segunda
instrucción, ahora se lee esta segunda instrucción, se decodifica y también se ejecuta.
Nuevamente, el reloj del sistema incrementa el PCL para que apunte a la tercera
instrucción, la decodifique y la ejecute. Este proceso se repite hasta que termina el
programa (es decir, cuando encuentra un END).
IV.V
El registro de trabajo o W (Working Register), es un registro relevante especial
de 8 bits que participa en la mayoría de instrucciones. A diferencia de los SFR, se encuentra
dentro de la misma CPU, y puede ser accedido tanto para lectura como para escritura. Este
registro es totalmente escribible “desde el exterior” y se puede leer en cualquier momento
ya que se puede acceder a él desde cualquier banco de memoria. Por medio de este
registro cargamos valores a los distintos registros del μC, es decir, primero se pone un valor
en el registro W y luego se copia el valor del registro W al registro que queramos. No se
puede cargar un valor directamente a otro registro que no sea W.
IV.VI
El registro de estado o STATUS contiene el estado aritmético de la ALU, la causa
del reset y los bits de preselección de página para la memoria de datos. El registro STATUS
puede ser el destino de cualquier instrucción, como con cualquier otro registro. Contiene
los tres bits de estado de la ALU (C, DC y Z), y otros bits que por comodidad se incluyeron
en este registro.
El bit Z indica que el resultado de la última operación fue CERO. El bit C indica acarreo del
bit más significativo (bit 7) del resultado de la última operación de suma. En el caso de la
resta se comporta a la inversa, C resulta 1 si no hubo pedido de préstamo. El bit DC (digit
carry) indica acarreo del cuarto bit (bit 3) del resultado de la última operación de suma o
12
V
El conjunto de instrucciones utilizado en el PIC16F716 compatible con RISC, con un
conjunto reducido de instrucciones. Constando de 36 instrucciones de una sola palabra.
Podemos desglosarlos en una tabla asociando su función y su codificación y una breve
descripción (ver tabla ‘1A’).
V.I
Las instrucciones de carga transfieren contenidos de memoria a registros, de
registros a memoria y entre registros. Se trata del grupo principal de instrucciones del
microprocesador, y su necesidad queda justificada, ya que todas las operaciones
aritméticas y lógicas se hacen sobre registros del microprocesador, o entre estos y
posiciones de memoria y casi siempre será necesario almacenar los resultados sobre la
memoria. Por otra parte, gran número de instrucciones utilizan registros para direccionar
posiciones de memoria, bien sea mediante direccionamiento absoluto o indexado.
Entre los principales tipos de instrucciones de carga que maneja el procesador
encontramos:
MOVF - Move F
Sintaxis: MOVF f, d
Función: Pone el contenido de f en f si d=1 o f en W si d=0.
Atención: El desplazamiento de f en f que parecería inútil, permite comprobar el
contenido de f con respecto a cero ya que esta instrucción actúa sobre el bit Z.
MOVWF - Move W to F
Sintaxis: MOVWF f
Función: Carga f con el contenido de W.
13
V.II
Las instrucciones de manipulación de bits son aquellas que se emplean para
actuar sobre un bit de registro sin alterar a los demás. Los bits se numeran desde cero
hasta 7, de acuerdo a la posición que tienen dentro del byte: 0 es el menos significativo
(extremo derecho) y 7 es el más significativo (extremo izquierdo).
BCF - Bit Clear F
Sintaxis: BCF f, b
Función: Pone a cero el bit numero b de f.
V.III
V.IV
Las instrucciones de suma que podemos encontrar en este dispositivo son las
siguientes:
ADDLW - ADD Literal to W
Sintaxis: ADDLW k
Función: Añade el contenido de W al contenido de k, almacena el resultado en W.
ADDWF - ADD W to F
Sintaxis: ADDWF f, d
Función: 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.
DECF - Decrement F to F
Sintaxis: DECF f, d
Función: Decrementa el contenido de f en una unidad. El resultado se guarda en
W si d=0 (f no varía), y en f si d=1.
Sintaxis: DECFSZ f, d
Función: Decrementa el contenido de f en una unidad. El resultado se guarda en
W si d=0 (f no varía), y en f si d=1. Si el resultado es nulo, se ignora la siguiente
instrucción y en este caso la instrucción dura dos ciclos.
INCF - Increment F
Sintaxis: INCF f, d
Función: 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 varía).
V.VI
Dentro de las instrucciones lógicas que podemos detallar, aquellas encargadas
de las comparaciones entre diferentes valores y su posterior movimiento, encontramos las
siguientes:
Sintaxis: ANDLW k
Función: Efectúa un AND lógico entre el contenido de W y el literal k, y lo
almacena en W.
SWAPF - Swap F to F
Sintaxis: SWAPF f, d
Función: Intercambia los cuatro bit de mayor peso por los cuatro de menor peso
de f, y almacena el resultado en W si d=0, y en f si d=1.
V.VII
El siguiente tipo de instrucciones son las instrucciones de salto, estas sirven para
alterar la secuencia lineal de la ejecución del programa, son capaces de alterar el
contador de programa según se cumplan ciertas condiciones y así generar apoyar
el diseño de ciclos o lazos (loops) de instrucciones que deben repetirse una cantidad
determinada de veces.
Estas dos instrucciones (Decrement File and Skip if Zero, e Increment File and Skip
if Zero) se comportan de manera similar a DECF e INCF, salvo que no afectan a
ningún bit de la palabra de estado. Una vez realizado el incremento o decremento,
si el resultado es 00000000, el microprocesador salteara la próxima instrucción del
programa.
VI
Un programa escrito en lenguaje ensamblador por un programador se llama
programa fuente. Después de que el ensamblador convierte el programa fuente en código
máquina a este se le denomina programa objeto.
El código representa normalmente datos y números e instrucciones para manipularlos. Un
modo más fácil de comprender el código máquina es dando a cada instrucción un
mnemónico, como por ejemplo STORE, ADD o JUMP. Esta abstracción da como resultado
el ensamblador, un lenguaje de muy bajo nivel que es específico de cada microprocesador.
Los lenguajes de bajo nivel permiten crear programas muy rápidos, pero que son, a
menudo, difíciles de aprender. Más importante es el hecho de que los programas escritos
en un bajo nivel sean altamente específicos de cada procesador. Si se lleva el programa a
otra máquina se debe reescribir el programa desde el principio.
VI.I
Las etiquetas se sitúan a la izquierda de las instrucciones (ver Imagen 1C) y sirven
para agrupar fragmentos de código. Estos fragmentos pueden ser de dos tipos:
1. El primer tipo no es un fragmento tal cual, si no que es un punto del programa al
que podremos saltar de manera incondicional a través de la instrucción adecuada.
2. El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba
con la instrucción RETURN o RETLW, que veremos más adelante.
Deberemos tener en cuenta:
la etiqueta es el primer campo en una línea en lenguaje ensamblador y puede no
existir.
Si una etiqueta está presente, el ensamblador la define como el equivalente a la
dirección del primer byte correspondiente a esa instrucción.
Esta etiqueta puede volver a usarse en otro lugar pero como operando de una
instrucción. El ensamblador reemplazará ésta etiqueta por el valor de cuando fue
creada. Se usan frecuentemente en las instrucciones de salto.
No puede existir más de una etiqueta en la primera columna o primer campo de
instrucción.
19
VI.II
En esta columna (ver imagen 1D) se situarán las instrucciones u operaciones.
El campo del código de operación es el único que nunca puede estar vacío; éste siempre
contiene una instrucción o una directiva del ensamblador. Una etiqueta es una palabra
utilizada para designar alguna línea o sección del programa, se pueden utilizar para saltar
de una parte hacia esa etiqueta. Es importante que las etiquetas empiecen con una letra o
con un guion bajo "_". La longitud de una etiqueta puede ser de hasta 32 caracteres y como
ya se dijo se deben escribir en la primer columna.
VI.III
Los operandos, (ver imagen 1E) son los elementos que emplea la instrucción que
se está ejecutando. Usualmente los operandos son los registros, las variables o las
constantes. El campo de operandos o de dirección puede contener una dirección o un
dato, o puede estar en blanco. Normalmente contendrá registros o literales con los que se
operará (‘f’, ‘l’ o ‘k’, ‘b’ y ‘w’). Pudiendo haber 0, 1 ó 2; en el caso de que sean dos al primero
se le llama ‘destino’ y al segundo -separado por una coma- ‘fuente’.
En el caso del ejemplo observamos que el operando se trata de un número hexadecimal.
20
VI.IV
El campo del comentario o de etiquetas es opcional. Aquí podremos escribir
cualquier comentario que deseemos. Estos son útiles para saber qué hace un programa
sin tener que descifrar el código entero. El compilador (ensamblador) ignorará todo texto
más allá del punto y coma ";".
VI.V
Existen una serie de pasos que se deben seguir para dar por definitiva la realización
de un programa. Cuando más detallada sea la organización de estos pasos, más fácil será
la realización del siguiente. Para la programación se utiliza una cierta tabulación que se
debe respetar, además utilizar una tabulación adecuada hace los programas más claros y
legibles. Las etiquetas se escriben en la primera columna de cualquier línea, las
instrucciones y directivas en la segunda y por último, en la tercera columna, los operandos.
Los comentarios se pueden escribir en cualquier parte del programa. (ver Imagen 1G)
21
VII
A modo de conclusiones es factible denotar la gran diversidad de usos que tienen
los microcontroladores actualmente, son herramientas altamente optimizadas para ejecutar
tareas muy concretas. El lenguaje ensamblador también se convierte en un instrumento con
el cual, como especialistas, podemos comenzar a desarrollar e implementar nuestras
propias soluciones tecnológicas. La programación de bajo nivel requiere de habilidades
altamente analíticas y un buen desempeño intelectual, pues como hemos repasado, se
requiere tener consciencia de gran cantidad de información técnica y normas que han sido
establecidas con el paso de los años para normalizar el desarrollo de este tipo de proyectos
a nivel mundial. Podemos incluso recalcar la amplia cantidad de fabricantes de tecnología
que desarrollan y preparan su hardware con su conjunto particular de instrucciones y
bancos de registros. Por esto mismo, es muy importante la compilación exhaustiva de toda
la información disponible actualmente, con el fin de generar un trabajo enriquecedor y que
su veracidad y solidez se convierta en el apoyo de más personas.
VIII
Bibliografía
http://www.electronicaestudio.com/microcontrolador.htm
_____________________________________________________________________
https://microcontroladoressesv.wordpress.com/empresas-fabricantes-de-
microcontroladores/
_____________________________________________________________________
https://microcontroladoressesv.wordpress.com/arquitectura-de-los-microcontroladores/
_____________________________________________________________________
http://ww1.microchip.com/downloads/en/DeviceDoc/41206B.pdf
_____________________________________________________________________
https://www.unioviedo.es/ate/alberto/manualPic.pdf
_____________________________________________________________________
http://micropic.galeon.com/instrucciones.htm
_____________________________________________________________________
https://misistemaelectrico.wikispaces.com/file/view/SED+7+SALTO+2014.pdf
_____________________________________________________________________
https://www.avnet.com/shop/us/p/microcontrollers/8-bit-microcontrollers/microchip--
1/pic16f716-i-so-3074457345626506535/
______________________________________________________________________
https://www.unioviedo.es/ate/alberto/TEMA2-Memoria.pdf
22
______________________________________________________________________
https://www.serina.es/empresas/cede_muestra/211/TEMA%20MUESTRA.pdf
______________________________________________________________________
https://www.iso.org/committee/54992.html