Está en la página 1de 93

Microcontroladores

Ing.Ricardo Vega
ingRicardovega@hotmail.com
Al término del curso, el alumno será
capaz de:
Explicar el funcionamiento de los
microcontroladores, a partir del análisis
de su arquitectura.
Desarrollar programas en lenguaje
ensamblador con base en las
arquitecturas de microcontroladores
estudiadas.
Desarrollo de subrutinas matemáticas
con base en las arquitecturas de
microcontroladores estudiadas.
Identificar distintas aplicaciones de los
microcontroladores.
Criterios de evaluación
Parcial:
 Tareas 20%
 Practicas 30%
 Examen 50%
Semestral
 Primer parcial 20%
 Segundo parcial 20%
 Tercer parcial 20%
 Proyecto final 20%
 Semestral 20%
1. MICROCONTROLADORES
1. Introducción.
2. Comparación entre microcontrolador
y microprocesador.
3. Arquitectura de microcontroladores.
4. Microcontroladores pic
1. Descripción de la familia
2. Pic16f84a
1.1 Introducción
 Es un circuito integrado programable, capaz de
ejecutar las órdenes grabadas en su memoria.

 Un microcontrolador incluye en su interior las tres


principales unidades funcionales de
una computadora: unidad central de
procesamiento, memoria y periféricos de
entrada/salida.

 Es decir: es un computador completo de


capacidades limitadas que está contenido en un
circuito integrado y se destina a gobernar una tarea o
1.2 Comparación entre
microcontrolador y
microprocesador.
Los microprocesadores tienen una
arquitectura destinada al
procesamiento de la información. 

En el caso de los
microcontroladores
tienen una
arquitectura
destinada a procesos
1.2 Arquitectura de
microcontroladores
Un microcontrolador posee todos los
componentes de un computador, pero con
algunas características fijas que no pueden
alterarse. Las partes principales de un
microcontrolador son:
Procesador.
Memoria no volátil para contener el
programa.
Memoria de lectura y escritura para
Recursos auxiliares:guardar datos.
Líneas
• Circuito de reloj. de E/S para controlar los
• Temporizadores.periféricos:
• Perro guardián. • Comunicación paralelo.
• Conversores AD y DA• Comunicación serie.
• Diversos puertos de comunicación.
• Comparadores analógicos.
• Protección contra fallos de
alimentación.
• Estado de reposo o de bajo
Unidad Aritmética Lógica ALU
Esta compuesta por un circuito combinacional
complejo que se encarga de realizar las
operaciones aritméticas (suma, multiplicación...),
lógicas (AND, OR...) desplazamientos, etc.

Como se
utiliza: Normalmente uno de
los datos de entrada proviene
del registro acumulador
(ACUM) y el otro de un
registro interno, una posición
de memoria o como literal de
la propia instrucción.
Arquitectura
Reloj
Para que el microprocesador genere todas las
señales necesarias para controlar los restantes
bloques del sistema y para que todo el sistema
esté sincronizado (que cada elemento funcione
cuando le corresponde), se parte de ondas
cuadradas de frecuencia constante generadas
normalmente por un cristal de cuarzo.

La frecuencia de este reloj se mide en Khz, Mhz o


GHz y determina la velocidad de funcionamiento y
proceso de todo el sistema.
    
El periodo de tiempo de esta señal de reloj se
denomina ciclo de reloj.
Unidad Central de Proceso o
CPU
Es la parte mas importante del sistema
microprogramable. Es donde se realiza la
interpretación y ejecución de las
instrucciones, se generan todas las órdenes
de control para gobernar todo el sistema y se
realizan las operaciones aritméticas y lógicas.
Todas sus funciones se
realizan en sincronía con la
señal del reloj, por ello, la
frecuencia del reloj define la
velocidad del sistema.
Ciclo máquina
A partir de esta señal de reloj, se genera el denominado
ciclo máquina, que está formado por dos fases:
 Fase de búsqueda (Fetch cycle): En esta fase se realiza la búsqueda de
una instrucción en memoria y se guarda en el registro correspondiente.
 Fase de ejecución (Execute cycle): En esta fase se ejecuta o realiza la
transferencia de datos ordenada.

