Vous êtes sur la page 1sur 64

1.

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.

Sirve para controlar una tarea determinada.


Por su tamao reducido suele ir incorporado en el dispositivo al que gobierna
(controlador embebido)
Funcin Principal del MC
1 40

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

Seal Medida Elemento de


Medicin

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

CPU Buses Internos

Puertos de MSSP
ADC USART
Entrada/Salida SPI/I2C

2. La CPU El Procesador Central


Circuito digital que ejecuta programas almacenados en la memoria de programa.

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.

Esquema Simplificado de Memoria de Programa

Contenido
13 0

Arreglo
Celdas de 14 bits,
lineal Posiciones
de
celdas ...

Direccin
Combinacin binaria que Identifica a una posicin de memoria

Memoria de Programa Memoria de Datos


Direccin Contenido Direccin Contenido
0000 H 000 H
0001 H 001 H
0002 H 002 H
0003 H 003 H

... ... ... ...

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

Lectura de Memoria de Programa

CPU Memoria de Programa


IR Direccin Contenido
1377 1377 0000 H
0001 H
0002 H 1377
0003 H
PC 0004 H
0002 H 0002 ... ...
H 1FFE H
1FFF H

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

Funcin del Contador de Programa


Direccionar la instruccin a realizar. (PC) - Contenido del registro PC
Ejemplo (PC) =100A;
Memoria de Programa
PC
Direccin Contenido
100A
... ...

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

STATUS - Registro de Estado

IRP: Selecciona el banco en direccionamiento indirecto


RP1 RP0: Bits de seleccin de banco en direccionamiento directo
/TO: Bit time-out
/PD: Bit power-down
Z : Bit cero
DC : Bit de acarreo/prstamo de dgito
C : Bit de acarreo/prstamo
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto

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

Llamado y Retorno de un Procedimiento


Programa Principal Procedimiento
Direccin del
1200 1280
Procedimiento
1201 1281
1202 1282
1203 CALL 1283
Direccin
1204 1284
de Retorno
1205 1285
1206 1286
1207 1287
1288
1289 RETURN

12
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto

Sustraccin de nmeros de 8 bits sin signo


Ejemplo 2
Escribir un programa de sustraccin de nmeros de 8 bits
;---------------------------------------- ANDLW 0X0F
; SUTRACCION DE NUMEROS MOVWF SUS
; BCD DE DOS CIFRAS CALL RESTA_BCD_UNA_CIFRA
;---------------------------------------- SWAPF MIN,W
#INCLUDE <P16F877.INC> IORWF TEMP,W
MINU EQU 0X22 MOVWF MINU
SUST EQU 0X21 MOVF PRE,W
PRES EQU 0X20 MOVWF PRES
TEMP EQU 0X23
MIN EQU 0X26 SWAPF STATUS_TEMP,W
SUS EQU 0X25 MOVWF STATUS
PRE EQU 0X24 SWAPF W_TEMP,F
W_TEMP EQU 0X7F SWAPF W_TEMP,W
STATUS_TEMP EQU 0X28 RETURN
;----------------------------------------
MOVLW 0X99 ; PROCEDIMIENTO DE SUTRACCION DE NUMEROS
MOVWF MINU ; BCD DE UNA CIFRA
MOVLW 0X07 ;----------------------------------------
MOVWF SUST ;Esquema
MOVLW 0X00 ; (26) -
MOVWF PRES ; (25)
BUCLE: ; (24) Prestamo
CALL RESTA_BCD ; -----
GOTO BUCLE ;(24)(26)
;---------------------------------------- RESTA_BCD_UNA_CIFRA:
; PROCEDIMIENTO DE SUTRACCION DE NUMEROS MOVF PRE,W
; BCD DE DOS CIFRAS SUBWF MIN,W
;---------------------------------------- MOVWF MIN
;Esquema BTFSS STATUS,C
; (22) - GOTO ESUNO
; (21) GOTO ESCERO
; (20) Prestamo ESUNO:
; ----- MOVLW 0X09
;(20)(22) MOVWF MIN
RESTA_BCD: MOVLW 0X01
MOVWF W_TEMP MOVWF PRE
SWAPF STATUS,W GOTO SIGUE
CLRF STATUS;Banco 0 ESCERO:
MOVWF STATUS_TEMP MOVLW 0X00
MOVWF PRE
MOVF PRES,W SIGUE:
MOVWF PRE MOVF SUS,W
MOVF MINU,W SUBWF MIN,W
ANDLW 0X0F MOVWF MIN
MOVWF MIN BTFSS STATUS,C
MOVF SUST,W GOTO ESUNO2
ANDLW 0X0F GOTO ESCERO2
MOVWF SUS ESUNO2:
CALL RESTA_BCD_UNA_CIFRA ADDLW 0X0A
MOVF MIN,W MOVWF MIN
MOVWF TEMP MOVLW 0X01
SWAPF MINU,W MOVWF PRE
ANDLW 0X0F ESCERO2:
MOVWF MIN RETURN
SWAPF SUST,W END

