Está en la página 1de 64

1.

Introducción
Competencias Específicas
 Conoce, comprende y aplica la arquitectura del microcontrolador PIC 16F877
PIC
 Utiliza los recursos del microcontrolador a través del lenguaje ensamblador
(Microprogramación)
 Simula en MPLAB y Proteus sistemas basados en el microcontrolador 16F877

Microcontrolador
 Circuito integrado programable que contiene los elementos básicos de un
computador.

 Sirve para controlar una tarea determinada.


 Por su tamaño reducido suele ir incorporado en el dispositivo al que gobierna
(controlador embebido)
Función 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

Señal de
Señal de Mando
Referencia Variable
Controlada

Actuadores Planta

Señal Medida Elemento de


Medición

Programación 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 máquina
 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

Organización
Unidades funcionales e interconexiones que materializan una Arquitectura
(Hardware)
El Microcontrolador PIC 16F877
 CPU RISC. Tiene 35 instrucciones.
 Cada instrucción es de una sola palabra de 14 bits.
 Máxima frecuencia de reloj 20 MHz.
 Todas las instrucciones a excepción de las de salto se ejecutan en un ciclo de
instrucción.
 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 líneas
respectivamente
 3 timers: 2 de 8 bits y 1 de 16 bits
 2 módulos de captura-comparación-PWM
 ADC de 10 bits de 8 canales
 Puerto paralelo esclavo
 Comunicación 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 ...

Dirección
Combinación binaria que Identifica a una posición de memoria

Memoria de Programa Memoria de Datos


Dirección Contenido Dirección 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
Combinación binaria a ser procesada

Instrucción
Combinación binaria que para el Procesador Central es una orden a ser ejecutada
Formato de Instrucción
13 0
Un Word de 14 bits

Lectura de Memoria de Programa

CPU Memoria de Programa


IR Dirección 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
Dirección Contenido
0000 H Instrucción 1

0001 H Instrucción 2
0002 H Instrucción 3
0003 H Instrucción 4
0004 H Instrucción 5
0005 H Instrucción 6

... ...

1FFE H
1FFF H

Función del Contador de Programa


Direccionar la instrucción a realizar. (PC) - Contenido del registro PC
Ejemplo (PC) =100A;
Memoria de Programa
PC
Dirección Contenido
100A
... ...

1007 H 3CA9
1008 H 0077
1009 H 24B2
100A H 09C1
100B H 180D
100C H 1160

... ...

Función de la CPU

10001100100111
01110001010100
00011101010100
11101010100011
01010100000111
11101000100011
00001101010011
Diagrama de Flujo
INICIO

0000 → PC

Carga de la
instrucción FETCH

PC + 1 → PC
Ejecución
Ejecución

3. La Memoria del MC
Tipos de Memoria
 8Kx14 de memoria FLASH de programa
 368 bytes de memoria SRAM (RAM estática) de datos
 256 bytes de EEPROM (RAM no volátil), también 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 través 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 selección de banco en direccionamiento directo
/TO: Bit time-out
/PD: Bit power-down
Z : Bit cero
DC : Bit de acarreo/préstamo de dígito
C : Bit de acarreo/préstamo
Curso: Microcontroladores y Microprogramación – Clases Prácticas 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 ningún 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 Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Direccionamiento Directo
MOVWF 0x20

CPU
Memoria de Datos
IR
MOVWF 0x20 Dirección 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 Dirección Contenido

00A0 00 H
01 H
20
... ...
1F H
20 H 03
... ...
W 03 03
FE H
FF H

2
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Direccionamiento Indirecto
FSR (Registro de selección de File) actúa como puntero.
Toda instrucción que usa el registro INDF realmente accede al registro referenciado
por el registro FSR.

CPU
Memoria de Datos
CLRF INDF
Dirección 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
Dirección 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 Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Nomenclatura
Campo Descripción Campo Descripción
Bit selector de destino: d = 0: El resultado
f Dirección 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 Dirección 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 código con x=0. Es recomendable esta forma
de uso por compatibilidad.

Conjunto de Instrucciones

4
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

5
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

6
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

7
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

8
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

9
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

10
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Ejemplo 1
Escribir un programa en lenguaje ensamblador que sume números de 16 bits según
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 Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

1. Procedimientos
La pila

Llamado y Retorno de un Procedimiento


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

12
Curso: Microcontroladores y Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Sustracción de números de 8 bits sin signo