Esteciclo máquina tarda en realizarse mas o menos


tiempo dependiendo del fabricante.

 A veces para completar la ejecución de una instrucción se


requiere mas de un ciclo máquina.

Elnúmero de ciclos máquina necesarios para procesar por


completo una instrucción se denomina ciclo de instrucción.
1.3 Microcontroladores
pic 
Son una familia de microcontroladores
tipo RISC fabricados por Microchip Technology Inc.

Estos se pueden clasificar, según el


tamaño de sus instrucciones, en tres
grandes grupos o gamas:

• Gama baja: microcontroladores de


12 bits.
• Gama media: microcontroladores de 14
bits.
• Gama alta: microcontroladores de
16 bits.
1.4 Familia de
microcontroladores PIC
También los microcontroladores se
pueden clasificar atendiendo la longitud
de los datos nativos que manejan las
instrucciones que corresponde con el
tamaño del bus de datos y el de los
registros de la CPU, que pueden ser de
4,8,16,32 bits.
Agosto
Clasificación de los micro controlador PIC
de 8 bits: La gama base se caracteriza:
 Juego de 33 instrucciones máquina de 12 bits.
 Memoria de programa hasta 2K palabras.
 Pila de dos niveles de profundidad.
 No tiene interrupciones.
 Esta organizada en páginas de 512 palabras
cada una.
 Memoria de datos organizada en bancos de hasta
32 registros cada uno.
 Recursos limitados.
 Compuesta por 14 modelos. Seis están encapsulado
solo con 6 terminales.
Clasificación de los micro controlador PIC
de 8 bits: La gama media se caracteriza:
 Juego de 35 instrucciones máquina de 14 bits.
 Pila de 8 niveles de profundidad.
 Dispone de un vector de interrupciones.
 Un amplio repertorio de capacidad de memoria y
recursos.
 Memoria de programa (palabra) mínima 896 y
14336 máxima
 Memoria de programa organizada en páginas de 2k
palabras.
 Memoria de datos 64 bytes mínima y 368 bytes
máxima.
 Memoria de datos organizada en bancos de 120
registros cada uno, con cuatro bancos como
máximo.
 Interrupciones internar y externas.
Clasificación de los micro controlador PIC
de 8 bits: La gama Mejorada se caracteriza:
 Juego de 77 instrucciones máquina de 16 bits.
 Pila de 31 niveles de profundidad.
 Dispone de dos vector de interrupciones.
 Periféricos especializados.
 Multiplicador por hardware.
 Encapsulados máximo de 80 terminales.
 Memoria de programa hasta 128KBytes
 Memoria RAM hasta 3963 bytes.
 Gama de 71 modelos diferentes.
2. Descripción de PIC16F84A
1. Descripción general.
2. Terminales.
3. Siclo maquina y siclo reloj.
4. Descripción del pipeline.
5. Organización de memoria.
1. Memoria de programa
2. Memoria de datos
2. 1 Descripción general
 Solo contiene 35 palabras de instrucciones.
 Todas las instrucciones se ejecutan en un ciclo, excepto la