13
Curso: Microcontroladores y Microprogramacin Clases Prcticas Profesor: Wildor Ferrel Serruto

Multiplicacin de nmeros de 8 bits sin signo


Borrar el registro del resultado
Completar el byte alto del multiplicando con cero
Poner valor 8 en el contador
Repeat
Desplazar el multiplicador a travs del acarreo
Si el acarreo es 1, sumar el multiplicando al resultado
Desplazar el multiplicando a la izquierda
Decrementar el contador
Until el contador se haga cero

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

x - desconocido, u - no alterado, - - no implementado


PUERTO A
BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Seleccionar el banco 0
CLRF PORTA ; Inicializar el Puerto A
BSF STATUS, RP0 ; Seleccionar el banco 1
MOVLW 0x06 ; Configurar todos los pines
MOVWF ADCON1 ; como lneas digitales
MOVLW 0xCF ; Inicializar la direccin del dato
MOVWF TRISA ; Colocar RA<3:0> como entradas, RA<5:4> como salidas
Pines RA3:RA0 y RA5 Pin RA4

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

Llamado y Retorno de una Interrupcin

Programa Principal ISR


300 Direccin de 004 GOTO
301 la ISR 005
302
EVENT 303 080
O 304 081
Direccin 305 082
306 083
de Retorno 307 084
085
086 RETFIE
Interrupciones Externas
La interrupcin externa RB0/INT se dispara por flanco:

Si INTEDG = 1 por flanco ascendente


Si INTEDG = 0 por flanco descendente

Esta interrupcin puede ser inhabilitada borrando el bit INTE.


Cuando en el pin RB0/INT se presenta un flanco vlido, el flag INTF se setea. Este flag
debe ser borrado por software en la ISR antes de rehabilitar esta interrupcin. La
interrupcin INT puede despertar al procesador del estado sleep si el bit INTE fue
seteado antes de entrar al estado sleep. El habilitador global GIE decide si se
ejecutar la interrupcin despus de salir del estado sleep.

3. El Timer 0
Principio de funcionamiento de un Timer

Carga de Valor de Conteo Inicial

Pulsos Contador Flag

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

RBPU Bitt de habillitacin Pu


ull-up del Puerto B
1 Resistencias Pu
ull-up de Puerto
P B in
nhabilitados.
0 - Pines d
del Puerto
o B puede en ser connectados a las resisstencias Pull-up.
INTEDG Bit de selleccin de flanco de d interrupcin
1 Interru
upcin poor flanco de
d subida a del pin IN
NT.
1
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas

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)

Inicializzacin del Timeer 0 comoo temporizador


CLRF TM
MR0 ; Borr
rar TMR0
CLRF IN
NTCON ; In
nhabilitar
r las inte
errupcione
es y borra
ar T0IF
BSF STA
ATUS, RP0 ; Banco 1
MOVLW 0xC3
0 ; Pul
ll-ups del
l Puerto B inhabili
itadas,
MOVWF OPTION_REG
O G ; Interr or flanco de subida
rupcin po a en RB0
; Increme
ento del Timer
T 0 de
esde el re
eloj inter
rno
; con pre
e-escalado
or de 1:16
6.
BCF STA
ATUS, RP0 ; Banco 0
;** BSF I
INTCON, T0
0IE ; Habi
ilitar la interrupc
cin del Timer
T 0
;** BSF I
INTCON, GI
IE ; Habil
litar las interrupc
ciones
; La inte
errupcin del Timer
r 0 est inhabilita
i ada,
; realiza
ar consult
ta del bit
t de desbo
ordamiento
o
T0_OVFL_W
WAIT
BTFSS INTCON,
I T0
0IF
GOTO T0
0_OVFL_WAI
IT
; El Time
er se ha desbordado
d o

Inicializzacin del Timerr 0 comoo contador


