Guía de Microcontroladores PIC
Guía de Microcontroladores PIC
INTRODUCCIÓN A LOS
MICROCONTROLADORES
2019A
Ing. Fanny Flores, MSc.
Microprocesador y Microcontrolador
◼ Microcontrolador
2
Microprocesador y microcontrolador
◼ Microprocesador
3
Microprocesador y microcontrolador
◼ Un microprocesador es un sistema abierto con el que puede construirse un computador
con las características que se desee, acoplándole los módulos necesarios.
◼ Un microcontrolador es un sistema cerrado que contiene un computador completo y de
prestaciones limitadas que no se pueden modificar.
4
Arquitectura Microcontroladores
◼ Un microcontrolador posee todos los componentes de un computador, pero
con características fijas inalterables.
◼ Procesador
◼ Memoria no volátil para contener el programa
◼ Memoria de lectura y escritura para guardar los datos
◼ Líneas de ES para los controladores periféricos
◼ Recursos auxiliares
5
Microcontroladores PIC
◼ Inicialmente: Programmable Interface Controller.
◼ Luego: Programmable Intelligent Computer.
◼ Fabricante: Microchip
◼ Versiones:
◼ C: Memoria de instrucciones es EEPROM
◼ F: Memoria de instrucciones es Flash
◼ CR: Memoria de instrucciones es ROM
◼ Familias:
◼ PIC 12, 16, 17, 18
6
Microcontroladores PIC
◼ PIC12CXXX
◼ PIC12FXXX
◼ PIC16CXXX
◼ PIC16C5X
◼ PIC16FXXX
◼ PIC17CXXX
◼ PIC18CXXX
◼ PIC18FXXX
7
PIC16F870
8
Características
◼ Microcontrolador Microchip gama media
◼ 8-bits
◼ CPU: RISC de alto rendimiento
◼ Juego Reducido de Instrucciones: 35
◼ Pines: 28 (Encapsulado plástico DIP)
◼ Memoria Flash (programa): 2Kx14 words
◼ Memoria de Datos RAM: 128 x 8 bytes
◼ Memoria de datos EEPROM: 64 x 8 bytes
9
Características
◼ Timers: 3 (TMRO, TMR1, TMR2)
◼ Watchdog: 1 (WDT)
◼ Interrupciones: 10
◼ Conversor A/D 10 bits (5 canales)
◼ Comunicación serial (USART)
◼ Módulo CPP (PWM)
◼ Pórticos de E/S: 3 (PORTA 6 líneas, PORTB 8 líneas, PORTC 8
líneas)
10
Características
◼ Corriente máxima absorbida por línea: 25 mA.
◼ Corriente máxima suministrada por línea: 25mA.
◼ Bajo Consumo
11
Características
12
Banco de
Registros BIU
PC
IR
Arquitectura del ID
Microcontrolador
ALU
UCT
13
Descripción de Pines
14
Descripción de Pines
15
Descripción de Pines
16
Descripción de Pines
17
Osciladores
◼ Los microcontroladores requieren de un circuito de reloj que le indique la velocidad de
trabajo, es el llamado oscilador o reloj. Este genera una onda cuadrada de alta
frecuencia que se utiliza como señal para sincronizar todas las operaciones del sistema.
◼ Este circuito es muy simple pero de vital importancia para el buen funcionamiento del
sistema.
18
Conexión de Osciladores
◼ En el PIC 16F870 los pines OSC1/CLKIN y OSC2/CLKOUT son las líneas utilizadas
para este fin. Permite 5 tipos de osciladores para definir la frecuencia de
funcionamiento:
19
Conexión de Osciladores
◼ Oscilador Modo LP, XT, HS
Los capacitores más grandes incrementan la estabilización del oscilador pero aumentan
su tiempo de arranque. (4MHz / 22pF) 20
Conexión de Osciladores
◼ Oscilador Tipo RC
Para aplicaciones que no son sensibles al tiempo. Los osciladores RC ofrecen un ahorro de
costos adicionales.
La frecuencia del oscilador va a estar en función del voltaje de alimentación, Resistencia
externa y Capacitor externo
22
Circuito de Reset (MCLR)
◼ La entrada MCLR permite reiniciar el estado del micro,
llevándose a cabo dos acciones importantes:
23
Circuito de Reset (MCLR)
Dos circuitos muy usados para RESET
◼ Distribución de la memoria
◼ Dispone de 3 partes de memoria:
◼ Memoria programa (Flash): 2Kx14 palabras (en cada una de las 4 páginas) (aprox.)
◼ Memoria de Datos (RAM): 128 x 8 bytes (en cada uno de los 4 bancos)
◼ Memoria de Datos (EEPROM): 64 x 8 bytes
◼ La memoria de programa y la memoria de datos tienen buses
independientes.
◼ La memoria de datos RAM tiene una estructura basada en 4 bancos de 128
bytes cada uno, seleccionables con los bits RP1 (STATUS<6>) y RP0
(STATUS<5>) del Registro STATUS.
25
Memoria de Programa (Flash)
El PIC 16F8xx tiene un contador de programa (PC) de 13 bits capaz de direccionar un
espacio de memoria de programa de 8Kx14 palabras.
El ancho del bus del programa de memoria es 14 bits. Por lo tanto, todas las
instrucciones son una sola palabra, así un dispositivo con una memoria de programa 8K
x 14 dispone de espacio para 8K instrucciones. Por lo que es mas fácil para determinar
si un dispositivo tiene suficiente memoria de programa para una aplicación deseada.
26
Memoria de Programa (Flash)
Mapa de
Memoria de
Programa
27 27
Memoria de Programa
Contador de Programa (PC)
◼ Registro de 13 bits.
◼ Actúa como puntero de la siguiente instrucción a ser ejecutada
◼ La memoria de programa se divide en páginas de 2K palabras (aprox.).
◼ Cuando las Instrucciones son secuenciales, el PC pasa de una página a otra sin necesidad
de realizar la instrucción de salto.
◼ Las instrucciones de salto y llamado a Subprogramas permiten cargar solo 11 bits en el PC
( 211 =2K aprox.).
◼ Para Saltos y Llamadas entre páginas los 2 bits más altos del PC deben llenarse. Esto se
realiza escribiendo en el registro PCLATH (registro de memoria de datos).
28
Memoria de Programa
PC y PCLATH
◼ Cualquier reset (interno o externo) provocará que el PC pase a tener el valor 0000h y
que por tanto el microcontrolador pase a ejecutar la instrucción situada en dicha
posición.
30
Memoria de Programa
VECTOR DE INTERRUPCION
◼ El vector INTERRUPCION está siempre en la posición 0004h de la memoria de
programa.
31
Memoria de Programa
STACK (PILA DEL PC )
◼ Almacena las direcciones del PC a donde debe retornar el
programa cuando se finaliza una llamada a una subrutina o
cuando se finaliza la ejecución de una rutina de interrupción.
◼ El PIC16F870 tiene una pila de 8 niveles x 13 bits, por tanto,
permite almacenar como máximo 8 saltos a subrutinas (CALLs)
o ejecuciones de rutinas de interrupción.
◼ La memoria para la pila (stack) no forma parte de la memoria
de programa ni de la memoria de datos que tiene el
microcontrolador.
◼ La pila (stack) es gestionada por el hardware.
32
Memoria de Datos
◼ Esta memoria almacena los datos que se manejan en un programa. Estos datos
varían continuamente, por lo que esta memoria debe ser de lectura y escritura.
◼ Se utiliza memoria denominada RAM que es de tipo volátil, con lo cual los datos se
borran en caso de que desaparezca la alimentación, aunque algunos micros llevan
memoria EEPROM para evitar la pérdida de los datos en caso de corte en el
suministro de corriente.
◼ Los tamaños son mucho más reducidos que la memoria de programa; por ejemplo
el PIC16F870 dispone de 128 bytes de datos SRAM y 64 bytes de EEPROM.
33
Memoria de Datos
◼ La memoria de datos está distribuida en 4 posibles bancos de 128 bytes cada uno.
Por tanto, la máxima cantidad de memoria disponible en los PIC16XXXX es de 512
bytes. Sin embargo, no están disponibles todas las posiciones de memoria en todos
los bancos. Por ejemplo, un PIC16F870 solo tiene disponibles 128 posiciones de
memoria de datos.
34
Memoria de Datos
◼ Se distinguen dos tipos de registro:
➢ Registros de funciones especiales SFR. Son los primeros registros (posiciones más bajas
de cada banco). Cada uno de ellos cumple un propósito especial en el control del PIC.
➢ Registros de propósito general GPR. Se pueden usar para guardar datos temporales y
bloques de operaciones. El PIC16F870 dispone de 128 GPR.
36
SFR
Mapa de
Memoria de
Datos
GPR
37
Direccionamiento de la Memoria de
Datos
◼ Existen 2 modos de direccionamiento para acceder a cualquiera de las posiciones de la
memoria de datos:
*Direccionamiento directo * Direccionamiento indirecto
Direccionamiento
se necesitan 9 bits
◼ El FSR (Posición 04h, 84h, 104h ó 184h) actúa como puntero de la posición de memoria
con la que se pretende operar.
39
Direccionamiento Directo
➢ Se Lee el Registro contenido en el código
de la instrucción.
➢ Para la selección del banco activo se usan
los bits RP1 (Bit 6 de Registro Status) y
RP0 (Bit 5 de Registro Status)
40
Registros SFR
◼ Los Registros de Funciones Especiales (SFR) son registros usados por el microcontrolador
y los periféricos para controlar el funcionamiento deseado del dispositivo.
41
42
43
44
Registro: STATUS
STATUS
STATUS
47
Programación de PICs
◼ Herramientas para programar un PIC
49
Lenguajes de Programación
◼ Código de Máquina
◼ Lenguaje de Bajo Nivel (Assembler o
ensamblador)
◼ Lenguaje de Alto Nivel
50
Lenguajes de programación
Código Máquina
◼ Posee el código de ejecución
directamente,
◼ Contiene unos o ceros,
◼ Contiene palabras de tamaño
de 12, 14, 16 bits
◼ Cada instrucción reconocida
por el microcontrolador son
llamadas en conjunto como set
de instrucciones.
Lenguajes de programación
Lenguaje Assembler o
Ensamblador
◼ Considerado el primer lenguaje de
programación.
◼ Consiste en mnemónicos
◼ Facilita la programación en
comparación al lenguaje de
máquina
◼ Es necesario que el programador
conozca el set de instrucciones.
Lenguajes de programación
Alto Nivel
◼ Fácil de entender y escribir.
◼ No es necesario que el programador
esté al tanto del set de instrucciones
del microcontrolador
◼ La implementación es muy rápida
pero no se tiene completo control de
lo que pasa con el microcontrolador
◼ No optimiza memoria
Lenguajes de programación
Lenguaje de
Alto Nivel
Lenguaje
Assembler
equivalencia
Ejemplo en C
◼ Realizar un retardo ó delay de 500 msegundos en MikroC con un PIC
16F870 a una frecuencia de 4 MHz y visualizarlo en un led parpadeante
void main() {
TRISB=0XFE; //Defino el pin RB0 como salida, el resto como entradas
PORTB=0X00; //Escribo 00000000 en pórtico B
while(1){ //Lazo
PORTB.F0=0; //Envió 0L al bit 0 pórtico B
delay_ms(500); // retardo 500ms
RB0_bit=1; //Envió 1L al bit 0 pórtico B
delay_ms(500); // retardo 500ms
}
}
55
Lenguaje Assembler
GENERALIDADES
◼ Lenguaje de programación de bajo nivel
◼ Representación más directa a código de máquina
◼ Correspondencia uno a uno con código de máquina
◼ Lenguaje legible para el programador
◼ Recibe la denominación de código fuente y posee
una extensión *.ASM
◼ Específico para una arquitectura de computadora en
particular
Lenguaje Assembler
Por qué Lenguaje Assembler?
◼ Ejecución rápida de los programas por la
correspondencia uno a uno.
◼ Tamaño del programa pequeño
◼ Optimización de memoria
◼ Acceso directo al hardware
◼ Comprensión de cómo la máquina funciona
◼ Mediante programa ensamblador puede ser
convertido directamente a código de máquina
Set de Instrucciones
El set de instrucciones de un microcontrolador es el conjunto de entradas
binarias que producen acciones definidas durante un ciclo de instrucción (ó 2).
Un set de instrucciones es para el microcontrolador lo mismo que una tabla de
verdad es para una compuerta lógica, etc.
◼ Bit
◼ Unidad básica de información.
◼ El valor de un bit puede ser 0 y 1.
◼ Byte
◼ Un byte consiste de 8 bits colocados uno junto a otro
◼ El bit del extremo derecho de un byte tiene la menor ponderación (LSB)
◼ Máximo 256 posibles combinaciones
58
Set de instrucciones
61
Set de instrucciones
◼ Orientadas al byte
Mnemónico/Operandos Descripción Ciclos
ADDWF f, d Add W and f 1
ANDWF f, d AND W with f 1
CLRF f Clear f 1
CLRW _ Clear W 1
COMF f, d Complement f 1
DECF f, d Decrement f 1
DECFSZ f, d Decrement f, Skip if 0 1
INCF f, d Increment f 1
INCFSZ f, d Increment f, Skip if 0 1
IORWF f, d Inclusive OR W with f 1
MOVF f, d Move f 1
MOVWF f Move W to f 1
NOP _ No Operation 1
RLF f, d Rotate Left f through Carry 1
RRF f, d Rotate Right f through Carry 1
SUBWF f, d Substract W from f 1
SWAPF f, d Swap nibbles in f 1
XORWF f, d Exclusive OR W with f 1
62
Set de instrucciones
◼ Orientadas al bit
63
Set de instrucciones
◼ Orientados a operaciones literales y de control
Mnemónico/Operandos Descripción Ciclos
ADDLW k Add literal and W 1
ANDLW k AND literal with W 1
CALL k Call subroutine 2
CLRWDT _ Clear Watchdog Timer 1
GOTO k Go to address 2
IORLW k Inclusive OR literal with W 1
MOVLW k Move literal to W 1
RETFIE _ Return from interrupt 2
RETLW k Return with Literal in W 2
RETURN _ Return from Subroutine 2
SLEEP _ Go into Standby mode 1
SUBLW k Subtract W from literal 1
XORLW k Exclusive OR literal with W 1
64
Formato de Instrucción de Programa
◼ El código fuente está compuesto por una sucesión de instrucciones de
programa.
◼ Cada línea de programa suele estar compuesta por 4 campos o columnas
separados por uno o más espacios o tabulaciones.
◼ Estos campos son:
66
Formato de Instrucción de Programa
Etiquetas
◼ La etiqueta se ubica en la primera columna en una línea en Lenguaje
Assembler (campo opcional).
◼ Las etiquetas son expresiones escogidas por el usuario, para
identificar a una determinada instrucción del programa
◼ Las etiquetas son asignadas con la dirección de memoria
correspondiente a dicha instrucción.
◼ Las etiquetas pueden volver a usarse en otro lugar pero como
operando de una instrucción.
◼ Se usan frecuentemente en las instrucciones de salto.
67
Formato de Instrucción de Programa
◼ No pueden usarse como nombres de etiquetas las palabras ya
reservadas por Assembler (ORG, EQU) ó nombres de instrucciones
(movf, incf, nop). Por ej.:
68
Formato de Instrucción de Programa
Códigos de Operación (Mnemónicos)
◼ La segunda columna en una línea de lenguaje Assembler suele ser el
campo del código de operación (mnemónicos), que son grupos de
caracteres que simbolizan la tarea a realizar por el microcontrolador.
◼ Los mnemónicos se corresponden con las iniciales del nombre de la
instrucción en inglés, de forma que “recuerdan” la operación que
realiza la instrucción, lo que facilita su operación.
◼ La tarea principal del Ensamblador es la traducción de los códigos de
operación (mnemónicos) en sus equivalentes binarios.
69
Formato de Instrucción de Programa
Directivas
◼ Algunas instrucciones del Lenguaje Assembler no se traducen
directamente a instrucciones del lenguaje máquina. Éstas
instrucciones se denominan directivas.
◼ Las directivas se utilizan como comandos escritos en el código fuente
para realizar un control directo y/ó ahorrar tiempo a la hora de
ensamblar.
◼ Para usar estas directivas ó pseudo-operandos, el programador las
debe colocar en el campo de código de operaciones, y si lo requiere
la directiva, una dirección ó dato en el campo de dirección.
70
Formato de Instrucción de Programa
◼ Las directivas de uso frecuente son instrucciones para el
compilador.
END
◼ Es la única directiva obligatoria. Indica al ensamblador dónde
finaliza el proceso del programa. Debe colocarse en la última línea
del programa.
LIST
◼ Indica el tipo de microcontrolador utilizado.
LIST P=16F870
71
Formato de Instrucción de Programa
INCLUDE
◼ Incluye en el programa un fichero (archivo con código fuente) donde se definen las
etiquetas con las que se nombra a los diferentes registros y sus bits.
#INCLUDE <[Link]> o #INCLUDE “[Link]”
EQU
◼ Define una constante de ensamble con su dirección de memoria
<etiqueta> EQU <expresión>
◼ El valor <expresión> es asignado a <etiqueta>. Estas directivas se suelen colocar al
principio del programa y habitualmente se usan para definir constantes y direcciones
de memoria.
VARIABLE1 EQU 0x20
72
Formato de Instrucción de Programa
ORG
◼ Las instrucciones del código fuente que siguen a esta directiva inician a partir de la
posición indicada por <expresión>.
[<etiqueta>] ORG <expresión>
ORG 0x00
◼ Usualmente se la utiliza para: reset, programa de servicio de interrupción. Por ej.:
Reset ORG 0x00
GOTO Inicio
ORG 0x04 ;vector de interrupción
GOTO interrupción
ORG 0x05
Inicio movf portA,0 ;aquí comienza el programa (lee portA) 73
Formato de Instrucción de Programa
Operandos y Direcciones
◼ Los ensambladores permiten elegir con libertad el tipo de elemento a
colocar en el campo de operando o dirección (registro involucrado).
Formato de Número
◼ Decimal ◼ Binario
D’120’ B’01001110’
.120 b’01001110’
◼ Hexadecimal ◼ ASCII
H’78’ A’hola 123’
0x78 ‘hola 123’
74
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30
Inicio
movwf 0x30
W M(0x30)
código fuente
Fin
75
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30
76
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30
77
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0xA0
Inicio
movwf 0xA0
W M(0xA0)
código fuente
Fin
78
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0xA0
LIST P=16F870 ;Avisa al ensamblador que pic se
va a usar
#INCLUDE “[Link]”
ORG 0X00 ;Indica que desde aquí inicia
programa
BCF STATUS,RP1 ;Escribir 0 en bit RP1
Banco 0
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X20,W ;Mover el contenido de
0x20 al registro W
BCF STATUS,RP1 ;Escribir 0 en bit RP1
Banco 1
BSF STATUS,RP0 ;Escribir 1 en bit RP0
MOVWF 0XA0 ;Mover el contenido del registro
W al registro 0xA0
END
79
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
Inicio
PIC 80
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
LIST P=16F870 ;Avisa al ensamblador que pic se va a usar
#INCLUDE “[Link]” ; incluye librerías del PIC
ORG 0X00
BCF STATUS,RP1 ;Escribir 0 en bit RP1
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X2C,W ;Lee el contenido de registro 0x2C y lo
escribe en registro W
ADDWF 0X2D,W Suma el contenido del registro 0x2D a W y
lo guarda en el registro W
MOVWF 0X2E ;Escribe en registro 0x2E el contenido de W
END
81
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
LIST P=16F870 ;Avisa al ensamblador que pic se va a usar
#INCLUDE “[Link]” ; incluye librerías del PIC
ORG 0X00
BCF STATUS,RP1 ;Escribir 0 en bit RP1
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X2C,W ;Lee el contenido de registro 0x2C y lo
escribe en registro W
ADDWF 0X2D,f Suma el contenido del registro 0x2D a W y
lo guarda en el registro 0x2D
MOVF 0X2D,W ;Lee el contenido de registro 0x2D y lo
escribe en registro W
MOVWF 0X2E ;Escribe en registro 0x2E el contenido de W
END
82