de salto que se ejecutan en dos ciclos.
 Velocidad máxima del reloj de entrada es de 20MHZ.
 1024 palabras de memoria del programa.
 Ancho de la palabra de instrucción de 14 bits.
 68 bytes de memoria de datos (RAM).
 Ancho de la memoria de datos de 8 bits.
 64 bytes de memoria de datos (EEPROM).
 15 Registro de hardware de funciones especiales.
 Pila de 8 niveles de profundidad.
 Tres modos de direccionamiento (directo, indirecto y bit a
bit).
 Cuatro fuentes de interrupciones (RB0/INT, desbordamiento
TMR0,interrupción por cambio de estado y escritura de
datos completa EEPROM.
2.1 Descripción general
PIC16F84A:
Características de los periféricos
13 E/S configurables.
Alta corriente en las terminales (25mA de fuente y drenaje por
terminal).
TMR0(timer/counter) de 8 bits con prescalador programable de 8
bits.
Características especiales del microcontrolador
10,000 ciclos de lectura/escritura en la memoria FLASH de
programa.
10,000,000 ciclos de lectura/escritura de la memoria EEPROM de
datos con una retención mayor a 40
años.
Programación ICSP vía dosTecnología
líneas. FLASH/EEPROM
Power‐on Reset (POR), Power‐up Rango de(PWRT),
Timer operación comercial
Oscilador 2v a
Start‐up
timer (OST). 5.5V.
Watchdog Timer (WDT). Bajo consumo de energía (típico):
< 2mA a 5V, 4MHz.
Protección de código. 15uA a 2V, 32KHz.
Modo de ahorro de energía. < o.5uA en standby a 2V.
Diferentes tipos de oscilador.
2.2 Terminales
2.3 Ciclo máquina-reloj.
Un ciclo máquina es la unidad básica de
tiempo que utiliza el microcontrolador.

Para el PIC16F84 el ciclo máquina


equivale a 4 ciclos de reloj, por lo tanto
el tiempo que tarda en producirse un
ciclo máquina es igual a cuatro veces el
periodo del oscilador.
2.3 Ciclo máquina-reloj
Las instrucciones del microcontrolador
PIC16F84 necesitan 1 ciclo máquina
para ejecutarse, excepto la de salto
que necesitan de dos ciclos.

Por lo tanto un ciclo de instrucción es


el tiempo en ejecutarse una
instrucción, que pueden ser de 1 a
dos ciclos, dependiendo el tipo de
instrucción.
2.4 Descripción del
pipeline
Un procesador segmentado o
Pipeline realiza simultáneamente la
ejecución y la búsqueda de código
de la siguiente, de esta manera se
puede ejecutar una instrucción en un
ciclo.
2.5.1 Memoria de
programa
 Lamemoria de programa está organizada
con palabras de 14 bits con un total de 1
K, del tipo Flash, que durante el
funcionamiento es de solo lectura.

 En una sola palabra se agrupa el código de


la instrucción y el operando o su dirección.

 Lapila o stack, de 8 niveles, Se utiliza


cuando ejecutamos un subproceso o
subrutina.
2.5.1 Memoria de
programa
2.5.2 Memoria de datos.
Está organizada en dos páginas o
bancos de registro, banco 0 y banco
1. Para cambiar de página se utiliza
un bit del registro STATUS (RP0).

◦ Cada banco se divide a su vez en


dos áreas:
 RFS (Registros de Funciones
Especiales)
 RGP (Registros de Propósito General)
Registros
 Un registro es un espacio en la memoria de
datos del microcontrolador en el que podemos
guardar información, existen también unos
registros en los cuales podemos configurar el
microcontrolador o saber el estado de este o
algunos de sus periféricos.
 Un registro está compuesto por 8 bits los
cuales se representan dándoles un numero
según su posición, de esta manera el bit
menos significativo (LSB) se le da el número 0
y el más significativo (MSB) el 7.
Donde X puede ser 1 ó 0.

A los bits del 0 al 3 se les denomina nibbles inferior, y del 4 al 7


se denominan nibbles superior.
Bancos
Banco 0
Banco 1
Registro de Status
Option registro
Intcon register
Configuration Word
3.- Ensamblador
1.- Definición
2.- Instrucciones
3.- Elementos de una instrucción
4.- flags
5.- Instrucciones de PIC16F84A
 5.1 Instrucciones orientadas a bytes
 5.2 Instrucciones orientadas a bits
 5.5 Instrucciones de control
6.-Elementos del lenguaje
ensamblador
3.1 Definición
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
Código máquina y lenguaje ensamblador

 Cualquier microcontrolador y microprocesador


ejecutan instrucciones en su lenguaje máquina. El
lenguaje o código máquina esta constituido por
códigos binarios de las instrucciones que puede
ejecutar el microcontrolador o microprocesador.

 Elaborar programas directamente en lenguaje


máquina es difícil, para reducir el nivel de
dificultad, se crearon los lenguajes ensambladores,
en los cuales las instrucciones que en lenguaje
máquina se representaban por grupos de bits, son
representados por símbolos mnemotécnicos.
Elementos del lenguaje
ensamblador
Un programa en lenguaje ensamblador
es una secuencia de líneas de texto,
cada una de las cuales puede ser:
◦ Instrucción del repertorio de
instrucciones del microcontrolador.
◦ Directiva del ensamblador.
◦ Macroinstrucción, o simplemente macro.
◦ Comentario.
◦ Etiqueta.
◦ Línea en blanco.
Estructura de un programa
en ensamblado
Instrucciones

Columna 1: Etiquetas. Las etiquetas se rigen por las


siguientes normas:
Debe situarse en la primera columna.
Debe contener únicamente caracteres alfanuméricos.
El máximo de caracteres es de 31.
Columna 2: Operación. En esta columna se situarán las
instrucciones. 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.
Instrucciones

Columna 3: Operandos 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).
Columna 4: Comentario. El campo del comentario o de
etiquetas es opcional. Aquí se situará cualquier
comentario personalizado 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 carácter punto y coma ";".
3.3 Elementos de una
instrucción
En el caso del PIC16F84A y los de los PIC de
la gama media cada instrucción está
formada por una palabra de 14 bits que
utiliza un tipo de código denominado
OPCODE (Código de Operación), que
especifica el mnemónico de la operación y
los operandos que correspondan, que son
los datos con los que opera la instrucción.
F (file register)
Este carácter se usa para definir
registros de cualquier tipo. Cualquier
instrucción que contenga este campo,
contendrá la dirección de un registro, no
su contenido.