CLRF TM
MR0 ; Borr
rar TMR0
CLRF IN
NTCON ; In
nhabilitar
r las inte
errupcionees y borra
ar T0IF
BSF STA
ATUS, RP0 ; Banco 1
MOVLW 0x37
0 ; Pul
ll-ups del
l Puerto B inhabiliitadas,
MOVWF OPTION_REG
O G ; Interr
rupcin po
or flanco de bajadaa en RB0
; Increme
ento del Timer
T 0 de
esde reloj
j externo
; por fla
anco de ba
ajada en T0CKI
T con pre-escallador de 1:256.
1
ATUS, RP0 ; Banco 0
BCF STA
;** BSF I
INTCON, T0 ilitar la interrupc
0IE ; Habi cin del Timer
T 0
;** BSF I
INTCON, GI
IE ; Habil
litar las interrupcciones
; La inte
errupcin del Timer
r 0 est inhabilita
i ada,
; realiza
ar consult
ta del bit
t de desbo
ordamientoo
T0_OVFL_W
WAIT
BTFSS INTCON,
I T0
0IF
GOTO T0
0_OVFL_WAI
IT

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

Reloj deel Timerr 1 opera


ando con
n reloj ex
xterno y circuito
o oscilador

5
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas

Registroo T1CON

T1CKPS1,, T1CKPS0 Bits de seleccin


s del facto
or de pre-e
escalamie
ento del timer
t 1.

T1OSCEN N Bit de habilitaci


h n del osccilador de
el timer 1
1 Oscila
ador habilitado.
0 Oscila
ador Inhabilitado.
/T1SYNC Bit de se eleccin de
d sincron nizacin de
d la sea al de reloj externa del
d Timer 1.
1
Cuando TMR1CS = 1:
1 No sin
ncronizar.
0 - Sincro
onizar.
Cuando TMR1CS=0, este bitt es ignora ado.
TMR1CS Bit de se eleccin de
d la fuente de la seal de re eloj del Tim
mer 1.
1 Cuenta los pulssos en el pin
p T1CKI (en el flan nco de subida)
0 Cuenta los pulssos del relloj interno
o del micro
ocontrolador.
TMR1ON Bit de arranque del d Timer1.
1 Arranca el Time er 1.
0 Detiene al Time er 1.

Inicializzacin del Timerr1 con reeloj interrno


CLRF T1CON
T ; De
etiene al Timer1, usa
u el rel
loj intern
no,
; El osci l Timer 1 inhabilit
ilador del tado, pre-
-escaladorr = 1:1
CLRF TMR1H
T ; Bo
orrar byte
e alto del
l Timer 1
CLRF TMR1L
T ; Bo
orrar byte
e bajo del
l Timer 1
CLRF INTCON
I ; Inhabilita
I ar las int
terrupcion
nes
BSF ST
TATUS, RP0
0 ; Banco 1
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 las
l rupciones perifric
interr cas
MOVLW 0x30 ; Us
sa reloj interno
i co
on pre-esc
calador 1:
:8
MOVWF T1CON ; El
E Timer 1 detenidoo,
; oscilad
dor del Ti
imer 1 inh
habilitado
o
BSF T1
1CON, TMR1
1ON ; Time
er 1 arran
ncado
; Interru
upcin del
l Timer 1 inhabilit
tada,
; realiza
ar consult
ta del bit
t de desbo
ordamiento
o
T1_OVFL_W
WAIT
BTFSS PIR1, TMR
R1IF
GOTO T1_OVFL_WA
T AIT
; Timer d
desbordado
o
BCF PI
IR1, TMR1I
IF

6
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas

Inicializzacin del Timerr1 con reeloj externo


CLRF T1CON
T ; Ti
imer 1 det
tenido, us
sa reloj interno,
i
; Oscilad
dor del Ti
imer 1 inh
habilitado
o, pre-esc
calador = 1:1
CLRF TMR1H
T ; Bo
orrar byte
e alto del
l Timer 1
CLRF TMR1L
T ; Bo
orrar byte
e bajo del
l Timer 1
CLRF INTCON
I ; Inhabilita
I ar las int
terrupcion
nes
BSF ST
TATUS, RP0
0 ; Banco 1
CLRF PIE1
P habilitar las inter
; Inh rrupciones
s perifri
icas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flags
f de las
l rupciones perifric
interr cas
MOVLW 0x32 ; Re
eloj exter
rno con pr
re-escalad
dor 1:8
MOVWF T1CON ; Fuente
F de reloj sin
ncronizada
a
; Timer 1 detenido
o y oscila
ador del Timer
T 1 in
nhabilitaddo
BSF T1
1CON, TMR1
1ON ; Time
er 1 arran
ncado
; La inte
errupcin del Timer
r 1 inhabi
ilitada,
; Realiza
ar consult
ta del bit
t de desbo
ordamiento
o
T1_OVFL_W
WAIT
BTFSS PIR1, TMR
R1IF
GOTO T1_OVFL_WA
T AIT
; Timer d
desbordado
o
BCF PI
IR1, TMR1I
IF

