UNIVERSIDAD PRIVADA ANTENOR ORREGO
MICROCONTROLADOR PIC DE
MICROCHIP
Ing. Lenin Llanos León
Familias de uC PIC
Podemos dividirlos en tres grandes familias:
Gama Media
Gama Baja Gama Alta
PIC
PIC PIC 16F PIC PIC
DSPIC PIC32
10F 12F 18F 24F
Familias de uC PIC
Cada una de estas familias ofrecen distintas prestaciones y
características, que permiten al usuario escoger el que más se
adapte a sus necesidades.
En esta primera parte nos enfocaremos al estudio de
microcontroladores de gama media, en particular al PIC
16F88.
Familia 16F
16F877A
PIC
16F876A
16F628A
PIC
16F84A
16F88
PIC
PIC
PIC
1.75KB 3.5KB 14KB 14KB 7KB
18 pin 18 pin 28 pin 40 pin 18 pin
8 bit – Timer 8 bit – Timer 8 bit – Timer 8 bit – Timer 8 bit – Timer
16 bit – Timer 16 bit – Timer 16 bit – Timer 16 bit – Timer
USART USART USART USART
SPI – I2C SPI – I2C SPI – I2C
ADC ADC ADC
PIC 16F88
❑ 18 Pines
❑7 KB memoria de programa
❑368 bytes memoria RAM
16F88
❑256 bytes EEPROM
PIC
❑2 Comparadores
❑7 Canales A/D
❑1 Canal PWM
❑Comunicación Serial, SPI, I2C
PIC 16F88
Una de las razones de que se seleccionó este PIC es que
podemos exportar fácilmente código existente de otras
referencias.
Por ejemplo si tenemos código para el PIC 16F84A, lo
podremos utilizar con nuestro PIC 16F88
16F84A
16F88
PIC
PIC
Herramientas para Programación
Entorno de Desarrollo, es decir el software que nos permitirá
escribir nuestro código fuente y traducirlo a lenguaje de
máquina para que nuestro microcontrolador lo entienda.
Lenguajes de Programación
Bajo Nivel Alto Nivel
❑ Assembler ❑ C – Basic – Otros
Lenguaje Assembler
VENTAJAS DESVENTAJAS
❑ Velocidad rápida en ejecución. ❑ Un poco difícil para el principiante.
❑ Ahorro en memoria de programa. ❑ Susceptible a errores.
❑ Pocas instrucciones. ❑ Ardua tarea para encontrar errores.
❑ Conocimiento a fondo del funcionamiento
del microcontrolador.
❑ Entorno de desarrollo gratuito (MPLAB)
Lenguaje de Alto Nivel
VENTAJAS DESVENTAJAS
❑ Es de fácil programación. ❑ No compatible entre marcas entre si.
❑ Recomendado para programas ❑ Mayor consuma de memoria.
extensos. ❑ Costo elevado.
❑ Ideal para hacer programas con
operaciones matemáticas complejas.
❑ Poseen una extensa colección de
librerías.
Hardware de Programación
Tipos de Programadores
Herramientas de Simulación
UNIVERSIDAD PRIVADA ANTENOR ORREGO
MICROCONTROLADOR PIC 16F88
Ing. Lenin Llanos León
Pines del PIC 16F88
Circuito de Alimentación
Circuito de Reloj
Circuito de Reloj con Cristal
Circuito de Reloj con Resonador
Circuito de Reloj RC
Circuito de Reloj Interno
Pin Reset (Master Clear)
Circuito de Reset
Arquitectura Interna
Procesador Central
Memoria de Programa
Memoria de Datos
Memoria de Programa
Memoria de Programa
Memoria Flash de 4K
palabras (14 bits) y
direccionada por el PC que
tiene un tamaño de 13 bits.
Pila con 8 niveles de
profundidad.
El vector de reset ocupa la
dirección 0000h y el vector
de interrupción la 0004h.
Memoria de Datos
Posiciones implementadas en RAM y otra en EEPROM.
En la RAM se alojan los registros fundamentales para
el funcionamiento del procesador y manejo de
periféricos (STATUS, TRISA, PORTA), así como los
registro de Propósito General.
La memoria EEPROM sirve para guardar datos de
forma no volátil.
Memoria de Datos
La RAM consta de 4 bancos con 128 bytes cada uno.
Para seleccionar el banco que se desea acceder se
usan los bits 5 (RP0) y 6 (RP1) del registro ESTADO
(STATUS).
RP0 RP1 BANCO
0 0 BANCO 1
0 1 BANCO 2
1 0 BANCO 3
1 1 BANCO 4
Memoria de Datos
Tamaños de Memoria
REGISTRO ESTADO (STATUS)
Es el registro más usado pues sus bits están
destinados a controlar las funciones vitales del
procesador.
Está duplicado en las cuartas posiciones de cada
banco (03h,83h,103h,183h)
REGISTRO ESTADO (STATUS)
Los tres bits de menos peso son los señalizadores de
ciertas condiciones en las operaciones lógico –
aritméticas.
Z: Señalizador de cero. Se pone a 1 cuando el resultado es
cero.
C: Acarreo – llevada del 8º bit. Se pone a uno
automáticamente cuando existe un acarreo en el bit de más
peso en las instrucciones de suma. También actúa como
señalizador en las instrucciones de resta, pero en este caso
la correspondencia es inversa, si vale 0 es llevada.
DC: Acarreo – llevada del 4º bit. Funciona igual que el
señalizador C, pero para el 4º bit.
REGISTRO ESTADO (STATUS)
Los señalizadores PD# y TO#, son activos por nivel
bajo (#) y sirven para indicar la causa que ha
provocado la reinicialización del procesador.
PD#: Se activa a 0 al ejecutarse la instrucción SLEEP. Se
pone a uno automáticamente tras la conexión de
alimentación o bien al ejecutarse la instrucción CLRWDT
TO#: Se activa a nivel bajo al desbordarse el perro
guardián. Toma el valor 1 tras la conexión de
alimentación o al ejecutarse las instrucciones CLRWDT o
SLEEP.
REGISTRO ESTADO (STATUS)
Finalmente los tres bits de más peso del registro de
estado se emplean para seleccionar el banco de la
RAM al que se desea acceder.
El bit IRP se usa conectado con el bit de más peso del
registro FSR para elegir el banco de RAM en el
direccionamiento indirecto.
RP0 RP1 BANCO
0 0 BANCO 1
0 1 BANCO 2
1 0 BANCO 3
1 1 BANCO 4
UNIVERSIDAD PRIVADA ANTENOR ORREGO
LENGUAJE ASSEMBLER
Ing. Lenin Llanos León
Lenguaje Assembler
Lenguaje de Máquina
Lenguaje Assembler
Instrucciones de Programa
REPERTORIO DE INSTRUCCIONES
Está compuesto por 35 instrucciones que pueden ser
agrupadas en los siguientes grupos:
Instrucciones de carga.
Instrucciones aritméticas.
Instrucciones lógicas.
Instrucciones de bit.
Instrucciones de salto.
Instrucciones para manejo de subrutinas.
Instrucciones especiales.
INSTRUCCIONES DE CARGA
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
CLRF f 00 → (f) Z
CLRW 00 → (w) Z
(f) → (destino)
MOVF f,d d=0 : destino = w Z
d=1 : destino = f
MOVLW k k → (W) Ninguno
MOVWF f (w) → (f) Ninguno
INSTRUCCIONES ARITMÉTICAS
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
ADDLW k (w) + k → (w) C, DC, Z
ADDWF f,d (w) + (f) → (destino) C, DC, Z
DECF f,d (f) – 1 → (destino) Z
INCF f,d (f) + 1 → (destino) Z
SUBLW k k – (w) → (w) C, DC, Z
SUBWF f,d (f) – (w) → (destino) C, DC, Z
INSTRUCCIONES LÓGICAS
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
ANDLW k (w) and k → (w) Z
ANDWF f,d (w) and (f) → (destino) Z
COMF f,d (/f) → (destino) Z
IORLW k (w) or k → (w) Z
IORWF f,d (w) or (f) → (destino) Z
INSTRUCCIONES LÓGICAS
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
Rota (f) a la izquierda a
RLF f,d C
través del carry → (destino)
Rota (f) a la derecha a
RRF f,d C
través del carry → (destino)
Intercambia los niveles de
SWAPF f,d Ninguno
(f) → (destino)
XORLW k (w) xor k → (w) Z
XORWF f,d (w) xor (f) → (destino) Z
INSTRUCCIONES DE BIT
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
Pone a cero el bit ‘b’ del
BCF f,b Ninguno
registro f
Pone a uno el bit ‘b’ del
BSF f,b Ninguno
registro f
INSTRUCCIONES DE SALTO
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
BTFSC f,b Salta si el bit ‘b’ de f es cero Ninguno
BTFSS f,b Salta si el bit ‘b’ de f es uno Ninguno
(f) – 1 → (destino)
decfsz f,d Ninguno
y salta si es cero
(f) + 1 → (destino)
incfsz f,d Ninguno
y salta si es cero
goto k Salta a la dirección ‘k’ Ninguno
INSTRUCCIONES PARA MANEJO DE
SUBRUTINAS
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
CALL k Llamada a subrutina Ninguno
Retorno de una
RETFIE Ninguno
Interrupción
RETLW k Retorno con un literal en w Ninguno
RETURN Retorno de una subrutina Ninguno
INSTRUCCIONES ESPECIALES
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
CLRWDT Borra Timer del Watchdog /TO, /PD
NOP No operación Ninguno
Entra en modo bajo
SLEEP /TO, /PD
consumo
PRIMER PROGRAMA
Encender un LED conectado en RB0 cada vez que el
interruptor este cerrado.
R2
10k
U1
16 17
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1
1
RA2/AN2/CVREF/VREF-
4 2
FREQ=4MHz RA5/MCLR RA3/AN3/C1OUT/VREF+
3
RA4/AN4/T0CKI/C2OUT
R3
R1 RB0/INT/CCP1
6
10k 7
RB1/SDI/SDA 330
8
RB2/SDO/RX/DT
RB3/CCP1
9 D1
10 LED-GREEN
RB4/SCK/SCL
11
RB5/SS/TX/CK
12
RB6/AN5/T1OSO/T1CKI
13
RB7/AN6/T1OSI
PIC16F88
PRIMER PROGRAMA
Diagrama de Flujo para la solución:
INICIO
Definición de PIC y
Variables
SI Pulsador NO
Presionado?
Configuración de
Puertos
Prender Led Apagar Led
Led Apagado
PRIMER PROGRAMA
Definición de PIC y
Variables
list p=16f88
#include p16f88.inc
__CONFIG _CONFIG1, _CPD_OFF & _CP_OFF & _DEBUG_OFF &
_LVP_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF
&_WRT_PROTECT_OFF & _XT_OSC & _BODEN_OFF
Led equ 0
Pulsador equ 0
PRIMER PROGRAMA
Configuración de
Puertos
org 0x00
goto Inicio
org 0x05
Led Apagado
Inicio
bsf STATUS,RP0
bsf TRISA,0 bcf PORTB,Led
bcf TRISB,0
clrf ANSEL
bcf STATUS,RP0
PRIMER PROGRAMA
Bucle
btfsc PORTA,Pulsador
goto Apagar
SI Pulsador
NO
Presionado?
Prender Led Apagar Led
Apagar
bsf PORTB,Led
bcf PORTB,Led
goto Bucle
PRIMER PROGRAMA
PRIMER PROGRAMA
R2 R2
10k 10k
U1
16
17 17
RA0/AN0 RA7/OSC1/CLKIN RA0/AN0
15
18 18
RA1/AN1 RA6/OSC2/CLKOUT RA1/AN1
1 1
VREF/VREF- RA2/AN2/CVREF/VREF-
Q=4MHz 24 RA5/MCLR RA3/AN3/C1OUT/VREF+
2
OUT/VREF+ 3
3 RA4/AN4/T0CKI/C2OUT
0CKI/C2OUT
R3 R3
B0/INT/CCP1
R1
6 RB0/INT/CCP1
6
7
10k 7 330
B1/SDI/SDA 330 RB1/SDI/SDA
8 8
SDO/RX/DT RB2/SDO/RX/DT
9 D1 RB3/CCP1 9 D1
RB3/CCP1 10
10 LED-GREEN
RB4/SCK/SCL LED-GREEN
B4/SCK/SCL 11
11 RB5/SS/TX/CK
B5/SS/TX/CK 12
12 RB6/AN5/T1OSO/T1CKI
1OSO/T1CKI 13
13 RB7/AN6/T1OSI
7/AN6/T1OSI
PIC16F88