En el caso de los registros especiales


en vez de la dirección podemos poner
directamente el nombre del registro que
el ensamblador se encargará luego de
traducir a las dirección real.
W (working register)
W no es un registro situado en un banco
de memoria, si no que es independiente.
A diferencia de lo anterior, cuando nos
referimos a él, nos referimos al
contenido.

Su uso es muy sencillo, pues lo usaremos


principalmente para pasar información
de un registro a otro, o para contener la
información entre dos o más
instrucciones.
B (bit addres dentro de un
registro)
B es la dirección de un bit dentro de un
byte. En ciertas ocasiones en vez de
modificar o acceder a bytes tendremos
que modificar o acceder a bits. De esta
manera podemos especificar a una
instrucción que posición ocupa el bit
sobre el cual recaerá la acción que esta
ejecute. Al igual que en los registros
especiales, podemos poner
directamente el nombre de un bit
dentro de un registro.
l o k(literal)
Este valor será almacenado en la
propia instrucción en tiempo de
ensamblado, esto significa que son
los valores que introducimos en las
instrucciones para que trabaje con
ellos.
D (destiny bit)

Donde encontremos ‘d’, debemos


especificar donde se almacenará el
resultado de una instrucción,
en w o en un registro.

Esto se define a través de dos


valores:
1: El resultado se almacenará en f.
0: El resultado se almacenará en w.
3.4 Flags o Banderas
Los Flags o banderas son marcadores, representados por bits
dentro del registro de STATUS, los mas importantes son:

Z: Flag de cero, se pone a 1 cuando una operación que le afecta


da como resultado un 0.

C: Flag de Carry, se pone a 1 cuando la operación que le afecta


sobrepasa el nivel de representación del procesador, en nuestro
caso es 8 bits, de esta manera si sumamos a 1111 1111
b un 0000 0011 b el resultado seria 0000 0010 b y el bit de
Carry pasaría a 1.

DC: Flag de carry del nibbles inferior, este se comporta igual que


el bit de Carry, solo que el limite de representación son los 4 bits
inferiores, de esta manera si tenemos 0000 1111 b y
sumamos 0000 0111 b, el resultado será 0001 0110 b y el bit
de DC se pone a 1, el bit de Carry estará a 0 al no superarse los
8 bits y el bit Z a 0 al ser el número diferente de 0.
3.5.1 Instrucciones orientadas
a bytes
Siendo f y d los
dos operandos
fuente y destino
que se hallan
implementados
por registros de
8 bits de la
memoria de
datos.

El registro f viene referenciado por la dirección de 7 bits


que ocupa, mientras que el destino sólo por uno, que si
vale 0 es el w y si vale 1 es la fuente.
Formato general de las
instrucciones
Cada instrucción en lenguaje máquina (binario)
del PIC contiene un código de operación
(opcode) el cual puede ser de 3 a 4 o 6 bits,
dependiendo del tipo de instrucción,
Operaciones orientadas a bytes

El bit d especifica el destino del resultado de la operación:


d = 0: destino w
d = 1: destino f

F = dirección de 7 bits del archivo de registros


3.5.2 Instrucciones orientadas
a bits
Responde a la sintaxis nemónico f,b, siendo f y
b los dos operandos. El registro f viene
referenciado por la dirección de 7 bits que
ocupa, mientras que el operando b representa
la posición del bit que se desea modificar o
verificar del registro f, siendo 0 y 7 el valor del
bit menos significativo y mas significativo
respectivamente
Formato general de las
instrucciones

Operaciones orientadas a bits

b : Especificación en tres bits del bit que se va a operar


F = dirección de 7 bits del archivo de registros
3.5.3 Instrucciones de
control
Responde a la sintaxis nemónico k,
siendo k una constante de 8 a 11 bits,
dependiendo de la instrucción.
Formato general de las
instrucciones
Operaciones con literales y de
control

k : Literal = Valor de un operando de 8 bits


Formato para CALL y GOTO

k : Literal = Valor de un operando de 11 bit


Directivas
Las directivas son instrucciones que
van dirigidas al programa
ensamblador no al microcontrolador.

Mediante directivas se puede


controlar la operación del
ensamblador y se le puede informar
de diversos aspectos de interés para
el correcto proceso de ensamblaje.
Directiva #INCLUDE
Indica que archivos deberán tomarse en
cuenta a la hora de compilar el código.
Normalmente se usa para incluir el
archivo de PIC que el ensamblador tiene
entre sus archivos.

Esta línea debe colocarse al principio, y


tiene la siguiente sintaxis:
Directiva LIST
Este comando sirve para que el
compilador tenga en cuenta sobre
qué procesador se está trabajando.
Este comando debe estar en todo
proyecto, situado debajo del
"include", con la siguiente sintaxis.
__CONFIG

La directiva __config se utiliza para


establecer los fuses (grabado de la
palabra de configuración).
Directiva ORG
Esta directiva dice al ensamblador a
partir de que posición de memoria
de programa se situarán las
siguientes instrucciones.

Recordemos que el 16F84A sólo


tiene 1024 posiciones de memoria
flash para código.
Directiva ORG
Inicia el programa en la posición
0000h y luego pasa a la 0005h
para no utilizar la posición del
vector de interrupción. (0004 h)
Directiva EQU
El nombre viene de la palabra
"equal", (igual)". La directiva EQU
permite al programador "igualar"
nombres personalizados a datos o
direcciones. Los nombres utilizados
se refieren generalmente a
direcciones de dispositivos, datos
numéricos.
Directiva END
Esta debe ir incluida una sola vez
en todo el programa. En concreto,
esta debe situarse al final, para
indicar al ensamblador que el
programa ha finalizado. Esta
siempre debe estar presente,
aunque el flujo de nuestro
programa acabe en un bucle.

end
El direccionamiento
Para el PIC solamente existen 4 modos de
direccionamiento, entre los cuales, tres de
ellos ya fueron vistos de manera intuitiva
cuando vimos las instrucciones. Los modos de
direccionamiento tratan sobre la forma de
mover los datos de unas posiciones de
memoria a otras.

Direccionamiento Inmediato
Direccionamiento Directo
Direccionamiento bit a bit
Direccionamiento Indirecto
Direccionamiento Inmediato
El dato manipulado por la
instrucción se codifica con la propia
instrucción. En este caso, el dato en
cuestión se denomina literal.

MOVLW k ;

Coloca el literal k, que es un valor


cualquiera codificado con 8 bits, en
el registro de trabajo w
Direccionamiento Directo
La memoria interna se direcciona de forma directa por
medio de los 8 bits "f" contenidos en las instrucciones que
operan sobre registros. De esta manera se puede
direccionar cualquier posición desde la 00 a la FF.

En los microcontroladores que tengan más de un banco,


antes de acceder a alguna variable que se encuentre en la
zona de los bancos de registros, el programador deberá
asegurarse de haber programado los bits de selección de
banco en el registro OPTION.

Este es el modo más utilizado, ya que como hemos visto