Inicializzacin del Timerr1 con reeloj externo y cirrcuito osscilador


CLRF T1CON
T ; Ti
imer 1 det
tenido, us
sa reloj interno,
i
; Oscilad
dor del Ti
imer 1 inh
habilitado
o, pre-esccalador = 1:1
CLRF TMR1H
T ; Bo
orrar byte
e alto del
l Timer 1
CLRF TMR1L
T ; Bo
orrar byte
e bajo del
l Timer 1
CLRF INTCON
I ; Inhabilita
I ar las int
terrupcionnes
BSF ST
TATUS, RP0
0 ; Banco 1
CLRF PIE1
P habilitar las inter
; Inh rrupcioness perifri
icas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flags
f de las
l rupciones perifric
interr cas
MOVLW 0x3E ; Fu
uente de reloj
r exte
erna con circuito
c oscilador
o
MOVWF T1CON ; Pre-escala
P ador 1:8,
; Fuente de reloj asncrona
a al dispo
ositivo, Timer
T 1 de
etenido
1CON, TMR1
BSF T1 1ON ; Time
er 1 arran
ncado
;
; La inte
errupcin del Timer
r 1 inhabi
ilitada,
; Realiza
ar consult
ta del bit
t de desbo
ordamientoo
;
T1_OVFL_W
WAIT
BTFSS PIR1, TMR
R1IF
GOTO T1_OVFL_WA
T AIT
;
; Timer d
desbordado
o
;
BCF PI
IR1, TMR1I
IF

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

Escriturra del Tiimer 1 en


e corrid
da libre
Primero sse borra TMR1L
T parra asegurar que haay muchoos ciclos de
d reloj an
ntes de que
se generre acarreoo al registtro TMR1H
H. Luego, se
s carga TMR1H, y finalmente se cargga
TMR1L.
; Todas l
las interr
rupciones estn inh
habilitada
as
CLRF TMR1L
T ; Bo
orrar byte
e bajo
MOVLW HI_BYTE ; Cargar byte
b alto en TMR1H
MOVWF TMR1H, F ;
MOVLW LO_BYTE ; Cargar byte
b bajo en TMR1L
MOVWF TMR1H, F ;
; Si se r
requiere, se vuelve
en a habil
litar las interrupcciones
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

TMR2ON Bit de arranque deld Timer22.


1 Timer 2 arranca
ado.
0 - Timer 2 parado.
T2CKPS1,, T2CKPS0 - Bits de seleccin
s del facto
or del pre-escalamie
ento del Timer2
T

Inicializzacin del Timerr 2


CLRF T2CON
T ; Ti
imer 2 dettenido, Pr
re-escalad
dor = 1:1,
,
; Post-es
scalador = 1:1
CLRF TMR2
T ; Bor
rrar TMR2
CLRF INTCON
I ; Inhabilita
I ar interru
upciones
BSF ST
TATUS, RP0
0 ; Banco 1
CLRF PIE1
P ; Inh
habilitar interrupcciones per
rifricas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flag
f de la
as interru
upciones perifrica
p as
MOVLW 0x72 ; Po
ost-escalaador = 1:1
15, Pre-es
scalador = 1:16
MOVWF T2CON ; Timer
T 2 deetenido
BSF T2
2CON, TMR2
2ON ; Timeer 2 arran
ncado
; La inte
errupcin del Timer
r 2 inhabiilitada,
; Realiza
ar consult
ta del bit
t de desboordamiento
o
T2_OVFL_W
WAIT
BTFSS PIR1, TMR
R2IF
GOTO T2_OVFL_WA
T AIT
; El Time
er se ha desbordado
d o
BCF PI
IR1, TMR2I
IF ; Borraar flag y continuar
r.

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

No se puede usar el post-esscalador del


d timer 2.
2

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).

Ancho dee pulso PW


WM
Ancho de pulso
p PWM
M =(CCPR1L
L:CCP1CO
ON<5:4>) T
TOSC (vallor del pre-eescalador dee TMR2)

Resolucin PWM
Ressolucin = log2(FOSSC/(FPWM*V
Valor Pre--escaladorr)) bits

PWM freequenciess and resoolutions ( Fosc = 200MHz):

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

PWM Comparacin Ninguna


N