Ejemplo 2
Escribir un programa de sustracción de números 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 Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

Multiplicación de números 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 través 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 multiplicación de números 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 Microprogramación – Clases Prácticas Profesor: Wildor Ferrel Serruto

2. Manejo de tablas
Ejemplo 4
Escribir el programa que convierte una cifra BCD en código 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 líneas digitales
MOVLW 0xCF ; Inicializar la dirección 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 ejecución del programa. Cuando ocurre una
interrupción, la ejecución del programa salta a la dirección 004.
 El programa a partir de la dirección 004 se llama rutina de servicio de interrupción
(ISR) y termina en una instrucción de retorno de interrupción (RETFIE). Con esta
instrucción se regresa al programa principal a la dirección que había sido
almacenada automáticamente en la pila.
 La fuente de interrupción se identifica por su flag asociado. Existe también, un bit
de habilitación asociado a cada fuente de interrupción y un bit habilitador
global que puede inhabilitar todas las interrupciones.
 Si dos o más fuentes de interrupción están habilitadas, la ISR debe determinar
cuál es la fuente activa.

Fuentes de Interrupción
Lógica de interrupción

Llamado y Retorno de una Interrupción

Programa Principal ISR


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

Si INTEDG = 1 por flanco ascendente


Si INTEDG = 0 por flanco descendente

Esta interrupción puede ser inhabilitada borrando el bit INTE.


Cuando en el pin RB0/INT se presenta un flanco válido, el flag INTF se setea. Este flag
debe ser borrado por software en la ISR antes de rehabilitar esta interrupción. La
interrupción 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 interrupción después 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

Características
 Temporizador/contador de 8 bits
 Se puede leer y se puede escribir
 Pre-escalador programable de 8 bits
 Selección de reloj interno o externo
 Interrupción por desbordamiento de FFH a 00H
 Selección de flanco para el reloj externo
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

1. El Tiimer 0
Caracteerísticas
 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 interrupcción 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 habillitación 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 sellección de flanco de d interrupción
1 – Interru
upción poor flanco de
d subida a del pin IN
NT.
1
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

0 - Interru
upción poor flanco de
d bajada a del pin INT.
T0CS – Bitt de selec
cción 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 seleccción 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 ación 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 ción del fa
actor de pre-escala
p amiento

Pre-escaalador asignado
a al Timeer 0 (PSA
A=0)

2
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

Pre-escaalador asignado
a al Watcchdog (P
PSA=1)

Inicializzación 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
rupción 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
ción del Timer
T 0
;** BSF I
INTCON, GI
IE ; Habil
litar las interrupc
ciones
; La inte
errupción 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

Inicializzación 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
rupción 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 ción del Timer
T 0
;** BSF I
INTCON, GI
IE ; Habil
litar las interrupcciones
; La inte
errupción 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
amación – Clases Prácticas

; El Time
er se ha desbordado
d o

2. El Tiimer 1
Caracteerísticas
 Temporizador/c contador de 16 bitss
 Permitte lectura
a y escriturra
 Fuente de reloj seleccion nable externa o intterna
 Puedee producir interrupc ción por desbordam
d miento (C
Cambio de
e FFFFh a 0000h)
 Se puede reiniccializar de
esde los módulos
m CCP

Registro
o contador de 16 bitts

Modos de opera
ación
• Con reloj interno
o
• Con reloj externo
o
• Con reloj externo
o y circuitto oscilador

Esquem
ma Descrriptivo

4
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

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
amación – Clases Prácticas

Registroo T1CON

T1CKPS1,, T1CKPS0 – Bits de selección


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 elección de
d sincron nización de
d la seña 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 elección de
d la fuente de la señal 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.

Inicializzación 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
riféricas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flags
f de las
l rupciones periféric
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
upción 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
amación – Clases Prácticas

Inicializzación 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 periféri
icas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flags
f de las
l rupciones periféric
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
errupción 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

Inicializzación 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 periféri
icas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flags
f de las
l rupciones periféric
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 asíncrona
a al dispo
ositivo, Timer
T 1 de
etenido
1CON, TMR1
BSF T1 1ON ; Time
er 1 arran
ncado
;
; La inte
errupción 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 están 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
amación – Clases Prácticas

; 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
uación del
l código

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 están 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
uación del
l código

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 máximos,
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 selección
n del facto
or del posst-escalam
miento de
el Timer2
8
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

TMR2ON – Bit de arranque deld Timer22.


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