anteriormente, la memoria RAM está dividida en registros
específicos y en un conjunto de registros de propósito
general. Este modo consiste en codificar el nombre del o de
los registros en cuestión directamente en la instrucción.
MOVWF f ;
Direccionamiento bit a bit
Mediante este direccionamiento se
manipula un bit individual en cualquier
registro. Este modo de direccionamiento
no se utiliza nunca solo, sino que siempre
va emparejado con el modo de
direccionamiento directo.

BCF f,b ;

Pone a cero el bit número b del registro f.


Direccionamiento Indirecto
Es el modo más potente y utiliza los
registros INDF y FSR. En el registro FSR se
introduce la dirección del registro que se
quiere leer cuando se acceda a INDF.

FSR actúa como puntero, es decir, el valor


que guardemos en este registro será la
dirección de una posición de memoria. Si
aumentamos o disminuimos con cualquier
operación el contenido de FSR nos
moveremos entre las posiciones de
memoria.
Ejercicio 1
Sumar dos registros (suma de 8 bits)
y en caso de corrimiento en el bit de
mayor peso poner en alto el bit 0 del
puerto a y de no haber corrimiento
ponerlo en 0.
Tarea1
Sumar cuatro registros (suma de 16
bits) y en caso de corrimiento en el
bit de mayor peso poner en alto el
bit 0 del puerto a y de no haber
corrimiento ponerlo en 0.
Tarea2
Sumar seis registros (suma de 24
bits) y en caso de corrimiento en el
bit de mayor peso poner en alto el
bit 0 del puerto a y de no haber
corrimiento ponerlo en 0.
Ejercicio 2
Realizar un corrimiento en el puerto
b de la siguiente manera.
Con un retardo
de medio
RB RB RB RB RB RB RB RB
0 1 2 3 4 5 6 7 segundo entre
1 0 0 0 0 0 0 0 salto y salto.
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
• Tiempo maquina y
0 0 0 0 1 0 0 0 tiempo de reloj
0 0 0 0 0 1 0 0 • Retardo con un ciclo
0 0 0 0 0 0 1 0 • Retardo con ciclos
0 0 0 0 0 0 0 1 anidados
• Calculo de ecuación
1 0 0 0 0 0 0 0
Tarea 3
Realizar un retardos de:

10ms
20ms
5000ms
1000ms

Practica 1
Ejercicio 4
Realizar un programa que lea el RA0
y por cada cambio de estado de
este el RB0 cambiara de estado, es
decir, prenderemos y apagaremos
un led con el botón.
Ejercicio 5
Reste dos registros. (8 bits)

Tarea no
Reste 4 registros. (16 bits)
Ejercicio 6
Multiplicar dos registros. (8 bits)

Tarea 4
Multiplicar 4 registros. (16 bits)

Practica 2
La pila
 La pila es una estructura de datos con
organización LIFO: lo último que entra a la pila
es lo primero que sale de ella.
 La pila tiene una base y un tope. En la base
esta el elemento mas antiguo, mientras que
en el tope esta el dato mas reciente.
 La pila tiene un puntero de pila o registro SP
(Stack Pointer).
 El SP contiene siempre la dirección del tope de
la pila. Las operaciones de almacenamiento y
extracción de datos de la pila modifican el
contenido del registro SP. Por ejemplo, al
guardar o extraer un dato de la pila el SP se
puede incrementar o decrementar.
La pila
 La pila se utiliza para almacenar direcciones
de instrucciones y datos, en concreto, para
recordar la dirección de retorno al programa
principal desde una subrutina.
 En los microcontroladores PIC de gama media,
la pila tiene características muy particulares:
 La pila se encuentra en un espacio de
memoria separada de los espacios de
memoria de programa y datos.
◦ No existe el registro SP.
◦ En la pila solo se guardan direcciones.
◦ El tamaño de la pila es limitado: puede guardar
hasta 8 direcciones.
Subrutinas
Una subrutina es un conjunto de
instrucciones al que se tiene acceso desde
cualquier punto del programa principal. Es
decir, una subrutina es un subprograma
que se ejecuta cada vez que el programa
principal lo necesita.
Programa
Principal