12
Curso: Microccontroladores y Microprogra
amacin Clases Prcticas

CCP1C
CON Reg
gister

DC1B1, DC1B0 Bits mennos signifficativos del d ciclo de


d trabajo (nmero de 10 bitts).
Los 8 bitss ms sign
nificativoss estn alm
macenadoss en CCPR
R1L.

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

Control de una Matriz de LEDs

RD0
A

RD1
B

RD2
C

RD3
D

RD4
E

RD5
F

RD6
G

1 2 3 4 5
Vcc

RB4 RB3 RB2 RB1 RB0

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

Registro de Desplazamiento DATO

4
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel
F Serruto

2. Paantallla LCD de Textoo

LM0016L

5
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto

Coneexin coon el Miicrocon


ntroladoor

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

Patrn de bits de loos caraccteres

8
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto

Coneexin dee la pan


ntalla coon el HD
D447800

Posiccin en la panttalla y direcci


d n DDRA
AM

9
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto

Instrruccionees del HD4478


H 0

10
Curso: Miicrocontrolado
ores y Micropro
ogramacin - Clases Prcticcas Profesor: Ing. Wildor Ferrel Serruto

Instrruccionees del HD4478


H 0

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

;LCD_REG COLOCA EN PORTB EL CODIGO DEL COMANDO QUE ESTA EN W.


;ESPERA QUE EL LCD EJECUTE LA ULTIMA OPERACION Y GENERA EL PULSO E.
LCD_REG BCF PORTA,0 ;DESACTIVA RS (MODO COMANDO)
MOVWF REGISTER
MOVLW 0XF0
ANDWF PORTB,1
SWAPF REGISTER,0
ANDLW 0X0F
IORWF PORTB,1
CALL DELAY_5MS ;ESPERA QUE SE LIBERE EL LCD
CALL LCD_E ;GENERA PULSO EN SEAL E
BCF PORTA,0 ;DESACTIVA RS (MODO COMANDO)
MOVLW 0XF0
ANDWF PORTB,1
MOVF REGISTER,0
ANDLW 0X0F
IORWF PORTB,1
CALL DELAY_5MS ;ESPERA QUE SE LIBERE EL LCD
CALL LCD_E ;GENERA PULSO EN SEAL E
RETURN

;LCD_DATO COLOCA EN PORTB EL CODIGO ASCII QUE ESTA EN W.


;ESPERA QUE EL LCD EJECUTE LA ULTIMA OPERACION Y GENERA EL PULSO E.
LCD_DATOS BCF PORTA,0 ;DESACTIVA RS (MODO COMANDO)
MOVWF REGISTER
MOVLW 0XF0
ANDWF PORTB,1
SWAPF REGISTER,0
ANDLW 0X0F
IORWF PORTB,1
CALL DELAY_5MS ;ESPERA QUE SE LIBERE EL LCD
BSF PORTA,0 ;ACTIVA RS (MODO DATO)
CALL LCD_E
BCF PORTA,0 ;DESACTIVA RS (MODO COMANDO)
MOVLW 0XF0
ANDWF PORTB,1
MOVF REGISTER,0
ANDLW 0X0F
IORWF PORTB,1
CALL DELAY_5MS ;ESPERA QUE SE LIBERE EL LCD
BSF PORTA,0 ;ACTIVA RS (MODO DATO)
CALL LCD_E ;GENERA PULSO EN SEAL E
RETURN

LCD_INI CALL FUNCTION_SET ;MODO DE FUNCIONAMIENTO


MOVLW B'00000001' ;CLEAR LCD
CALL LCD_REG
MOVLW B'00000110' ;MODO DE ENTRADA
CALL LCD_REG
MOVLW B'00001100' ;ACTIVAR LCD
12
Curso: Microcontroladores y Microprogramacin - Clases Prcticas Profesor: Ing. Wildor Ferrel Serruto

CALL LCD_REG
CLRF DIGITO
RETURN

;FUNCTION_SET ESTABLECE EL MODO DE FUNCIONAMIENTO DEL LCD.


;INTERFACE DE 8 BITS, 2 LINEAS DE VISUALIZACION,
;CARACTERES DE 5 * 7.
FUNCTION_SET MOVLW B'00110011'
CALL LCD_REG
CALL DELAY_5MS
MOVLW B'00110010'
CALL LCD_REG
MOVLW 0X0C
MOVWF TEMPO1
CALL DELAY10
MOVLW B'00101000'
CALL LCD_REG
CALL DELAY_5MS
RETURN

13

Vous aimerez peut-être aussi