Inicializzación 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
riféricas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los flag
f de la
as interru
upciones periférica
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
errupción 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
amación – Clases Prácticas

44. El Módu
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
eñal PWM

Modo Captura
C

10
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

Modo Compara
C ación

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
amación – Clases Prácticas

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)

Resolución PWM
Ressolución = log2(FOSSC/(FPWM*V
Valor Pre--escaladorr)) bits

PWM freequenciess and resoolutions ( Fosc = 200MHz):

Timer u
usado en
n los mod
dos del módulo
m C
CCP
Modo CCP Tim
mer usado
Captura Timer 1
Comparaación Timer 1
PWM Timer 2

Interaccción de los
l dos módulos
m CCP
Modo dee Mod
do de
Interracción
CCPx CC
CPy
Captura Capturra Tienen la misma base dee tiempo TM
MR1
La comparacción debe seer configuraada como Diisparador dee Evento
Captura Comparación
Especial, el cual
c borra TMR1.
T
Las comparaaciones debeen ser configuradas com mo Disparaddor de Evennto
Comparaciión Comparación
Especial, el cual
c borra TMR1.
T
Las señales PWM
P tendráán la mismaa frecuenciaa y tasa de actualizació
a ón
PWM PWM
(IInterrupciónn TMR2).
PWM Capturra N
Ninguna

PWM Comparación Ninguna


N

12
Curso: Microccontroladores y Microprogra
amación – Clases Prácticas

CCP1C
CON Reg
gister

DC1B1, DC1B0 – Bits mennos signifficativos del d ciclo de


d trabajo (número de 10 bitts).
Los 8 bitss más sign
nificativoss están alm
macenadoss en CCPR
R1L.

CCP1M33 - CCP1M
M0 – Bitss de seleccción del modo
m del modulo
m CC
CP1.
CCP
P1M3 -
Modo
CC
CP1M0
0
0000 Móduloo CCPx inhaabilitado (R
Resetea al módulo)
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 comparación
c n, inicializa el pin CCP
P en nivel baajo, en la igualdad de laa
1000
comparaación setea el
e pin CCP (CCPIF es seteado)
Modo comparación
c n, inicializa el pin CCP
P en nivel allto, en la iguualdad de laa
1001
comparaación resetea el pin CCP (CCPIF es e seteado)
Modo comparación
c n, Genera innterrupción en la igualddad de la coomparación
1010
(CCPIF es seteado, el pin CCP P no es afecttado)
1011 Modo coomparación n, Disparadoor de Evento o Especial (CCPIF
( es seteado)
s
11xx Modo PW
WM

Inicializzación en
n modo P
PWM
CLRF CCP1CON
C ; Módulo 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
riféricas
BCF ST
TATUS, RP0
0 ; Banco 0
CLRF PIR1
P ; Bor
rrar los Flags
F de interrupci
i iones peri
iféricas
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
;
errupción de CCP1 está
; La inte e inhab
bilitada,
; consult
tar el fla errupción 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 MICROPROGRAMACIÓN – CLASES PRÁCTICAS

1. Matriz de LEDs

1 2 3 4 5

1
CURSO: MICROCONTROLADORES Y MICROPROGRAMACIÓN – CLASES PRÁCTICAS

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 MICROPROGRAMACIÓN – CLASES PRÁCTICAS

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 MICROPROGRAMACIÓN

Letrero Publicitario
Fila 1
R1
.
.
... .

Fila 7
R7

... ...
Vcc
LATCHEAR
Registro de LATCHS

...
CLOCK

Registro de Desplazamiento DATO

4
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel
F Serruto

2. Paantallla LCD de Textoo

LM0016L

5
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Coneexión 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
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Diagrama de
d Bloqu
ues del HD4478
H 80

7
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Patróón de bits de loos caraccteres

8
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Coneexión dee la pan


ntalla coon el HD
D447800

Posicción en la panttalla y direcció


d n DDRA
AM

9
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Instrruccionees del HD4478


H 0

10
Curso: Miicrocontrolado
ores y Micropro
ogramación - Clases Prácticcas Profesor: Ing. Wildor Ferrel Serruto

Instrruccionees del HD4478


H 0

11
Curso: Microcontroladores y Microprogramación - Clases Prácticas 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 SE¤AL 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 SE¤AL 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 SE¤AL 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 Microprogramación - Clases Prácticas 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

También podría gustarte