proceso
Llamada al
proceso
return
Llamada al
proceso
Subrutinas anidadas.
Cuando una subrutina llama a otra subrutina se
produce la situación conocida como anidamiento de
subrutinas, es decir, hay subrutinas anidadas dentro
de otras. Cada call sucesivo sin que intervenga un
Program return crea un nivel adicional de anidamiento.
a
Principal Subrutin Subrutina
Subrutin
a1 a2 3
Llamada a
Subrutina Llamada a Llamada a pila
1 Subrutina Subrutina
x1
pila
2 return x1
3 x2
pila
x2 pila
x3 x1 x3
x1
return return x2
Instrucciones call y return
La localización de una subrutina se identifica por la
dirección de su primera instrucción. El efecto de la
instrucción call es provocar que la ejecución se
transfiera a la subrutina. De esto se desprende que
la instrucción call contenga la dirección de la
primera posición de memoria ocupada por la
subrutina.

La instrucción return provoca el retorno al programa


principal, la cual debe recordar la localización de la
instrucción que le sigue a call. Esto es posible sólo si
la dirección de esa instrucción ha sido preservada
en una zona de memoria (PILA).
Directiva macro
Son instrucciones definidas por el
usuario sobre la base de las
instrucciones del microcontrolador y
las directivas del ensamblador.

Una vez que se ha definido el macro,


se le puede llamar o invocar en el
programa fuente.
Directiva macro
Cuando una macro es invocada,
esta es copiada por el ensamblador
en el lugar de la invocación dentro
del código fuente.

La macro se declara con la directiva


MACRO, y termina con la directiva
ENDM.
Directiva macro
Las macros no son lo mismo que las
subrutinas. El código de las subrutinas
aparece una sola vez en un programa y
la ejecución del programa salta a la
subrutina. En cambio, el ensamblador
reemplaza cada aparición del nombre
de la macro con la secuencia
especificada de instrucciones. Por
consiguiente la ejecución del programa
no salta a la macro como una subrutina.
Directiva macro:
ejemplo
PCL y PCLATH
Como sabemos un programa en
ensamblador está constituido por
una serie de instrucciones que se
ejecutan secuencialmente.

Cada instrucción ocupa una


posición de la memoria de
programa, esta posición esta
“apuntada” por un registro especial
llamado Contador de Programa.
PCL y PCLATH
Este registro tiene una longitud de 13 bits
<12:0 > y está conformado por dos
registros: PCL y PCLATH.

PCL contiene los 8 bits menos


significativos y PCLATH los 5 bits más
significativos del Contador de programa,
PCL es el registro más utilizado.
PCL y PCLATH
Como podemos ver, el PCL “lleva la cuenta” del
número de instrucciones que ponemos en nuestro
programa, si nosotros modificamos el valor del
PCL durante la ejecución de nuestro programa NO
modificamos la dirección de la instrucción donde
estemos, sino que nos posicionamos hacia la
dirección apuntada por PCL. Por ejemplo,
la instrucción GOTO significa SALTO
INCONDICIONAL hacia donde se le indique,
realmente lo que la instrucción GOTO hace es
modificar el valor de PCL con el valor
indicado delante de la instrucción GOTO.
Tablas
Como su nombre lo indica una tabla
es una subrutina que contiene una
tabla de valores de retorno, es
decir, le damos un valor a la tabla y
nos regresa con otro valor, esa es
una razón por las que se usan,
entre otras cosas, para
decodificadores. Las tablas se
hacen con ayuda del registro PCL.
 Display de 7
segmentos
Tabla 7 segmentos
Ahora que conocemos los códigos en 8
bits de los números en 7 segmentos
procedemos a realizar nuestro programa
de tabla, que nos servirá como
decodificador, observe como se utiliza el
registro PCL
Ubicación de las tablas
Dado que estamos utilizando el PCL
para las tablas debemos considerar
que éste tiene 8 bits de longitud, lo
que indica que el número máximo es
255, como es de esperarse debemos
evitar que el PCL se desborde dentro
de una tabla, es decir, las tablas no
pueden superar la dirección 255 de la
memoria de programa, lo cual puede
ocurrir si el programa es largo y la
tabla esta al final del programa.
Ubicación de las tablas
Así que el lugar más seguro para ubicar
nuestras tablas será al inicio del programa, aquí
no “estorban” y nos permite realizar el
programa principal tan extenso como se
requiera.

También podría gustarte