Introduccin
Competencias Especficas
Conoce, comprende y aplica la arquitectura del microcontrolador PIC 16F877
PIC
Utiliza los recursos del microcontrolador a travs del lenguaje ensamblador
(Microprogramacin)
Simula en MPLAB y Proteus sistemas basados en el microcontrolador 16F877
Microcontrolador
Circuito integrado programable que contiene los elementos bsicos de un
computador.
2 39
3 38
4 37
5 36
6 35
7 34
8 33
9 32
10 31
11 30
12 29
13 28
14 27
15 26
16 25
17 24
18 23
19 22
El MC en un Sistema de Control
20 21
Seal de
Seal de Mando
Referencia Variable
Controlada
Actuadores Planta
Programacin del MC
Escribir el programa en lenguaje ensamblador o en lenguaje C. En el curso
usaremos el lenguaje ensamblador.
Depurar el programa
Obtener el programa en lenguaje mquina
Grabar el programa en el microcontrolador
Arquitectura
Atributos del sistema visibles al programador en lenguaje ensamblador:
Registros de Trabajo
Modos de direccionamiento
Conjunto de Instrucciones
Sistema de Interrupciones
Organizacin
Unidades funcionales e interconexiones que materializan una Arquitectura
(Hardware)
El Microcontrolador PIC 16F877
CPU RISC. Tiene 35 instrucciones.
Cada instruccin es de una sola palabra de 14 bits.
Mxima frecuencia de reloj 20 MHz.
Todas las instrucciones a excepcin de las de salto se ejecutan en un ciclo de
instruccin.
Memoria de programa Flash de 8Kx14 words
Memoria de datos RAM de 368 bytes
Memoria de datos EEPROM de 256 Bytes
5 puertos de entrada/salida: A, B, C, D, E con 6, 8, 8, 8, 3 lneas
respectivamente
3 timers: 2 de 8 bits y 1 de 16 bits
2 mdulos de captura-comparacin-PWM
ADC de 10 bits de 8 canales
Puerto paralelo esclavo
Comunicacin serial USART, SPI/I2C
Diagrama de Bloques
Memoria
de Memoria de Timer 2
Memoria
Programa Datos
EEPROM Timer 1
(Flash) (SRAM)
256x8 CCP1 CCP2
8Kx14 368x8 Timer 0
Puertos de MSSP
ADC USART
Entrada/Salida SPI/I2C
Microprocesador
Circuito integrado que contiene una unidad central de procesamiento CPU
Diagrama de bloques de la CPU
Memoria de Programa
Circuito digital que almacena Instrucciones.
Memoria de Datos
Circuito digital que almacena los Datos.
Contenido
13 0
Arreglo
Celdas de 14 bits,
lineal Posiciones
de
celdas ...
Direccin
Combinacin binaria que Identifica a una posicin de memoria
1FFE H 1FE H
1FFF H 1FF H
Dato
Combinacin binaria a ser procesada
Instruccin
Combinacin binaria que para el Procesador Central es una orden a ser ejecutada
Formato de Instruccin
13 0
Un Word de 14 bits
Programa
Secuencia de Instrucciones
Direccin Contenido
0000 H Instruccin 1
0001 H Instruccin 2
0002 H Instruccin 3
0003 H Instruccin 4
0004 H Instruccin 5
0005 H Instruccin 6
... ...
1FFE H
1FFF H
1007 H 3CA9
1008 H 0077
1009 H 24B2
100A H 09C1
100B H 180D
100C H 1160
... ...
Funcin de la CPU
10001100100111
01110001010100
00011101010100
11101010100011
01010100000111
11101000100011
00001101010011
Diagrama de Flujo
INICIO
0000 PC
Carga de la
instruccin FETCH
PC + 1 PC
Ejecucin
Ejecucin
3. La Memoria del MC
Tipos de Memoria
8Kx14 de memoria FLASH de programa
368 bytes de memoria SRAM (RAM esttica) de datos
256 bytes de EEPROM (RAM no voltil), tambin para datos
Memoria FLASH
Almacena programas. Es direccionada por el contador de programa PC
Memoria SRAM
Almacena datos
Registros de Funciones Especiales
Configuran y permiten el acceso a los recursos del microcontrolador
Memoria EEPROM
El acceso se realiza a travs de los registros SFR:
10D EEADR 00
10F EEADRH
10C EEDATA 256 bytes
10E EEDATH
18C EECON1
18D EECON2
FF
Modos de Direccionamiento
Modo de direccionamiento inherente
Modo de direccionamiento literal
Modo de direccionamiento directo
Modo de direccionamiento indirecto
Direccionamiento Inherente
No necesita ningn operando. Ejemplo: SLEEP
Direccionamiento Literal
MOVLW 0x2
CPU
IR
3002 MOVLW 0x2
W 00
CPU
IR
3002 MOVLW 0x2
W 02
1
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
Direccionamiento Directo
MOVWF 0x20
CPU
Memoria de Datos
IR
MOVWF 0x20 Direccin Contenido
00A0 00 H
01 H
20
... ...
1F H
20 H 5D
... ...
W 03 03
FE H
FF H
CPU
Memoria de Datos
IR
MOVWF 0x20 Direccin Contenido
00A0 00 H
01 H
20
... ...
1F H
20 H 03
... ...
W 03 03
FE H
FF H
2
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
Direccionamiento Indirecto
FSR (Registro de seleccin de File) acta como puntero.
Toda instruccin que usa el registro INDF realmente accede al registro referenciado
por el registro FSR.
CPU
Memoria de Datos
CLRF INDF
Direccin Contenido
IR 000 H EA
0180 001 H 96
...
00 020 H 12
021 H 36
...
FSR 20 1FE H 00
0020 1FF H 00
CPU
Memoria de Datos
CLRF INDF
Direccin Contenido
IR 000 H EA
0180 001 H 96
...
00 020 H 00
021 H 36
...
FSR 20 1FE H 00
0020 1FF H 00
3
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
Nomenclatura
Campo Descripcin Campo Descripcin
Bit selector de destino: d = 0: El resultado
f Direccin de registro (de 00h a 7Fh) d se almacena en W. d = 1: El resultado se
almacena en el registro f. Por defecto d=1.
W Registro de trabajo (acumulador) PC Contador de programa.
b Direccin de bit dentro de un registro de 8 bits TO Bit de tiempo expirado.
k Campo de literal, dato constante o etiqueta PD Bit de baja potencia.
No importa 0 o 1. El ensamblador generar
X el cdigo con x=0. Es recomendable esta forma
de uso por compatibilidad.
Conjunto de Instrucciones
4
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
5
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
6
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
7
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
8
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
9
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
10
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
Ejemplo 1
Escribir un programa en lenguaje ensamblador que sume nmeros de 16 bits segn
el esquema:
(21)(20)+
(23)(22)
-----------
(23)(22)
#include <p16f877.inc>
MOVF 0x20,W
ADDWF 0x22,F
BTFSC STATUS,C
INCF 0x23,F
MOVF 0x21,W
ADDWF 0x23,F
End
11
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
1. Procedimientos
La pila
12
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
13
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
Ejemplo 3
Escribir un programa de multiplicacin de nmeros de 8 bits
#include <p16f877.inc> RRF MR,F
;(26)-Multiplicando BTFSC STATUS,C
;(28)-Multiplicador CALL SUMA16
;(25)(24)-Resultado CALL DESPLAZA16
;(29)-Contador DECFSZ CNT,F
MD EQU 0X26 GOTO OTRO_BIT
MR EQU 0X28 BUCLE:
MD_H EQU 0X27 GOTO BUCLE
PR_H EQU 0X25 SUMA16:
PR_L EQU 0X24 MOVF MD,W
CNT EQU 0X29 ADDWF PR_L,F
MOVLW 0X8D BTFSC STATUS,C
MOVWF MD INCF PR_H,F
MOVLW 0XB5 MOVF MD_H,W
MOVWF MR ADDWF PR_H,F
MOVLW 0X00 RETURN
MOVWF PR_H DESPLAZA16:
MOVWF PR_L BCF STATUS,C
MOVWF MD_H RLF MD,F
MOVLW 0X08 RLF MD_H,F
MOVWF CNT RETURN
OTRO_BIT: END
14
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto
2. Manejo de tablas
Ejemplo 4
Escribir el programa que convierte una cifra BCD en cdigo 7 segmentos
#include <p16f877.inc>
CIFRA EQU 0X20 a
MOVLW 6
MOVWF CIFRA f b
CALL BCD_A_7SEG g
BUCLE:
GOTO BUCLE e c
BCD_A_7SEG:
MOVF CIFRA,W
ADDWF PCL,F d
; -gfedcba
RETLW B'00111111' ; Codigo 7 seg para la cifra 0
RETLW b'00000110' ; Codigo 7 seg para la cifra 1
RETLW b'01011011' ; Codigo 7 seg para la cifra 2
RETLW b'01001111' ; Codigo 7 seg para la cifra 3
RETLW b'01100110' ; Codigo 7 seg para la cifra 4
RETLW b'01101101' ; Codigo 7 seg para la cifra 5
RETLW b'01111101' ; Codigo 7 seg para la cifra 6
RETLW b'00000111' ; Codigo 7 seg para la cifra 7
RETLW b'01111111' ; Codigo 7 seg para la cifra 8
RETLW b'01101111' ; Codigo 7 seg para la cifra 9
END
15
1. Puertos de Entrada/Salida
Patillaje
Registros de los Puertos de Entrada/Salida
PUERTO B
Pines RB3:RB0 Pines RB7:RB4
PUERTO C
Pines RC<2:0>, RC<7:5> RC<4:3>
PORT D PORT E
2. Sistema de Interrupciones
Las interrupciones permiten a dispositivos externos o eventos externos forzar un
cambio en la secuencia de ejecucin del programa. Cuando ocurre una
interrupcin, la ejecucin del programa salta a la direccin 004.
El programa a partir de la direccin 004 se llama rutina de servicio de interrupcin
(ISR) y termina en una instruccin de retorno de interrupcin (RETFIE). Con esta
instruccin se regresa al programa principal a la direccin que haba sido
almacenada automticamente en la pila.
La fuente de interrupcin se identifica por su flag asociado. Existe tambin, un bit
de habilitacin asociado a cada fuente de interrupcin y un bit habilitador
global que puede inhabilitar todas las interrupciones.
Si dos o ms fuentes de interrupcin estn habilitadas, la ISR debe determinar
cul es la fuente activa.
Fuentes de Interrupcin
Lgica de interrupcin
3. El Timer 0
Principio de funcionamiento de un Timer
Desbordamiento
Esquema descriptivo
Caractersticas
Temporizador/contador de 8 bits
Se puede leer y se puede escribir
Pre-escalador programable de 8 bits
Seleccin de reloj interno o externo
Interrupcin por desbordamiento de FFH a 00H
Seleccin de flanco para el reloj externo
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
1. El Tiimer 0
Caracteersticas
Temporizador/c contador de 8 bits
Permitte lectura
a y escriturra
Pre-esscalador programa
p able de 8 bits
Fuente de reloj seleccion nable externa o intterna
Puede e producir interrupccin por desbordam
d miento (C
Cambio de
e FFh a 00
0h)
Flancoo seleccio
onable pa ara el relo
oj externo
Esquem
ma Descrriptivo
Registroo OPTIO
ON_REG
G
0 - Interru
upcin poor flanco de
d bajada a del pin INT.
T0CS Bitt de selec
ccin de reloj del timmer 0
1 Los puulsos para
a el timer 0 ingresann por el pin RA4.
0 - Reloj interno (Fo
osc/4).
T0SE Bit de selecccin de flaanco de la fuente del timer 0
1 Incremmento en el flanco o de bajadda en el pin
p
0 - Incremmento en el flanco de subida a en el pin
n
PSA Bit de asigna acin de pre-escal
p ador
1 El pre-escalado or se asignna al wathhdog
0 - El pre--escaladoor se asign
na al timer 0
PS2, PS1, PS0 Bit de
d selecc cin del fa
actor de pre-escala
p amiento
Pre-escaalador asignado
a al Timeer 0 (PSA
A=0)
2
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Pre-escaalador asignado
a al Watcchdog (P
PSA=1)
3
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
; El Time
er se ha desbordado
d o
2. El Tiimer 1
Caracteersticas
Temporizador/c contador de 16 bitss
Permitte lectura
a y escriturra
Fuente de reloj seleccion nable externa o intterna
Puedee producir interrupc cin por desbordam
d miento (C
Cambio de
e FFFFh a 0000h)
Se puede reiniccializar de
esde los mdulos
m CCP
Registro
o contador de 16 bitts
Modos de opera
acin
Con reloj interno
o
Con reloj externo
o
Con reloj externo
o y circuitto oscilador
Esquem
ma Descrriptivo
4
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Timer 1 operan
ndo con reloj
r inteerno
Timer 1 operan
ndo con reloj
r externo
5
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Registroo T1CON
6
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Lectura
a del Tim
mer 1 en corrida libre
; Todas l
las interr
rupciones estn inh
habilitada
as
MOVF TMR1H,
T W ; Leer el byte alto
o
MOVWF TMPH ;
MOVF TMR1L,
T W ; Leer el byte bajo
o
MOVWF TMPL ;
MOVF TMR1H,
T W ; Leer el byte alto
o
SUBWF TMPH, W ; Sustraer
r
BTFSC STATUS,Z ; Difere
encia no es
e 0?
GOTO CONTINUE
C ectura de 16 bits
; Buena le
;
; TMR1L h
ha generad
do acarreo
o entre la
as lectura
as del byt
te alto y bajo.
7
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
; La nuev
va lectura
a ser cor
rrecta.
MOVF TMR1H,
T W ; Leer byt
te alto
MOVWF TMPH ;
MOVF TMR1L,
T W ; Leer byt
te bajo
MOVWF TMPL ;
requiere, se vuelve
; Si se r en a habil
litar las interrupc
ciones
CONTINUE ; Continu
uacin del
l cdigo
3. El Tiimer 2
El Timer 2 es de 8 bits
b con pre-escalador, post--escaladoor y un reg
gistro de periodo.
p
Cuando en el pre e-escalad
dor y post-escalad
dor se collocan los valores mximos,
m el
intervalo de tiemppo generaado es el mismo
m que el de un
n timer dee 16 bits.
T2CON
N registerr
TOUTPS3 - TOUTPS0
0 Bits de seleccin
n del facto
or del posst-escalam
miento de
el Timer2
8
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
9
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
44. El Mdu
M ulo CC
CP1
Contiene
e un registtro de 16 bits
b que puede
p fun
ncionar co
omo:
Registtro de 16 bits
b de ca aptura
Registtro de 16 bits
b de co omparaci n
Registtro de ciclo de trab
bajo de se
eal PWM
Modo Captura
C
10
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Modo Compara
C acin
Disparad
dor de
Evento Es
special
Modo PWM
P
11
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
Periodo PWM
P
Periodo PW
WM = [(PR2) + 1] 4 TOSC (v
valor del pree-escalador de TMR2)
Para foscc = 20 MH
Hz (Tosc=550nS).
Resolucin PWM
Ressolucin = log2(FOSSC/(FPWM*V
Valor Pre--escaladorr)) bits
Timer u
usado en
n los mod
dos del mdulo
m C
CCP
Modo CCP Tim
mer usado
Captura Timer 1
Comparaacin Timer 1
PWM Timer 2
Interacccin de los
l dos mdulos
m CCP
Modo dee Mod
do de
Interraccin
CCPx CC
CPy
Captura Capturra Tienen la misma base dee tiempo TM
MR1
La comparaccin debe seer configuraada como Diisparador dee Evento
Captura Comparacin
Especial, el cual
c borra TMR1.
T
Las comparaaciones debeen ser configuradas com mo Disparaddor de Evennto
Comparaciin Comparacin
Especial, el cual
c borra TMR1.
T
Las seales PWM
P tendrn la mismaa frecuenciaa y tasa de actualizaci
a n
PWM PWM
(IInterrupcinn TMR2).
PWM Capturra N
Ninguna
12
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas
CCP1C
CON Reg
gister
CCP1M33 - CCP1M
M0 Bitss de selecccin del modo
m del modulo
m CC
CP1.
CCP
P1M3 -
Modo
CC
CP1M0
0
0000 Mduloo CCPx inhaabilitado (R
Resetea al mdulo)
m
0
0100 Modo captura,
c cadaa flanco de bajada
0
0101 Modo captura,
c cadaa flanco de subida
0
0110 Modo captura,
c cadaa 4to flancoo de subida
0
0111 Modo captura,
c cadaa 16avo flannco de subida
Modo comparacin
c n, inicializa el pin CCP
P en nivel baajo, en la igualdad de laa
1000
comparaacin setea el
e pin CCP (CCPIF es seteado)
Modo comparacin
c n, inicializa el pin CCP
P en nivel allto, en la iguualdad de laa
1001
comparaacin resetea el pin CCP (CCPIF es e seteado)
Modo comparacin
c n, Genera innterrupcin en la igualddad de la coomparacin
1010
(CCPIF es seteado, el pin CCP P no es afecttado)
1011 Modo coomparacin n, Disparadoor de Evento o Especial (CCPIF
( es seteado)
s
11xx Modo PW
WM
Inicializzacin en
n modo P
PWM
CLRF CCP1CON
C ; Mdulo CC
CP apagado
o
CLRF TMR2
T ; Bor
rrar Timer
r 2
MOVLW 0x7F ;
MOVWF PR2 ;
MOVLW 0x1F ;
MOVWF CCPR1L ; Ciclo de trabajo de
d 25% dell periodo PWM
CLRF INTCON
I ; Inhabilita
I ar interru
upciones y borrar T0IF
T
BSF ST
TATUS, RP0
0 ; Banco 1
BCF TR
RISC, PWM1
1 ; Pin de
e salida
CLRF PIE1
P habilitar interrupc
; Inh ciones per
rifricas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los Flags
F de interrupci
i iones peri
ifricas
MOVLW 0x2C ; Mo
odo PWM, los
l 2 LSBs
s del cicl
lo de trab
bajo = 10
MOVWF CCP1CON ;
BSF T2
2CON, TMR2
2ON ; Time
er 2 arran
ncado
;
errupcin de CCP1 est
; La inte e inhab
bilitada,
; consult
tar el fla errupcin de TMR 2
ag de inte
;
od_Match
PWM_Perio
BTFSS PIR1, TMR
R2IF
GOTO PWM_Period
P d_Match
; Actuali
izar el pe
eriodo PWM
M period y el sigui
iente cicl
lo de trab
bajo PWM
BCF PI
IR1, TMR2I
IF
13
CURSO: MICROCONTROLADORES Y MICROPROGRAMACIN CLASES PRCTICAS
1. Matriz de LEDs
1 2 3 4 5
1
CURSO: MICROCONTROLADORES Y MICROPROGRAMACIN CLASES PRCTICAS
RD0
A
RD1
B
RD2
C
RD3
D
RD4
E
RD5
F
RD6
G
1 2 3 4 5
Vcc
2
CURSO: MICROCONTROLADORES Y MICROPROGRAMACIN CLASES PRCTICAS
Fila 1
.
.
.
Fila 7
...
Vcc
Col 1 Col 5
Filas Columnas
1 2 3 4 5 6 7 1 2 3 4 5
0 1 1 1 1 1 1 0 0 0 0 0
1 0 1 1 1 1 1 0 1 1 1 1
1 1 0 1 1 1 1 0 1 1 1 1
1 1 1 0 1 1 1 0 0 0 0 1
1 1 1 1 0 1 1 0 1 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0
3
CURSO: MICROCONTROLADORES Y MICROPROGRAMACIN
Letrero Publicitario
Fila 1
R1
.
.
... .
Fila 7
R7
... ...
Vcc
LATCHEAR
Registro de LATCHS
...
CLOCK
4
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel
F Serruto
LM0016L
5
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
16F877
RB
B3
RB
B2
RB
B1
RB
B0
RA
A2
RA
A1
RA
A0
Escriitura en
n el LCD
D
6
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
Diagrama de
d Bloqu
ues del HD4478
H 80
7
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
8
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
9
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
10
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto
11
Curso: Microcontroladores y Microprogramacin - Clases Prcticas Profesor: Ing. Wildor Ferrel Serruto
Algunos Procedimientos
LCD_E BSF PORTA,2 ;ACTIVA E
NOP ;PAUSA
BCF PORTA,2 ;DESACTIVA E
RETURN
CALL LCD_REG
CLRF DIGITO
RETURN
13