Está en la página 1de 129

TEMA 2 MICROCONTROLADORES PIC

Ing. Edgar Ortuño Ríos


INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• LOS 'PIC' SON UNA FAMILIA DE MICROCONTROLADORES

TIPO RISC.
• FABRICADOS POR MICROCHIP TECHNOLOGY INC.
• EL NOMBRE COMPLETO ES PICMICRO, GENERALMENTE SE
UTILIZA COMO PERIPHERAL INTERFACE CONTROLLER
(CONTROLADOR DE INTERFAZ PERIFÉRICO).

2
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC: VENTAJAS
– EFICIENCIA DEL CÓDIGO: PERMITEN UNA GRAN COMPACTACIÓN DE LOS PROGRAMAS.
– RAPIDEZ DE EJECUCIÓN: A FRECUENCIA DE 20MHZ -> 5 MILLONES DE INSTR./SEG.
– SEGURIDAD EN ACCESO POR LA SEPARACIÓN DE MEMORIA DE DATOS Y DE
PROGRAMA.
– JUEGO REDUCIDO DE INSTRUCCIONES Y DE FÁCIL APRENDIZAJE.
– COMPATIBILIDAD DE PINES Y CÓDIGO ENTRE DISPOSITIVOS DE LA MISMA FAMILIA O
INCLUSO DE FAMILIAS DISTINTAS.
– GRAN VARIEDAD DE VERSIONES EN DISTINTOS ENCAPSULADOS (DESDE 8 HASTA 84
PINES) SIN REDUCCIÓN DE LAS PRESTACIONES INTERNAS (MUY VERSÁTILES).
– POSIBILIDAD DE PROTECCIÓN DEL CÓDIGO MUY FIABLE.
– HERRAMIENTAS DE DESARROLLO SOFTWARE Y HARDWARE ABUNDANTES Y DE BAJO
COSTE.
3
MICROCONTROLADORES PIC

•Arquitectura Harvard: buses internos separados para memoria de


datos (8 bits) y de programa (12, 14 ó 16 bits depende de la familia)

•Microprocesador RISC: juego de instrucciones reducido

•Estructura pipe-line: durante la ejecución de una instrucción, se está


accediendo a la memoria de programa para traer la siguiente
instrucción a ejecutar. (salvo un salto o llamada a subpr.)

•Todas las instrucciones ocupan una posición de memoria de programa

•Todas las instrucciones se ejecutan en un ciclo de instrucción = 4


ciclos de reloj (salvo las instrucciones de salto)

•Ortogonalidad de los registros: se opera entre el registro de trabajo W


y cualquier otro registro, el resultado puede almacenarse en W
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
– ARQUITECTURA HARVARD: BUSES INTERNOS SEPARADOS PARA MEMORIA DE DATOS(8
BITS) Y DE PROGRAMA (12, 14 Ó 16 BITS DEPENDE DE LA FAMILIA).

CPU Program
Data Memory
Memory
8 12
14
16 16
24

X12=PIC10F2XX, PIC12F5XX,PIC16F5XX
X14=PIC12FXXX,PIC16FXXX
X16=PIC18FXXX
X24=dsPIC30F
5
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
• ALTA VELOCIDAD DE APLICACIÓN CON BAJO CONSUMO.
• CADA CICLO DE INSTRUCCIÓN DURA 4 DE LA FRECUENCIA DE RELOJ DE ENTRADA

• RISC SIMPLE CICLO: 1000 NS @ 4 MHZ (1 MIPS)


• 200 NS @ 20 MHZ (5 MIPS)
• 120 NS @ 33 MHZ (8.3 MIPS)
• 100 NS @ 40 MHZ (10 MIPS)
•*MIPS: MILLONES DE INSTRUCCIONES POR SEGUNDO
6
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC

– MICROPROCESADOR RISC, JUEGO DE INSTRUCCIONES MUY CORTO (33/35/58/76).


• SINGLE WORD Y ORTOGONAL.
• FÁCILES DE APRENDER.
• TODAS LAS INSTRUCCIONES OCUPAN UNA POSICIÓN DE MEMORIA DE PROGRAMA.
– INSTRUCCIONES POTENTES (ANCHO DE PALABRA 12 / 14 / 16 BIT).
• CÓDIGO ALTAMENTE EFICIENTE.
• LA ARQUITECTURA HARVARD PERMITE INSTRUCCIONES DE SINGLE-WORD/SINGLE-
CYCLE.

Ejemplo: MOVE immediate, Acc


PIC16C5X: MOVLW #imm<8> 1100 imm<8>
1 word / 1 ciclo máquina

7
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC ESTRUCTURA PIPE-LINE: DURANTE LA EJECUCIÓN DE UNA
INSTRUCCIÓN, SE ESTÁ ACCEDIENDO A LA MEMORIA DE PROGRAMA PARA TRAER LA
SIGUIENTE INSTRUCCIÓN A EJECUTAR.
•EN CUANTO SE ACABA UNA INSTRUCCIÓN, YA SE DISPONE DE LA SIGUIENTE PARA EJECUTAR
(SALVO QUE SE TRATE DE UN SALTO O LLAMADA A SUBRUTINA QUE OCUPAN 2 CICLOS).

P1 MOVF REGX,W R1 ADDWF PCL,F


P2 CALL R1 R2 RETLW 0xB7
P3 MOVWF PORTB R3 RETLW 0x5A
P4 ... R4 ...
Rn RETLW 0xFF
T1 Fetch P1
T2 Exec P1 Fetch P2
T3 Exec P2 Fetch P3
T4 Exec NOP...Fetch R1
T5 Exec R1 Fetch R2
T6 Exec NOP...Fetch Rn
T7 Exec Rn Fetch Rm
T8 Exec NOP...Fetch P3
T9 Exec P3 ...
8
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC

• ORTOGONALIDAD DE LOS REGISTROS: SE OPERA ENTRE EL REGISTRO DE TRABAJO W Y


CUALQUIER OTRO REGISTRO, EL RESULTADO PUEDE ALMACENARSE EN EL CITADO REGISTRO O
EN W.
Data
Memory INDF
TMR0
PCL
STATUS
FSR
ALU
PORTA
Other SFRs

W Register

General Purpose
Registers (RAM)

9
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
– AMPLIO RANGO DE MÓDULOS INTERNOS. USART CAP
SPI EEPROM COMP
I2C
• PUERTOS DE ENTRADA/SALIDA. PWM

• PUERTO ESCLAVO PARALELO (PSP). A/D D/A

• TEMPORIZADORES/CONTADORES DE 8/16 BITS (TMR).


• CAPTURA / COMPARACIÓN / PWM (CCP). Power
Drivers
FLASH Display
Drivers

• COMPARADORES ANALÓGICOS.
• CONVERSIÓN ANALÓGICA / DIGITAL (A/D).
• TRANSMISOR RECEPTOR ASÍNCRONO SÍNCRONO UNIVERSAL (USART Ó SCI).
• PUERTO SERIE SÍNCRONO BÁSICO Ó MAESTRO(BSSP Ó MSSP).
• MEMORIA EEPROM DE DATOS.
• FLASH EEPROM DE PROGRAMA MODIFICABLE DESDE EL CÓDIGO.
• SOPORTE PARA CAN, LIN, IRDA
• SOPORTE PARA CONTROLADOR ETHERNET.
• CONTROLADORES LCD.
10
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
– AMPLIO RANGO DE PERIFÉRICOS EXTERNOS. (I²C, DEL INGLÉS INTER-INTEGRATED
CIRCUIT), SPI (SERIAL PORT INTERFACE) · UART (UNIVERSAL ASYNCHRONOUS RECEIVER-
TRANSMITTER), CAN (CONTROLLED AREA NETWORK)

11
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
FAMILIA PIC.

32 Bits

16 Bits
dsPIC30F

8 Bits
PIC18FXXX Enhanced
PIC12F6XX,PIC16FXX Mid-range
PIC12F4XX,PIC16F5XX
PIC10F2XX Base-line

4 Bits

12
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
FAMILIA 8 PIN

– FAMILIA 20 PIN

13
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC IC
– FAMILIA 18 PIN

– FAMILIA 28 PIN

14
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
– FAMILIA 40 PIN

15
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
MICROCONTROLADOR PIC
ENCAPSULADOS/NOMENCLATURA

16
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC

• MICROCONTROLADOR PIC
– ENCAPSULADOS/NOMENCLATURA

17
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC
– FAMILIAS EN LA WEB DE MICROCHIP

18
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC

• MICROCONTROLADOR PIC

19
INTRODUCCIÓN A LOS MICROCONTROLADORES PIC
• MICROCONTROLADOR PIC: FACILIDAD DE DESARROLLO
– EL DESARROLLO SOFTWARE PARTE DEL DISEÑO DEL PROGRAMA Y ESCRITURA DEL
CÓDIGO FUENTE EN ENSAMBLADOR (MPASM) O LENGUAJE DE ALTO NIVEL (C
COMPILERS).
– A CONTINUACIÓN SE PRUEBA, VERIFICA Y MODIFICA MEDIANTE:
• SIMULACIÓN DEL PROGRAMA -PURO SOFTWARE- (MPLAB SIM).
• EMULACIÓN DENTRO DEL CIRCUITO DE APLICACIÓN -SOFTWARE Y HARDWARE- (MPLAB-ICE
Y MPLAB-ICD).
– GRABACIÓN DEL CÓDIGO MÁQUINA EN LA MEMORIA DEL MICRO (PICSTART-PLUS Y
PROMATE-II).

20
MICROCONTROLADOR PIC
• FACILIDAD DE DESARROLLO

21
MICROCONTROLADORES

MICROCONTROLADORES PIC DE MICROCHIP

• LOS PIC SE DIVIDE EN TRES FAMILIAS DE MICROCONTROLADORES.


• GAMA ENANA : PIC12C(F)XXX DE 8 PINES.
• GAMA BAJA O BÁSICA: PIC16C5X.
• LA GAMA MEDIA LO COMPONEN LAS FAMILIAS 16C6X/ 7X/ 8X,
ALGUNOS CON CONVERSORES A/D, COMPARADORES,
INTERRUPCIONES, ETC.
• LA GAMA ALTA: PIC17CXXX.
• LA GAMA MEJORADA LA COMPONEN LOS PIC18CXXX
• LA GAMA PICAXE
• DSPIC
MICROCONTROLADORES
MICROCHIP

SERIE PIC 16F84/16F87X


ARQUITECTURA EXTERNA DEL PIC16F84
VDD: Alimentación

VSS: Tierra

OSC1/CLKIN-OSC2/CLKOUT: conexión
del oscilador

VPP/MCLR: tensión de programación y


reset

RA0-RA3: líneas de E/S de la puerta A


Encapsulado DIP - PIC16C84/F84
RA4: línea de E/S de la puerta A o
entrada de impulsos de reloj para TMR0

RB0/INT: línea de E/S de la puerta B o


petición de interrupción

RB1-RB7: líneas de E/S de la puerta B


ARQUITECTURA EXTERNA DEL PIC16F84/PIC16F877

RA4/TOCKI: CUANDO ESTE PIN SE CONFIGURA COMO SALIDA ES DE TIPO COLECTOR


ABIERTO, POR LO QUE SE DEBE CONECTAR A VCC (+5V) A TRAVÉS DE UNA RESISTENCIA.
CUANDO ESTE PIN SE PROGRAMA COMO ENTRADA DIGITAL, FUNCIONA COMO UN
DISPARADOR DE SCHMITT (SCHMITT TRIGGER, ST), ESTO QUIERE DECIR QUE PUEDE
RECONOCER SEÑALES UN POCO DISTORSIONADAS Y LLEVARLAS A NIVELES LÓGICOS
(CERO Y CINCO VOLTIOS).
RB4-RB7: PINES DE ENTRADA/SALIDA CON INTERRUPCIÓN POR CAMBIO DE FLANCO.
MCLR: EL RESET DEL MICROCONTROLADOR (MASTER CLEAR). SE ACTIVA CUANDO TIENE UN
"0" LÓGICO EN SU ENTRADA.
OSC2/CLKOUT: ENTRADA DEL OSCILADOR DEL CRISTAL. SE CONECTA AL CRISTAL O
RESONADOR EN MODO XT (OSCILADOR DE CRISTAL). EN MODO RC (RESISTENCIA-
CONDENSADOR), ESTE PIN ACTÚA COMO SALIDA EL CUAL TIENE 1/4 DE LA FRECUENCIA
QUE ENTRA POR EL PIN OSC1/CLKIN.

OSC1/CLKIN: ENTRADA DEL OSCILADOR DEL CRISTAL / ENTRADA DE RELOJ DE UNA FUENTE
EXTERNA.
ARQUITECTURA INTERNA PIC16F84
Características Valor
Memoria de Programa 1k x 14 bits
Memoria de Datos RAM 68 Bytes
Memoria de Datos EEPROM 64 Bytes
Pila de programa 8 Niveles
Interrupciones 4 tipos diferentes
RISC 35
Frecuencia Máxima 10 MHz
Temporizadores 2 (TMR0(3) y WDT(4))
Líneas de Entradas/Salidas Digitales 13 (5 Puerto A, 8 Puerto B)
Corriente máxima sumidero 80 mA PA/150 mA PB
Corriente máxima fuente 50 mA PA/100 mA PB
Corriente máxima sumidero por línea (Pin) 25 mA
Corriente máxima fuente por línea (Pin) 20 mA
Voltaje de alimentación 2 a 6 VDC
Voltaje de programación 12 a 14 VDC
Encapsulado DIP plástico 18 pines
TIPOS DE OSCILADORES
• HS: (HIGH SPEED CRYSTALL RESONADOR): ALTA VELOCIDAD DE 20 MHZ A 4 MHZ.
• XT: (CRYSTALL//RESONADOR): ESTÁNDAR DE 4 MHZ MÁXIMO.
• LP: (LOW POWER CRYSTALL): BAJO CONSUMO, 200 KHZ A 30 KHZ.
• RC: (RESISTENCE/CAPACITOR): BAJA PRECISIÓN, TIENE UNA TABLA ASOCIADA A
LOS VALORES DE R Y C. MUY POCO USO. 200 HZ A 32 HZ.

ING. Luis Pacheco Cribillero 15/05/2022 31


FRECUENCIA DE FUNCIONAMIENTO
ALGUNOS CONCEPTOS
• UN CICLO DE INSTRUCCIÓN TARDA EN EJECUTARSE CUATRO
PERÍODOS DE RELOJ.
• TODAS LAS INSTRUCCIONES DEL PIC SE REALIZAN EN UN CICLO
DE INSTRUCCIÓN, EXCEPTUANDO LAS DE "SALTO" QUE TARDAN
DOS CICLOS.
• LOS IMPULSOS DE RELOJ ENTRAN POR FOSC1/CLKIN Y SE
DIVIDEN EN CUATRO SEÑALES INTERNAMENTE, DANDO LUGAR
A Q1, Q2, Q3 Y Q4.
• EL CICLO DE INSTRUCCIÓN SE LOGRA AL REALIZARSE LAS
SIGUIENTES OPERACIONES:
• Q1 INCREMENTA EL CONTADOR DE PROGRAMA (PC)
• Q2 BUSCA EL CÓDIGO DE LA INSTRUCCIÓN EN LA MEMORIA
DEL PROGRAMA Y SE CARGA EN EL REGISTRO DE
INSTRUCCIONES
• Q3 – Q4 DECODIFICAN Y EJECUTAN LA INSTRUCCIÓN
RESPECTIVA

15/05/2022 32
FRECUENCIA DE FUNCIONAMIENTO

15/05/2022 33
• HTTPS://WWW.YOUTUBE.COM/WATCH?V=20UWZ6BLZFM
• HTTPS://WWW.YOUTUBE.COM/WATCH?V=KAGOFAY8BQS
CÁLCULOS DE TIEMPOS
LOS CÁLCULOS SE REALIZAN BAJO LAS SIGUIENTES
RECOMENDACIONES:
1. SE ELIGE EL OSCILADOR CON EL CUAL SE VA A TRABAJAR.
2. DADA LA FRECUENCIA DE FUNCIONAMIENTO (FRECUENCIA DE
OSCILACIÓN FOSC), HALLAMOS EL PERÍODO.

3. UN CICLO DE INSTRUCCIÓN SE EJECUTA EN 4 PERÍODOS.

TCICLO DE INSTRUCCIÓN: 4 * TOSC

4. CALCULO DTIN Y DTIS:

DURACIÓN DEL TOTAL DE INSTRUCCIONES NORMALES


(DTIN)=NRO. DE INSTRUCCIONES * TCICLO DE INSTRUCCIÓN
· DURACIÓN DEL TOTAL DE INSTRUCCIONES DE SALTO
(DTIS)=NRO. DE INSTRUCCIONES * TCICLO DE INSTRUCCIÓN * 2

5. CUÁNTO DURA UN PROGRAMA EN EJECUTARSE:


TOTAL DE DURACIÓN DEL PROGRAMA: DTIN + DTIS
PRACTICA CÁLCULOS DE TIEMPOS
EJEMPLO. SEA UN CRISTAL XT, CUYA FRECUENCIA ES F= 4 MHZ, HALLE EL TOTAL DE
DURACIÓN DE UN PROGRAMA QUE CONTIENE 250 INSTRUCCIONES NORMALES Y 50
INSTRUCCIONES DE SALTO.
1. HALLAMOS EL PERÍODO:
T= 1/F, ÉSTE VALOR ES CONOCIDO COMO EL PERÍODO DE OSCILACIÓN.
T= 1 / 4 MHZ = 0.25 US
2. HALLAMOS EL CICLO DE INSTRUCCIÓN:
TCICLO DE INSTRUCCIÓN= 4*0.25 US = 1US.
3. DURACIÓN DEL TOTAL DE INSTRUCCIONES NORMALES (DTIN):
DTIN: 250 * 1 US = 250 US
4. DURACIÓN DEL TOTAL DE INSTRUCCIONES DE SALTO (DTIS):
DTIS: 50 * 1 US * 2 = 100 US
5. HALLAMOS EL TOTAL DE DURACIÓN DEL PROGRAMA:
TOTAL: DTIN + DTIS = 250 US + 100 US
TOTAL: 350 US
POR LO TANTO NUESTRO PROGRAMA TARDA EN EJECUTARSE, ALREDEDOR DE 350
US.
EJERCICIO. DADO UN PROGRAMA QUE CONTIENE 850 INSTRUCCIONES, DE LAS
CUALES EL 20 %, CORRESPONDEN A INSTRUCCIONES DE SALTO. HALLE: ¿CUÁNTO
TARDA EN EJECUTARSE EL PROGRAMA? CONSIDERE: A) OSCILADOR LP, B)
OSCILADOR XT
CIRCUITOS DE RESET

15/05/2022 37
CIRCUITOS DE APOYO (INTRODUCEN
DATOS AL MICROCONTROLADOR)
Pulsadores e interruptores

15/05/2022 38
CIRCUITOS DE APOYO (SACAN
DATOS DEL MICROCONTROLADOR)
Visualización

Con Display

39
CIRCUITOS DE APOYO (SACAN DATOS DEL MICROCONTROLADOR)

Con Relé

Con optoacoplador
REGISTROS, INSTRUCCIONES Y
BANCOS DE MEMORIA
ESTRUCTURA DE DATOS
• BIT: UNIDAD MÍNIMA DE
INFORMACIÓN x

• NIBBLE: GRUPO DE 4 BITS x x x x

• BYTE: GRUPO DE 8 BITS x x x x x x x x

• WORD: GRUPO DE 2 BYTES BYTE ALTO BYTE BAJO

(Bit más significativo) MSB LSB (Bit menos significativo)


x x x x x x x x
7 0

Rango de los microcontroladores de 8 Bits

28 = 256 posibles valores para operaciones


ALGUNOS TIPS PARA REPASAR Y RECORDAR

• SUMA BINARIA ARITMÉTICA: (ADD)


0+0 =0 0+ 1+=1
1 +0 =1 1 + 1 = 0 Y LLEVO ACARREO (CARRY)
PARA LA SIGUIENTE CIFRA MSB
• SUMA BINARIA LÓGICA: (IOR)
0+0=0 0+1=1
1+0=1 1+1=1
• RESTA BINARIA ARITMÉTICA: (SUB)
0–0=0 1–0=1
1–1=0 0 – 1 = 10 Y TOMO PRESTADO (BORROW) DE
LA CIFRA MSB INMEDIATA
• OR EXCLUSIVA: (XOR)
BITS IGUALES PRODUCEN COMO RESULTADO UN CERO
(A = B = 0)
BITS DIFERENTES PRODUCEN COMO RESULTADO UN UNO (A ≠ B
= 1)
SISTEMAS DE NUMERACIÓN
Decimal Hexadecimal Binario
(Formato 4 bits BCD)
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
FORMATO DE SISTEMAS DE NUMERACIÓN
ADMITIDOS POR EL MICROCONTROLADOR

Tipo de Sistema Formato Sigla Significado


Registro. Puede ser
Decimal D’126’ cualquiera que el
f (File)
.126 programador desee dentro
del rango permitido.

Binario B’10011011’ k Constante. Valor fijo.


Registro de trabajo
w (work)
Hexadecimal H’AE’ principal.
AEH Destino del Registro.
0xAE Si d vale 1, el resultado
se guardará en el Registro
que el programador haya
d (destiny)
escogido.
Si d vale 0, el resultado
se guardará en el Registro
de trabajo principal "w"
ARQUITECTURA INTERNA

• Podemos comprobar como la memoria está dividida


en dos bancos (cada una de las columnas): banco 0 y
banco 1.
• Las primeras 12 posiciones de cada banco (00h-0Bh y
80h-8Bh) están ocupadas por los Registros de
Propósito Especial (SFR). Estos registros, son los
encargados de controlar ciertas funciones específicas
del PIC.
• Las 68 posiciones siguientes (0Ch-4Fh y 8Ch-CFh)
son los denominados Registros de Propósito General,
(GPR). Éstos son empleados para guardar cualquier
dato que necesitemos durante la ejecución del
programa.
PIC16F84

EEPROM: de 64 bytes donde, opcionalmente, se pueden


almacenar datos que no se pierden al desconectar la
alimentación.
MEMORIA RAM
DE REGISTROS
ACCEDIENDO A LOS BANCOS DE REGISTROS
DIRECTIVA EQU
• LA DIRECTIVA EQU PERMITE ASIGNAR A UN REGISTRO O
CONSTANTE, UN NOMBRE ASOCIADO QUE FACILITA SU
ENTENDIMIENTO.
• EJEMPLO:
DATOX EQU 20H
DATOY EQU 21H
STATUS EQU 03H
F EQU 01H

INCLUDE .INC
El uso del INCLUDE, nos permite incluir en nuestro proyecto, una
plantilla que nos ahorra el trabajo de declarar todos los registros de
Funciones Especiales (SFR) de la memoria RAM de registros.
Es importante destacar, que en esta plantilla, todos los registros
están declarados en mayúscula. Por lo que durante la elaboración de un
programa, se debe respetar este formato.
Ejemplo:
INCLUDE <P16F84.INC> ó INCLUDE P16F84.INC
ESTRUCTURA DE UN PROGRAMA

Encabezado
EN GENERAL UN PROGRAMA ESTÁ
ESTRUCTURADO EN TRES GRANDES PARTES:

Configuración, A) ENCABEZADO: DEFINE EL TIPO DE PIC CON


Declaración de QUE SE ESTÁ TRABAJANDO, BLOQUE DE
DECLARACIONES DE VARIABLES Y
Registros,
CONSTANTES,
Datos,
Constantes. B) CONFIGURACIÓN DE REGISTROS
ESPECIALES: REGISTRO OPTION, INTCON,
TMR0, PUERTOS A Y B, EECON, STATUS.
org
B) CUERPO DEL PROGRAMA: AQUÍ ESTÁN
Cuerpo del CONTENIDAS TODAS LAS INSTRUCCIONES
Programa RELACIONADAS A LA EJECUCIÓN DE UN
PROGRAMA BAJO UN DISEÑO INDIVIDUAL,
REALIZADO POR EL PROGRAMADOR.
end
ESTRUCTURA DE UN PROGRAMA
1. EN TODO PROGRAMA SE DEBE INCLUIR CUAL ES EL TIPO DE PIC QUE SE
EMPLEARÁ, INCLUIR LIBRERÍAS Y CONFIGURARLO:
LIST P= 16F84A ; TIPO DE PIC A UTILIZAR
INCLUDE < P=16F84.INC> ; LIBRERÍA ASOCIADA AL PIC QUE SE
; ESTÁ UTILIZANDO
_CONFIG_RC_OSC_&_WDT_OFF ; SE SELECCIONAN LOS BITS DE
CONFIGURACIÓN
2. AL ESCRIBIR UN PROGRAMA SE REALIZAN Y ORGANIZAN LAS INSTRUCCIONES
EN COLUMNAS:
• 1RA COLUMNA: NOMBRAR VARIABLES O COLOCAR ETIQUETAS.
• 2DA COLUMNA: APLICAR LA INSTRUCCIÓN.
• 3RA COLUMNA: CONTIENE LOS DATOS NECESARIOS PARA QUE PUEDA
EJECUTARSE DICHA INSTRUCCIÓN.
• 4TA COLUMNA: CONTIENE COMENTARIOS, NO TOMADOS EN CUENTA POR EL
MICROCONTROLADOR.
EJEMPLO: DEFINA A LA VARIABLE M EN LA POSICIÓN DE MEMORIA EXPRESADA
EN 15H
1RAC 2DAC 3RAC 4TAC
M EQU 15H ; DEFINE A LA VARIABLE M EN LA POSICIÓN 15H
3. SE EMPLEAN SIGNOS PARA EFECTUAR DETERMINADAS CONSIDERACIONES, POR
EJEMPLO: (;) QUE SE EMPLEA PARA COLOCAR COMENTARIOS. EL PROGRAMA NO
TOMA EN CUENTA TODO LO QUE ESTÁ EN UNA LÍNEA LUEGO DE DICHO
SÍMBOLO.
ESTRUCTURA DE UN PROGRAMA

1ra Columna 2da Columna 3ra Columna 4ta Columna

Etiquetas Instrucciones Operandos Comentarios

RESULTADO EQU 0FH ;DECLARO AL REGISTRO


;RESULTADO
;EN LA POSICIÓN 0FH DE LA RAM
ORG 00H
GOTO INICIO
INICIO BSF STATUS,5
MOVLW FFH ; CONFIGURAMOS LOS
REGISTROS
MOVWF TRISA; ASOCIADOS A LOS PUERTOS A Y B
MOVLW 00H
MOVWF TRISB
ESTRUCTURA DE UN PROGRAMA
4. UN PROGRAMA SIEMPRE EMPIEZA CON LA INSTRUCCIÓN
“ORG” Y TERMINA CON “END”
5. CONSIDERE LAS SIGUIENTES RECOMENDACIONES:
• DIRECTIVAS, ETIQUETAS, VARIABLES Y CONSTANTES EN
MAYÚSCULAS. EJEMPLO: EQU, DATOA, SUMA, CONTA, RP0,
Z
• INSTRUCCIONES EN MINÚSCULAS. EJEMPLO: MOVWF,
ADDWF, GOTO, BCF, CALL, DECFSZ, ETC
• TABULE MUY BIEN SU PROGRAMA Y MANTENGA EL
FORMATO MOSTRADO ANTERIORMENTE.
• COLOQUE CONTINUAMENTE COMENTARIOS, A LO LARGO
DE TODO EL PROGRAMA. ESTOS LE AYUDARÁN A
ORIENTARSE AL MOMENTO DE REVISAR UN PROBLEMA DE
LÓGICA DEL MISMO O PARA RECORDAR SU
FUNCIONAMIENTO.
• UTILICE LA DIRECTIVA EQU, PARA ASIGNARLE NOMBRES A
CONSTANTES Y/O VARIABLES. ESTO FACILITARÁ SU
COMPRENSIÓN Y LECTURA.
6. SE RECOMIENDA AMPLIAMENTE EL USO DE LOS DIAGRAMAS
DE FLUJO, PARA LA ESTRUCTURACIÓN DEL RESPECTIVO
PROGRAMA. ESTOS PERMITEN VISUALIZAR EL
FUNCIONAMIENTO A “GROSSO MODO” DEL MISMO.
¿CUÁL SE ENTIENDE Con recomendaciones
MEJOR?
List P=16F84 ;Tipo de procesador
STATUS equ 03H ; Zona de
Sin recomendaciones declaraciones
PORTA equ 05H
List= 16F84 PORTB equ 06H
org 00H TRISA equ 85H
goto inicio TRISB equ 86H
inicio Bsf 03H,5 W equ 00H
movlw 1FH F equ 01H
movwf 85H org 00H
movlw 00H goto INICIO
movwf 86H INICIObsf STATUS,5 ;Se pasa a banco1
bcf 03H,5 movlw 1FH
movlw b’11110000’ movwf TRISA ; Se configura puerto A
movwf 06H movlw 00H
movf 05H,0 movwf TRISB ; Se configura puerto B
ExploPA Btfsc 05H,3 bcf SATUS,5 ; Se regresa al banco 0
goto ExploPA movlw b’11110000’
goto INVPB movwf PORTB ; Se escribe valor
INVPB comf 06H,1 movf PORTA,W
End ExploPABtfsc PORTA,3 ; RA3 es cero?
goto ExploPA
goto INVPB
INVPB comf PORTB,1 ; Se activa RB1
End
DIAGRAMA DE FLUJO
• SE RECOMIENDA AMPLIAMENTE QUE EL DISEÑADOR/PROGRAMADOR,
SE APOYE EN ELEMENTOS GRÁFICOS PARA DETERMINAR Y
DELIMITAR EL FUNCIONAMIENTO DEL DISEÑO QUE ESTÁ
ENCARANDO. LOS DIAGRAMAS DE FLUJO PERMITEN VISUALIZAR EL
FUNCIONAMIENTO LÓGICO DE CUALQUIER PROGRAMA.
Un rectángulo con los extremos redondeados, denota el
inicio y/o el fin de un programa.

Las figuras rectangulares representan acciones


concretas ó procesos a ser ejecutados por el programa.

El rombo representa una toma de decisión sobre una


condición que debe ser evaluada ó analizada. Si la
respuesta es afirmativa ó cumple con la condición, se
toma una dirección y en caso contrario, se toma una
dirección diferente.

Las flechas indican el flujo que debe seguir el programa.


Éstas indican claramente el camino ó dirección a seguir

•Los Conectores son utilizados cuando el diagrama de


flujo es de medianas o grandes dimensiones y su uso A B
evita sobrecargar de flechas al diagrama.
INSTRUCCIONES ORIENTADAS A REGISTROS
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
addwf f,d (W)+(f) a (destino) C, DC, Z
andwf f,d (W) AND (f) a (destino) Z
clrf f 00 a (f) (borrar registro F) Z
clrw 00 a (W) (borrar W) Z
comf f,d Complemento de f [(f) a (destino)] Z
decf f,d (f)-1 a destino (decrementa f) Z
decfsz f,d (f)-1 a destino y si resultado es 0 salta (decrementa F, Ninguno
salta si zero)
incf f,d (f)+1 a destino (incrementa f) Z
incfsz f,d (f)+1 a destino y si resultado es 0 salta Ninguno
iorwf f,d (W) or (f) a destino Z
movf f,d mover f a destino Z
movwf f (W) a (f) mover W a destino F Ninguno
nop No operación Ninguno
rlf f,d Rota f a la izquierda a través del carry a destino C
rrf f,d Rota f a la derecha a través del carry a destino C
subwf f,d (f)–(W) a (destino) C,DC,Z
swapf f,d Intercambia los nibbles de f a destino Ninguno
xorwf f,d (W) XOR (f) a (destino) Z
INSTRUCCIONES ORIENTADAS A BIT
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
bcf f,b Coloca a 0 el bit b del registro f Ninguno
bsf f,b Coloca a 1 el bit b del registro f Ninguno
btfsc f,b Salta si el bit b del reg. f es 0 Ninguno
btfss f,b Salta si el bit b del reg. f es 1 Ninguno
INSTRUCCIONES CON LITERALES Y DE CONTROL
addlw k (W)+ K a (W) C,DC,Z
andlw k (W) AND K a (W) Z
call k Llamada a subrutina Ninguno
clrwdt Limpia temporizador Watch Dog Z
goto k Go To dirección (ir a dirección) Ninguno
iorlw k (W) OR K a (W) Ninguno
movlw k K a (W) Ninguno
retfie Retorno de una interrupción Ninguno
retlw k Retorno con un literal en W Ninguno
return Retorno de una subrutina C,DC,Z
sleep Modo Stand by Z
sublw k K – (W) a W C, DC, Z
xorlw k (W) XOR K a (W) Z
DIFERENCIAS Y USO DE “CALL” Y “GOTO”
• AMBAS INSTRUCCIONES ROMPEN CON LA SECUENCIA NORMAL
DEL PROGRAMA, AL ALTERAR EL CONTENIDO DEL CONTADOR DE
PROGRAMA (PC).
• “GOTO” CARGA EN EL PC, LA DIRECCIÓN DE LA NUEVA
INSTRUCCIÓN. “CALL” ANTES DE CARGAR EL PC CON LA DIRECCIÓN
DE LA INSTRUCCIÓN A SALTAR, SALVA LA DIRECCIÓN DE DONDE
PARTE, GUARDÁNDOLA EN LA CIMA DE PILA (STACK), EL VALOR
ACTUAL DEL PC. LUEGO DE EJECUTAR LA SUBRUTINA, SE SACA DEL
STACK LA DIRECCIÓN DE DONDE PARTIÓ.
• SI NO ESTÁN EN LA SUBRUTINA LLAMADA POR “CALL”, LAS
INSTRUCCIONES “RETURN” O “RETLW K”.
NOTA: RECUERDE QUE LOS PIC’S POSEEN UN VALOR LIMITADO DE PILA (STACK).
EN EL PIC 16F84, ESTE ES DE 8. ESTO SIGNIFICA QUE EN UN PROGRAMA NO
PUEDE HABER MÁS DE 8 SUBRUTINAS ANIDADAS. (SUBRUTINAS DENTRO DE
SUBRUTINAS).
HERRAMIENTAS DE
PROGRAMACIÓN
INSTRUCCIONES DE
MANIPULACIÓN DE BITS

• BCF F,B (PONER A CERO AL BIT B DEL REGISTRO F)


• EJEMPLO: BCF DATOX,5
• DATOX= F4H

1 1 0 1 0 1 0 0

• BSF F,B (PONER A UNO AL BIT B DEL REGISTRO F)


• EJEMPLO: BSF DATOX,3
• DATOX= C0H
1 1 0 0 0 0 0 0

1 1 0 0 1 0 0 0
INSTRUCCIONES DE
EXPLORACIÓN/TESTEO DE BITS

• BTFSS F,B (PREGUNTA SI EL BIT B DEL REGISTRO F VALE UNO)

• (BIT TEST FILE SKIP SET)


• EJEMPLO: BTFSS SUMA,2
GOTO RUTINAA
GOTO RUTINAB

• BTFSC F,B (PREGUNTA SI EL BIT B DEL REGISTRO F VALE CERO)

• (BIT TEST FILE SKIP CLEAR)


• EJEMPLO: BTFSC SUMA,5
GOTO RUTINAA
GOTO RUTINAB
STATUS
7 (L/E) 6 (L/E) 5 (L/E) 4 (L) 3 (L) 2 (L/E) 1 (L/E) 0 (L/E)

IRP RP1 RP0 TO PD Z DC C


C. Bit de acarreo en el bit MSB
Vale 1 cuando en el resultado de una operación aritmética, se ha producido una acarreo (suma)
Vale 0 si no se ha producido un acarreo.
Para el caso de una resta, ocurre todo lo contrario a lo expuesto:
Vale 1 si no se ha producido un "préstamo"
Vale 0 si se ha producido un "préstamo"
DC. Acarreo en el cuarto bit (Nibble bajo). Misma descripción de C, pero referida al cuarto bit.
Z. Cero.
Vale 1 si el resultado de una operación lógico - aritmética es cero
Vale 0 si el resultado de una operación lógico- aritmética NO es cero
IRP. Bit para direccionamiento indirecto de los bancos de datos.
RP1 - RP0. Bits para direccionamiento directo de los bancos de datos.
1 - 1 : Banco 3
1 -0 : Banco 2
0 - 1 : Banco 1
0 - 0 : Banco 0
TO. Time Out
Se pone a 1 después de la conexión de la alimentación al microcontrolador, o al ejecutarse las
instrucciones clrwdt ó sleep
Se pone a 0 cuando el perro guardián se ha desbordado.
PD. Power Down
Se pone a 1 después de la conexión de la alimentación al microcontrolador o al ejecutarse la
instrucción clrwdt
Se pone a 0 mediante la ejecución de la instrucción sleep
RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS
• ¿CÓMO HACEMOS PARA SABER SI LA SUMA DE DOS REGISTROS HA
PRODUCIDO ACARREO?
R= SE SUMAN LOS DOS REGISTROS Y SE PREGUNTA POR EL BIT C DEL
REGISTRO STATUS:
MOVF DATOA,0 ;DATOA→W
ADDWF DATOB,0 ;DATOA+DATOB→W
BTFSS STATUS,0 ; C=1?
GOTO NOACARREO
GOTO ACARREO
• ¿CÓMO SABEMOS SI LA SUMA DE DOS NIBBLES (4 BITS) HA PRODUCIDO
ACARREO?
R= SE SUMAN LOS DOS REGISTROS Y SE PREGUNTA POR EL BIT DC DEL
REGISTRO STATUS:
MOVF DATOA,0 ;DATOA→W
ADDWF DATOB,0 ;DATOA+DATOB→W
BTFSS STATUS,1 ; DC=1?
GOTO NOACARREO
GOTO ACARREO
RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS
• ¿CÓMO SABEMOS SI UN REGISTRO ES IGUAL A OTRO?
• OPCIÓN A: SE RESTAN AMBOS REGISTROS Y SE PREGUNTA SI Z ES IGUAL A 1:
MOVF DATOB,0 ;DATOB→W
SUBWF DATOA,0 ;DATOA – DATOB →W
BTFSS STATUS,2
GOTO NOIGUAL
GOTO IGUAL

• OPCIÓN B: SE APLICA XOR ENTRE AMBOS REGISTROS Y:


MOVF DATOB,0 ;DATOB→W
XORWF DATOA,0 ;DATOA (XOR) DATOB →W
BTFSS STATUS,2
GOTO NOIGUAL
GOTO IGUAL
RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS

• ¿CÓMO SABEMOS SI UN REGISTRO ES MAYOR, IGUAL O MENOR A OTRO?


R= SE RESTAN AMBOS REGISTROS (A – B) Y:
MOVF DATOB,0 ;DATOB→W
SUBWF DATOA,0 ;DATOA-DATOB→W
EXPLORA BTFSS STATUS,2; Z=1?
GOTO SIGUE
GOTO IGUAL ;SI Z=1, A=B
SIGUE BTFSC STATUS,0;C=0?
GOTO MAYOR ; SI C=1, A>B
GOTO MENOR ; SI C=0, A<B
ADDLW ADDLW
ADD Literal to w
Operación w+k→w
Sintaxis [Etiqueta] ADDLW k
Operadores 0 < k < 255
Ciclos 1

OPCODE 11 111x kkkk kkkk

Suma el contenido del registro w al literal


Descripción k, y almacena el resultado en w.Si se
produce acerreo el flag C se pone a "1".
C Se pone a 1 si se produce un Acarreo desde el bit de mayor peso.
DC Se pone a 1 si se genera un Acarreo del bit 3 al bit 4.
Z Se pone a 1 si el resultado de la operación es cero.
EJEMPLO:
ADDLW 0x15
Si antes de la instrucción:
w = 10h = 0001 0000 b
Al ejecutarse la instrucción
w = 10 h + 15 h = 25 h
w = 0001 0000 b + 0001 0101 b = 0010 0101 b
0001 0000 b
0001 0101 b
0010 0101 b
ADDWF ADDWF
ADD w to F
Operación w+f→d
Sintaxis [Etiqueta] ADDWF f,d
Operadore 0 < f < 127
s d [0,1]
Ciclos 1
d
OPCODE 00 0111 ff ffff
f
Suma el contenido del registro w al
Descripció contenido del registro f, y almacena el
n resultado en w si d = 0, y en el registro f
EJEMPLO: si d = 1.
ADDWF FSR,0
Si antes de la instrucción. w = 17 h y FSR = C2 h como d=0
Al ejecutarse:
w = 17 h + C2 h = D9 h
FSR = C2 h
0001 0111 b
1100 0010 b
1101 1001 b
ANDLW ANDLW
AND Literal and w
Operación w AND k → w
Sintaxis [Etiqueta] ANDLW k
Operadores 0 < f < 255
Ciclos 1
kk
OPCODE 11 1001 kkkk
kk
Efectúa la operación AND lógico entre el contenido del
Descripción registro w y el literal k, y almacena el resultado en w.
Esta instrucción realiza la operación AND bit a bit.
EJEMPLO:
ANDLW 0x5F
Si antes de la instrucción. w = A3 h
Al ejecutarse:
w = 0101 1111 b AND 1010 0011 b =
0000 0011 b = 03 h
0101 1111 b
1010 0011 b
0000 0011 b
ANDWF ANDWF

AND w with F
Operación w AND f → d
Sintaxis [Etiqueta] ANDWF f,d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
df
OPCODE 00 0101 ff
ffff

Efectúa la operación AND lógico entre el contenido del


registro w y el contenido del registro f, y almacena el
EJEMPLO: Descripción
resultado en w si d = 0, y en f si d = 1.
ANDWF FSR,1 Esta instrucción realiza la operación AND bit a bit.
Si antes de la instrucción. w
= 17 h = 0001 0111 b y FSR
= C2 h = 1100 0010 h
Al ejecutarse:
w = 17 h = 0001 0111 b
FSR = 0001 0111 b AND
1100 0010 b = 0000 0010 b
= 02 h
0001 0111 b
1100 0010 b
0000 0010 b
BCF BCF

Bit Clear F
Operación 0 → (f<b>)
Sintaxis [Etiqueta] BCF f,b
0 < f < 127
Operadores
0<b<7
Ciclos 1

OPCODE 01 00bb bfff ffff

Descripción Pone a cero el bit número b del registro f.

EJEMPLO:
BCF FLAG_REG, 7
Si antes de la instrucción el registro:
FLAG_REG = C7 h = 1100 0111 b
Al ejecutarse la instrucción, el registro queda con el
valor:
FLAG_REG = 47b = 0100 0111 b
BSF BSF
Bit Set F
Operación 1 → (f<b>)
Sintaxis [Etiqueta] BSF f,b
0 < f < 127
Operadores
0<b<7
Ciclos 1
11b bf
OPCODE 01 ffff
b ff
Descripción Pone a 1 el bit b del registro f

EJEMPLO:
BSF FLAG_REG, 7
Si antes de la instrucción el registro tiene el valor:
FLAG_REG = 0A h = 0000 1010 b
Al ejecutarse la instrucción, el registro queda con el valor:
FLAG_REG = 8A h = 1000 1010 b
MOVLW MOVLW
Move literal to w
Operación k→w
Sintaxis [Etiqueta] MOVLW k
Operadore
0 < f < 255
s
Ciclos 1
kkk
OPCODE 11 00xx kkkk
k
El registro w se carga con el valor de 8 bits
Descripción
del literal k
EJEMPLO:
MOVLW 0x5A
Al ejecutarse:
w = 5A h
MOVF MOVF
Move f
Operación f→d
Sintaxis [Etiqueta] MOVF f,d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
dff
OPCODE 00 10000 ffff
f
El contenido del registro f se carga en el registro
destino dependiendo del valor de d. Si d=0 el destino
Descripción es el registro w, si d=1 el destino es el propio registro
f. Esta instrucción permite verificar dicho registro ya
que el flag Z queda afectado.

EJEMPLO:
MOVF FSR,0
Al ejecutarse:
w = al valor del FSR
MOVWF MOVWF
Move w to f
Operación w→f
Sintaxis [Etiqueta] MOVWF f
Operadores 0 < f < 127
Ciclos 1
OPCODE 00 0000 1fff ffff
Mueve el contenido del registro w al
Descripción
registro f

EJEMPLO:
MOVWF OPCION
Si antes de la instrucción:
OPCION = FF h
w = 4F h
Al ejecutarse:
OPCION = 4F h
w = 4F h
TRIS TRIS

Guarda el acumulador en uno de los registros de TRIS.


Operación w → f(TRISA ó TRISB)
Sintaxis [Etiqueta] TRIS f
Operadores No tiene
Ciclos 1
OPCODE 00 0000 0110 1111

Esta instrucción guarda el valor del acumulador w


en uno de los registros especiales TRIS (TRISA o
TRISB) que indicamos en el parámetro f. No
Descripción
modifica ningún bit de estado.
Los registros TRIS determinan el funcionamiento
como entrada y salida de las líneas I/O del PIC.

EJEMPLO:
BSF STATUS,RP0 ; activa el banco 1.
MOVLW 16h ; carga el acumulador con el valor 16h
MOVWF TRISA ; carga el registro PORTA con W.
SELECCIONANDO LOS BANCOS DE REGISTROS
• EL PIC 16F84 POSEE 2
BANCOS DE REGISTROS,
DEL REGISTRO STATUS.
• SI RP0= 1, SE SELECCIONA
EL BANCO 1
• SI RPO= 0, SE SELECCIONA
EL BANCO 0
• EJEMPLO: SELECCIONE EL
BANCO DE REGISTROS 1:
• BSF STATUS,5 ; RP0= 1
• SELECCIONE EL BANCO DE
REGISTROS 0:
• BCF STATUS,5 ; RP0=0

7 (L/E) 6 (L/E) 5 (L/E) 4 (L) 3 (L) 2 (L/E) 1 (L/E) 0 (L/E)

IRP RP1 RP0 TO PD Z DC C


CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
1. Se selecciona el banco 1
• Mediante software a los circuitos triestados se determinan que un pin
o puerto trabaje como entrada o salida.
2. Se configuran mediante los registros asociados a los puertos
(TRISA y TRISB), los pines de un puerto como entrada o salida.
• Podemos hacer analogía de la siguiente forma:
1 = In = Entrada = Solo lectura PUERTO A, B
0 = Out = Salida = Solo escritura PUERTO A, B
CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
3. Se selecciona o se regresa al banco 0, para trabajar con los
puertos que han sido previamente configurados.
• Si un puerto (o pin) ha sido configurado como salida, entonces se
podrá escribir sobre él, para sacar datos.
• Si un puerto (o pin) ha sido configurado como entrada, entonces se
podrá leer los datos que están ingresando por él.
CONFIGURANDO UN PUERTO COMO ENTRADA/SALIDA (POR BYTE)

RECORDEMOS LOS TRES PASOS:


• POR BYTE:
A) BSF STATUS, 5 ; (1) SELECCIÓN DE BANCO 1
MOVLW FFH ; B’11111111’
MOVWF TRISB ; (2) TODOS LOS BITS DEL PUERTOB ESTÁN
; CONFIGURADOS COMO ENTRADAS
BCF STATUS,5 ; (3) SE REGRESA AL BANCO 0

B) BSF STATUS, 5 ; (1) SELECCIÓN DE BANCO 1


MOVLW 00H ; B’00000000’
MOVWF TRISA ; (2) TODOS LOS BITS DEL PUERTOA ESTÁN
; CONFIGURADOS COMO SALIDAS
BCF STATUS,5 ; (3) SE REGRESA AL BANCO 0

C) BSF STATUS, 5 ; (1) SELECCIÓN DE BANCO 1


MOVLW B’10010001 ; B’ESSESSSE’
MOVWF TRISB ; (2) MIXTO E/S EN UN MISMO PUERTO
BCF STATUS,5 ; (3) SE REGRESA AL BANCO 0
CONFIGURANDO UN PUERTO COMO
ENTRADA/SALIDA (BIT A BIT)
RECORDEMOS LOS TRES PASOS:
• BIT A BIT:
BSF STATUS,5 ; (1) SELECCIÓN DE BANCO 1
BSF PUERTOA,1 ; (2) ¿SALIDA O ENTRADA?
BCF PUERTOA,2 ; (2) ¿SALIDA O ENTRADA?
BSF PUERTOA,3 ; (2) ¿SALIDA O ENTRADA?
BCF PUERTOB,0 ; (2) ¿SALIDA O ENTRADA?
BCF PUERTOB,2 ; (2) ¿SALIDA O ENTRADA?
BCF PUERTOB,3 ; (2) ¿SALIDA O ENTRADA?
BSF PUERTOB,5 ; (2) ¿SALIDA O ENTRADA?
BCF PUERTOB,7 ; (2) ¿SALIDA O ENTRADA?
BCF STATUS,5 ; (3) SE REGRESA AL BANCO 0

Nota: Estamos asumiendo que en este ejemplo hemos etiquetado


previamente a 05H como PuertoA y 06H como PuertoB.
ESCRIBIR Y LEER SOBRE UN PUERTO
• EJEMPLO. REALICE UN PROGRAMA QUE CONFIGURE AL PUERTO A COMO ENTRADA Y
A LOS PRIMEROS CUATRO BITS DEL PUERTO B COMO SALIDA, LOS RESTANTES BITS
DEL PUERTO B COMO ENTRADA.
STATUS EQU 03H ; EN ESTA PARTE SE DECLARAN ETIQUETAS.
PUERTOA EQU 05H ; TAMBIÉN USAR LA DIRECTIVA INCLUDE
PUERTOB EQU 06H ; Y SE OBVIAN ESTAS DECLARACIONES
BSF STATUS,5 ; SE VA AL BANCO 1, PARA CONFIGURAR
; LOS PUERTOS
MOVLW 1FH
MOVWF PUERTOA ; HEMOS CONFIGURADO AL PUERTOA COMO
;ENTRADA
MOVLW B'11110000'
MOVWF PUERTOB ; NIBBLE BAJO COMO SALIDA Y NIBBLE
;ALTO COMO ENTRADA
BCF STATUS,5 ; CAMBIAMOS AL BANCO 0 PARA PODER
;LEER Ó ESCRIBIR EN ESTOS
REGISTROS ASOCIADOS A LOS PUERTOS

• DE CONFIGURACIÓN:
• TRISA (85H, BANCO 1)
• TRISB (86H, BANCO 1)
• DE TRABAJO (LECTURA/ESCRITURA)
• PORTA (05H, BANCO 0)
• PORTB (06H, BANCO 0)
• PORTA Y PORTB, SON REGISTROS DE LECTURA/ESCRITURA,
QUE ESTÁN DIRECTAMENTE VINCULADOS A LOS PUERTOS
DEL MICROCONTROLADOR.
LEER Y/O ESCRIBIR EL UN VALOR
EN UN PUERTO
• EJEMPLO 1. LEA EL VALOR PRESENTE EN EL PUERTO A Y GUÁRDELO EN
UN REGISTRO DATOA.
MOVF PORTA,0 ; PORTA→W
MOVWF DATOA ; W→DATOA

• EJEMPLO 2. ESCRIBA SOBRE EL PUERTO B EL SIGUIENTE VALOR: 49H


MOVLW 49H ; 49H→W
MOVWF PORTB ; W→PORTB

• EJEMPLO 3. ACTIVE EL BIT RB0, DESACTIVE EL BIT RB1 Y ACTIVE EL BIT


RA4:
BSF PORTB,0 ; RB0= 1
BCF PORTB,1 ; RB1= 0
BSF PORTA,4 ; RA4= 1
LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO
• SEGÚN EL EJEMPLO 3,
PLANTEADO ANTERIORMENTE;
¿QUÉ EFECTOS SE TIENE SOBRE
EL SIGUIENTE CIRCUITO?

• ¿Qué Efectos se tiene sobre el


circuito si se aplican las siguientes
instrucciones?
movlw B’00000001’
movwf PORTB

• ¿Qué Efectos se tiene sobre el


siguiente circuito si se aplican estas
siguientes instrucciones?
bcf PORTA,0
bsf PORTA,1
bcf PORTA,2
LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO

• PARA EL SIGUIENTE
CIRCUITO, ¿QUÉ VALOR
DEBEMOS COLOCAR EN
PUERTO B PARA QUE SE
VISUALICE UN 7 EN EL
DISPLAY?

• ¿Cómo hacemos para saber el


valor del bit RA0?
Basta con explorar su estado
lógico mediante alguna de las
instrucciones de testeo y/o
exploración: btfss f,b ó btfsc f,b:

btfss PORTA,0
goto RutinA
goto RutinB
TOMA DE DECISIONES
• UNA TAREA.
LA CONDICIÓN PUEDE
Condición NO
Proceso A VENIR INTERNAMENTE
X=1? COMO EXTERNAMENTE.

SI

• Interna • Externa
btfss STATUS,0 ; C=1? btfss PORTA,0 ; RA0=1?
goto ProcesoA goto ProcesoA
goto SIGUE goto SIGUE
TOMA DE DECISIONES
• DOS TAREAS.
NO LA CONDICIÓN PUEDE
Condición VENIR INTERNAMENTE
Proceso A
X=1? COMO EXTERNAMENTE.

SI

Proceso B

• Interna • Externa
btfss STATUS,0 ; C=1? btfss PORTA,0 ; RA0=1?
goto ProcesoA goto ProcesoA
goto ProcesoB goto ProcesoB
TOMA DE DECISIONES. EJEMPLO
• DADO EL SIGUIENTE CIRCUITO, ACTIVE EL LED UBICADO EN
RB0 SI RA0, VALE 0 Y EN CASO CONTRARIO, ACTIVE EL LED
UBICADO EN RB1.
TOMA DE DECISIONES. EJEMPLO

NO Activar LED en
RA0=1?
RB0

• Externa
SI btfss PORTA,0 ; RA0=1?
goto ProcesoA
goto ProcesoB
Activar LED en
ProcesoA bsf PORTB,0
RB1
goto SIGUE
ProcesoB bcf PORTB,1
goto SIGUE
SIGUE ------
------
------
TOMA DE DECISIONES. CERROJO Ó
VALIDACIÓN
• SE QUEDA ESPERANDO
QUE LA CONDICIÓN
OCURRA.
Condición NO
X=1?
• Interna
ESPERA btfss INTCON,0
goto ESPERA
SI
goto ProcesoA

Proceso A
• Externa
EXPLORA btfss PORTA,0 ; RA0=1?
goto EXPLORA
goto ProcesoA
¿CÓMO PASAR DEL DIAGRAMA DE FLUJO AL
PROGRAMA?
• ES SENCILLO:
• CADA SÍMBOLO DEL DIAGRAMA DE FLUJO REPRESENTA UNA (Ó VARIAS)
INSTRUCCIÓN (ES).
• EL PROGRAMADOR/DISEÑADOR, MEDIANTE LA PRÁCTICA Y/O VISUALIZACIÓN,
DEBE BUSCAR LAS INSTRUCCIONES QUE CUMPLAN CON LOS SÍMBOLOS Y SU
CONTENIDO, E IR COLOCÁNDOLAS SECUENCIALMENTE, SEGÚN LO INDIQUE
EL DIAGRAMA DE FLUJO PREVIAMENTE ELABORADO.

CARGA movlw
35H→ SUMA movwf

SI btfss
Z=1? goto
goto
NO
ProcesoA
¿CÓMO PASAR DEL DIAGRAMA DE FLUJO AL
PROGRAMA?
• ES SENCILLO:
• CADA SÍMBOLO DEL DIAGRAMA DE FLUJO REPRESENTA UNA (Ó VARIAS)
INSTRUCCIÓN (ES).
• EL PROGRAMADOR/DISEÑADOR, MEDIANTE LA PRÁCTICA Y/O VISUALIZACIÓN,
DEBE BUSCAR LAS INSTRUCCIONES QUE CUMPLAN CON LOS SÍMBOLOS Y SU
CONTENIDO, E IR COLOCÁNDOLAS SECUENCIALMENTE, SEGÚN LO INDIQUE
EL DIAGRAMA DE FLUJO PREVIAMENTE ELABORADO.

CARGA movlw 35H


35H→ SUMA movwf SUMA

SI btfss STATUS,2
Z=1? goto ProcesoA
goto Carga
NO
ProcesoA
RUTINAS
INTERMEDIAS
SUBRUTINA
MIENTRAS SE
PRESIONA TECLA NO

UNA TECLA PRESIONADA?

SI

DELAY 10 ms

PROCESO A
PRESIONAR TECLA Y Tecla NO
ESPERAR A QUE SE Presionada?
SUELTE PARA
SI
EJECUTAR SUBRUTINA
Retardo 10 ms

Tecla NO
Soltada?

SI

Retardo 10 ms

Proceso A
CALL K

PCL INICIO

INSTRUCC A PROX
27H
INSTRUCC B INSTRUCC 1
28H
INSTRUCC C INSTRUCC 2
29H
CALL PROX RETURN ó RETLW K
2AH
INSTRUCC D
2BH SUBRUTINA
FIN

PROGRAMA PRINCIPAL
CALL K
• EL LLAMADO A UNA SUBRUTINA K, DESVÍA EL FLUJO
NORMAL DEL PROGRAMA, HACIA K.
• EL VALOR DEL CONTADOR DEL PROGRAMA (PC) ES
GUARDADO EN LA PILA (STACK), MEMORIA TIPO FIFO
(FIRST IN FIRST OUT).
• LA FAMILIA DE LA GAMA MEDIA (PIC16FXXX) POSEE 8
NIVELES DE STACK.
• ESTO OCURRE SI EXISTEN 8 SUBRUTINAS ANIDADAS
(SUBRUTINAS DENTRO DE SUBRUTINAS).
• DEBE TENERSE EN CUENTA AL MOMENTO DE LA
PROGRAMACIÓN Y ELABORACIÓN DE UN DISEÑO.
CALL K
PILA (STACK) (PCL)
K (03H)
L (05H)
M (09H)
N (1FH)
O (2AH)
P (2EH)
Q (30H)
R (3CH)

T (40H)
TIMER 0
REGISTROS ASOCIADOS AL
TEMPORIZADOR TMR0

• TMR0: REGISTRO DE 8 BITS DE LECTURA/ESCRITURA


• OPTION: CONFIGURA AL TMR0 PARA QUE TRABAJE COMO
TEMPORIZADOR Ó CONTADOR Y ASIGNA EL VALOR AL
PRESCALER
• INTCON: DA INFORMACIÓN MEDIANTE EL BIT “TOIF” CUANDO EL
TMR0 SE HA DESBORDADO.
• TRISA (PUERTO A): PERMITE EL INGRESO DE PULSOS CUANDO
EL TMR0 ESTÁ CONFIGURADO COMO CONTADOR POR RA4
REGISTRO OPTION (DIRECCIÓN 81H)

• BIT 7, RPBU : RESISTENCIA PULL-UP, PUERTO B, HABILITA EL


BIT
1: DESACTIVADAS
0: ACTIVADAS
• BIT 6, INTEDG: FLANCO ACTIVO PARA EL CONTROL DE
INTERRUPCIONES
1: CON FLANCO ASCENDENTE
0: CON FLANCO DESCENDENTE
• BIT 5, TOCS: FUENTE DE RELOJ PARA TMR0
1: PULSOS INTRODUCIDOS A TRAVÉS DE RA4/T0CK1
(CONTADOR)
0: PULSOS DE RELOJ INTERNO FOSC/4 (TEMPORIZADOR)
• BIT 4, TOSE: TIPO DE FLANCO EN TOCK1
1: INCREMENTO DE TMR0 CADA FLANCO DESCENDENTE
0: INCREMENTO DE TMR0 CADA FLANCO ASCENDENTE
• BIT 3, PSA: BIT DE ASIGNACIÓN DEL PRESCALER DIVISOR DE
FRECUENCIA
1: EL DIVISOR DE FRECUENCIA SE ASIGNA AL WDT
0: EL DIVISOR DE FRECUENCIA SE ASIGNA AL TMR0
• BIT 2-0, PS2:PSO: RANGO CON EL QUE ACTÚA EL DIVISOR DE
FRECUENCIA.
EJEMPLOS DE CONFIGURACIÓN
• CONFIGURE AL PIC16F84 PARA QUE EL TEMPORIZADOR TMR0,
TRABAJE CON LOS PULSOS PROVENIENTES DE UN RELOJ EXTERNO, Y
EL MISMO CAMBIE EN EL FLANCO DE SUBIDA DEL PULSO EXTERNO:

• Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la


frecuencia del mismo sea dividida por 32:

¿Y los demás bits?


¿Cómo lo cargo al OPTION?
En el segundo caso:
En el primer caso:
movlw b’xx0x0100’
movlw b’xx11xxxx’
movwf OPTION
movwf OPTION
TEMPORIZADOR TMR0
• REGISTRO ASOCIADO AL TIMER0. SE ENCUENTRA EN LA POSICIÓN 01H DE
LA MEMORIA RAM. ES EL CORAZÓN DEL MÓDULO TIMER0. PUEDE SER
LEÍDO O ESCRITO EN CUALQUIER MOMENTO. EL TMR0 SE INCREMENTARÁ
AUTOMÁTICAMENTE POR CADA CICLO DE INSTRUCCIÓN Y CONTARÁ
DESDE 0 (00H) HASTA 255 (FFH) (CONTADOR DE 8 BITS).
• PARA QUE OPERE COMO TEMPORIZADOR, EL BIT TOCS (DEL REGISTRO
OPTION) DEBE SER CERO (0), EL BIT PSA= 0 Y DEBEN SER CARGADOS LOS
BITS PS2 A PS0, SEGÚN SEA EL PREESCALER A UTILIZAR PARA LOGRAR
NUESTRA TEMPORIZACIÓN.
• PARA QUE OPERE COMO CONTADOR, SE USA UNA ENTRADA DE RELOJ
EXTERNO EN EL TMR0 .
PS2 PS1 PS0 TMR0 WDT

0 0 0 1:2 1:1

0 0 1 1:4 1:2

0 1 0 1:8 1:4

0 1 1 1:16 1:8

1 0 0 1:32 1:16

1 0 1 1:64 1:32

1 1 0 1:128 1:64

1 1 1 1:256 1:128
¿CÓMO CUENTA EL TMR0?
00H
FFH
EL TMR0 CUENTA EXCLUSIVAMENTE DE
FORMA ASCENDENTE, NUNCA
DESCENDENTE.

00H

(28 – N10)
00H
Si el TMR0 se carga con un valor, FFH
éste comenzará a contar desde el
valor cargado hasta que se
desborda (cuando pasa a 00H) Valor cargado
En el TMR0

00H
CÁLCULOS CON EL TMR0
• CUANDO SE CARGA EN EL REGISTRO TMR0 UN VALOR XXH, ÉL
MISMO CONTARÁ: (FFH – XXH) IMPULSOS Y EL TIEMPO QUE
TARDA EN HACERLO VIENE DADO POR LA EXPRESIÓN:
 TEMPORIZACIÓN= 4 * TOSC * VALOR REAL TMR0 * RANGO DEL
DIVISOR DE FRECUENCIA
 VALOR REAL TMR0 = (28 – N10) = (256 – N10)
 N10= VALOR A CARGAR EN EL TMR0

EJEMPLO: SEA UN VALOR A CARGAR EN EL TMR0 DE 100, UN


PRESCALER SELECCIONADO DE 1:32 Y UN OSCILADOR XT.
DETERMINE EL TIEMPO EN QUE TARDARÁ EL TMR0 EN
DESBORDARSE.
SOLUCIÓN: SEA XT = FRECUENCIA = 4 MHZ, T = 0.25 ΜS.
TEMPORIZACIÓN= 4*0.25 ΜS* (256 – 100) * 32 = 4.992 MS.
OTROS EJEMPLOS
• SE DESEA SABER: ¿QUÉ VALOR DEBEMOS CARGAR EN EL TMR0, SI
DESEAMOS OBTENER UNA TEMPORIZACIÓN DE 10,24 MS,
UTILIZANDO UN PREESCALER DE 128 Y UN CRISTAL XT?
SOLUCIÓN:
Temporización 10,24ms
(256 – N10) = = = 80
4  TOSC  Rgodivisor 4  0.25s  128
(256 – N10) = 80, DESPEJANDO N10 = (256 – 80) = 176, EL VALOR QUE
DEBEMOS CARGAR EN EL TMR0 ES 176, PARA QUE ÉSTE CUENTE DESDE
176 HASTA 256.

• ELEGIR EL TMR0, PARA GENERAR UN RETRASO DE 1.5 MS


UTILIZANDO UN OSCILADOR DE 10 MHZ.
SOLUCIÓN: SEA FOSC= 10 MHZ, T = 100 NS
Temporización 1.5ms
(256 – N10) = 4  TOSC  Rgodivisor = 4 100ns  RgoDivisor

N10 = 256 - (3750/RGODIVISOR)


CONTINUACIÓN EJEMPLO ANTERIOR

DÉMOSLE VALORES AL RANGO DEL DIVISOR, HASTA OBTENER UN VALOR


QUE SE ACERQUE LO MÁS POSIBLE AL RETARDO PROPUESTO:
SI PRESCALER= 256, VALOR A CARGAR EN EL TMR0= 241 (REDONDEADO)
SI PRESCALER= 128, VALOR A CARGAR EN EL TMR0= 227 (REDONDEADO)
SI PRESCALER= 64, VALOR A CARGAR EN EL TMR0= 197 (REDONDEADO)
SI PRESCALER= 32, VALOR A CARGAR EN EL TMR0= 139 (REDONDEADO)
ETC…
A MANERA DE PRÁCTICA, REALICE USTED, EL CÁLCULO DE LA
TEMPORIZACIÓN, PARA CADA UNO DE LOS VALORES QUE SE
CONSIGUIERON EN LOS CÁLCULOS ANTERIORES. ESCOJA UNO Y
JUSTIFIQUE. PARTICULARMENTE PARECE QUE EL QUE TIENE EL RANGO
DE DIVISOR DE 64, ES EL MEJOR.

• NOTA: EN ESTE EJERCICIO RESUELTO, USTED PUEDE DARSE CUENTA DE


QUE NO HAY UN SOLO RESULTADO PARA LOS EJERCICIOS, PERO LO QUE
SI DEBE CUMPLIRSE ES QUE SEA CUALQUIERA QUE SEAN LOS VALORES
QUE SE TOMEN PARA LOS CÁLCULOS, ESTOS DEBEN DE ESTAR
CERCANOS A LA RESPUESTA QUE SE ESPERA DEL TEMPORIZADOR QUE
ESTÉ DISEÑANDO.
• EJEMPLO. DIGA ¿CUÁNTO ES LA MÁXIMA TEMPORIZACIÓN QUE SE
PUEDE HALLAR CON EL TMR0? ASUMA QUE SE ESTÁ TRABAJANDO
CON UN XT.
SOLUCIÓN: TOMAMOS EL MÁXIMO FACTOR DE ESCALA DE
DIVISIÓN TODOS LOS ESTADOS QUE PUEDE CONTAR EL TMR0:
• TEMPORIZACIÓN= 4*0.25 ΜS*(256 )*256 = 65.536 MS.
• ESTE ES EL MÁXIMO VALOR QUE PODEMOS CONSEGUIR DEL
TMR0.

• ¿CÓMO HACEMOS ENTONCES PARA CONSEGUIR VALORES


SUPERIORES A ÉSTE, TALES COMO 0,5 S; 1 S; 2 S; ENTRE OTROS?
• ESTO SE PUEDE ARREGLAR SI TENEMOS UN CONTADOR DE
MAYOR NÚMERO DE BITS. LA SOLUCIÓN ESTÁ EN EXTENDER EL
TIMER0 CON UN REGISTRO (AUXILIAR) CONTROLADO POR
SOFTWARE.
• DICHO REGISTRO (AUXILIAR) CONTARÁ EL NÚMERO DE
INTERRUPCIONES POR DESBORDAMIENTO QUE GENERA EL
TIMER0, DE FORMA DE QUE ÉSTE PASE POR CERO, CUANDO
HAYA PASADO EL TIEMPO QUE ESTAMOS CALCULANDO.
USO DE REGISTRO AUXILIAR
PASOS:
1. ESCOGER UN VALOR PARA EL PRESCALER.
UN POSIBLE CRITERIO ES CALCULAR TODAS LAS FRECUENCIAS DE
PRESCALER QUE PODEMOS OBTENER CON CADA DIVISOR POSIBLE.
LAS FRECUENCIAS SIN DECIMALES SON INTERESANTES AL PODER
ENCONTRAR MÚLTIPLOS DE ELLAS A LA SALIDA DEL TMR0 CON MAYOR
FACILIDAD. EN GENERAL, LA ELECCIÓN DEL VALOR DEL PRESCALER
ES EMPÍRICA: DEPENDE DEL PROBLEMA, LA EXPERIENCIA Y SOBRE
TODO DE LA PRÁCTICA.
2. DETERMINAR EL VALOR DEL REGISTRO AUXILIAR, A PARTIR DEL
VALOR DADO POR EL TMR0.
NORMALMENTE VIENE DADO POR UN MÚLTIPLO DE LA FRECUENCIA,
ASOCIADA AL TIEMPO CALCULADO. CON UN EJEMPLO
ENTENDEREMOS MEJOR LO QUE SE DESEA PLANTEAR:
EJEMPLO: DETERMINE LOS VALORES DEL TMR0 Y DEL REGISTRO
AUXILIAR PARA
CONSEGUIR UNA TEMPORIZACIÓN DE 1 SEGUNDO. UTILICE UN
OSCILADOR XT.
SOLUCIÓN: XT= FRECUENCIA = 4 MHZ ; TOSC= 250 NS
• PASO 1. COMO NO SE NOS HA IMPUESTO QUE PRESCALER UTILIZAR NI
QUE TEMPORIZACIÓN, PODEMOS ALEATORIA MENTE ESCOGERLAS,
COMO EN EL EJEMPLO 6. EVALUANDO CUALQUIERA, CUYA
TEMPORIZACIÓN DEL TMR0 SE BASÓ EN 5 MS, ESCOJAMOS EL
PRESCALER 128 Y SUSTITUYAMOS LOS VALORES EN LA ECUACIÓN
PRINCIPAL:
• TEMPORIZACIÓN= 4*250 NS*(256 - 217)*128 = 4.992 MS
CONTINUACIÓN DEL EJEMPLO ANTERIOR
• PASO 2. ¿QUÉ VALOR DEBE DE TENER EL REGISTRO AUXILIAR?
a) AL TIEMPO DE 4.992 MS, SE ASOCIA UNA FRECUENCIA DEL TMR0 DE
=
1
= 200.3 HZ, REDONDEANDO, TOMAMOS ESTE MÚLTIPLO:
4.992ms

200, ASÍ, TENDREMOS ENTONCES QUE SI MULTIPLICAMOS 200*4.992


MS = 0.998 S, QUE ES UN VALOR BASTANTE CERCANO A 1 SEGUNDO.
B) LA MISMA OPERACIÓN PERO INTERPRETADA DE UNA FORMA MÁS
SENCILLA ES DETERMINAR CUANTAS VECES NECESITAMOS AL
TIEMPO CALCULADO PARA LOGRAR UN SEGUNDO:
1segundo
 200.32
4.992ms
LA QUE USTED ENTIENDA MEJOR ES VÁLIDA.
NUESTRO REGISTRO AUXILIAR DEBE SER DE 200!!!
RECUERDE DE QUE ÉSTE REGISTRO AUXILIAR NO DEBE
SUPERAR 255.
SI SUPERA ESTE VALOR, SE DEBE ADICIONAR UN NUEVO
REGISTRO AUXILIAR
DE LOS CÁLCULOS A LA PROGRAMACIÓN

• REALICEMOS UN EJERCICIO COMPLETO: REALICE UN


PROGRAMA QUE PERMITA ENCENDER Y APAGAR UN LED CADA
15 MS, MEDIANTE EL TIMER0. UTILICE UN OSCILADOR XT.
DE LOS CÁLCULOS A LA PROGRAMACIÓN

PASO 2. DEBEMOS DE
ESTRUCTURAR EL PROGRAMA
PARA QUE VIGILE E INFORME
CUANDO EL TMR0 SE HA
DESBORDADO, Y EL BIT QUE
NOS DA ESTA INFORMACIÓN
ES EL TOIF, DEL REGISTRO
INTCON. ADICIONAL A ESTO
DEBEMOS CONFIGURAR EL
REGISTRO OPTION PARA QUE
ESTE TRABAJE CON EL
PRESCALER QUE HEMOS
SELECCIONADO PARA
NUESTROS CÁLCULOS, ASÍ
COMO DE ASIGNARLO AL TMR0.
ASÍ COMO LA RUTINARIA
CONFIGURACIÓN DE LOS
PUERTOS.
LIST P=16F84A
INCLUDE P16F84A.INC
ORG 00H
GOTO INICIO
INICIO BSF STATUS,5
CLRF TRISA
Paso 3. Programa MOVLW B’11010110’
MOVWF OPTION_REG
BCF STATUS,5
CLRF INTCON
LEDON BSF PORTA,0
CALL RETARDO
LEDOFF BCF PORTA,0
CALL RETARDO
GOTO LEDON
;***RUTINA DE RETARDO***
RETARDO MOVLW D’139’
MOVWF TMR0
ESPERA BTFSS INTCON,TOIF
GOTO ESPERA
BCF INTCON,TOIF
RETURN
END
EJERCICIO. REALICE UN PROGRAMA QUE Subrutina
PERMITA ENCENDER Y APAGAR UN LED
CADA UN SEGUNDO. MEDIANTE TIMER0
Y CON UN OSCILADOR XT.

Programa Principal
¿OTRA FORMA DE HACER LOS
CÁLCULOS?

• PERO SI AÚN LE ENREDAN TODAS ESTAS FÓRMULAS,


PARA CALCULAR TEMPORIZACIONES, PROBEMOS CON
ESTAS TRES:

Pruebe ahora realizar los mismos cálculos siguiendo el 1, 2, 3…


INTERRUPCIONES
INTERRUPCIONES
• “LAS INTERRUPCIONES SON DESVIACIONES DEL FLUJO DE CONTROL DEL
PROGRAMA ORIGINADAS ASÍNCRONAMENTE, POR DIVERSOS SUCESOS QUE NO
SE HALLAN BAJO LA SUPERVISIÓN DE LAS INSTRUCCIONES. DICHOS SUCESOS
PUEDEN SER EXTERNOS AL SISTEMA, COMO LA GENERACIÓN DE UN FLANCO O
EN UNA PATILLA DEL MICROCONTROLADOR, O INTERNOS, COMO EL
DESBORDAMIENTO DE UN CONTADOR. SU COMPORTAMIENTO ES SIMILAR AL
DE LA INSTRUCCIÓN “CALL” DE LLAMADO A SUBRUTINA. SE DETIENE LA
EJECUCIÓN DEL PROGRAMA EN CURSO, SE SALVA LA DIRECCIÓN ACTUAL DEL
CONTADOR DE PROGRAMA (PC) EN LA PILA (STACK) Y SE CARGA EL PC CON
UNA DIRECCIÓN, QUE EN EL CASO DE UNA INTERRUPCIÓN ES UNA DIRECCIÓN
RESERVADA DE LA MEMORIA DE CÓDIGO, LLAMADA VECTOR DE
INTERRUPCIÓN”. PAREJO. MICROCONTROLADORES PIC. PÁG. 117. 2DA EDICIÓN.

• EN EL PIC 16F84, ESTE VECTOR DE INTERRUPCIÓN ESTÁ UBICADO EN LA


POSICIÓN 04H, EN DONDE COMENZARÁ LA RUTINA DE SERVICIO DE LA
INTERRUPCIÓN. EJEMPLO:
ORG 00H ; VECTOR DE ORIGEN DEL PROGRAMA
GOTO INICIO ; SALTO A LA RUTINA DE PROGRAMA PRINCIPAL
ORG 04H ; VECTOR DE INTERRUPCIÓN
GOTO INTERR ; SALTO A LA RUTINA DE INTERRUPCIÓN.

• LA IDEA DE COLOCAR UNA INSTRUCCIÓN DE SALTO INCONDICIONAL, ES LA DE


TRASLADAR EL FLUJO DEL PROGRAMA A LA ZONA DE MEMORIA DE CÓDIGO
QUE CONTIENE A LA RUTINA DE INTERRUPCIÓN.
CAUSAS DE INTERRUPCIÓN
1. ACTIVACIÓN DEL PIN RB0/INT
2. DESBORDAMIENTO DEL TMR0
3. CAMBIO DE ESTADO DE UNA DE LOS 4 PINES DE MÁS
PESO (RB7:RB4) DEL PUERTO B
4. FINALIZACIÓN DE LA ESCRITURA EN LA EEPROM DE
DATOS REGISTRO INTCON

• Este registro se encuentra ubicado en la posición 0BH del banco


0 de los registros de funciones especiales (SFR). A continuación
se describirán cada uno de sus bits:
INTCON
• GIE: (GLOBAL INTERRUPT ENABLE), PERMISO GLOBAL DE
INTERRUPCIONES
1: HABILITA TODAS LAS INTERRUPCIONES, CUYOS BITS DE PERMISO
INDIVIDUALES TAMBIÉN LAS PERMITAN
0: DESHABILITA TODAS LAS INTERRUPCIONES
• EEIE: (EEPROM INTERRUPT ENABLE), PERMISO DE INTERRUPCIÓN
POR FIN DE ESCRITURA EN LA EEPROM
1: HABILITA LA INTERRUPCIÓN CUANDO TERMINA LA ESCRITURA DE
LA EEPROM DE DATOS
0: DESHABILITA ESTA INTERRUPCIÓN
• TOIE: (TMR0 OVERFLOW INTERRUPT ENABLE), PERMISO DE
INTERRUPCIÓN POR DESBORDE DEL TMR0
1: HABILITA UNA INTERRUPCIÓN POR DESBORDE DEL TMR0
0: DESHABILITA ESTA INTERRUPCIÓN
• INTE: (INTERRUPT ENABLE RB0/INT), PERMISO DE INTERRUPCIÓN
POR ACTIVACIÓN DEL PIN RB0/INT
1: HABILITA LA INTERRUPCIÓN AL ACTIVARSE RB0/INT
0: DESHABILITA ESTA INTERRUPCIÓN
INTCON
• RBIE: (RB PORT CHANGE INTERRUPT ENABLE), PERMISO DE
INTERRUPCIÓN POR CAMBIO DE ESTADO EN RB7:RB4
1: HABILITA ESTA INTERRUPCIÓN
0: DESHABILITA ESTA INTERRUPCIÓN
• TOIF: (TMR0 OVERFLOW INTERRUPT FLAG), SEÑALIZADOR DE
DESBORDE DEL TMR0
1: HA OCURRIDO UN DESBORDE DEL TMR0
0: NO SE HA DESBORDADO EL TMR0
• INTF: (RB0/INT INTERRUPT FLAG), SEÑALIZADOR DE ACTIVACIÓN
DEL PIN RB0/INT
1: SE HA ACTIVADO RB0/INT
0: NO SE HA ACTIVADO RB0/INT
• RBIF: (RB PORT CHANGE INTERRUPT FLAG), SEÑALIZADOR DE
CAMBIO DE ESTADO EN RB7:RB4
1: PASA A 1 CUANDO CAMBIA EL ESTADO DE ALGUNA DE ESTAS 4
LÍNEAS
0: NO HA CAMBIADO EL ESTADO DE RB7: RB4
SALVANDO EL ENTORNO
SALVAR EL ENTORNO, SE REFIERE A MANTENER EL VALOR
EXACTO QUE TIENEN LOS REGISTROS DE TRABAJO STATUS Y W, Y
CUALQUIER OTRO DE IMPORTANCIA, QUE NO VAYA A SER
MODIFICADO DENTRO DE LA SUBRUTINA DE SERVICIO DE
INTERRUPCIÓN.

PARA SALVAR EL ENTORNO CUANDO OCURRE UNA


INTERRUPCIÓN SE RECOMIENDA SEGUIR LOS SIGUIENTES
PASOS:
• SALVAR A W Y A STATUS.
• ALMACENAR A W EN UN REGISTRO GENERAL LLAMADO
W_TEMP
• ALMACENAR A STATUS EN UN REGISTRO GENERAL
LLAMADO STATUS_TEMP
• SE EJECUTA LA RUTINA DE INTERRUPCIÓN (QUEDA
EXPRESADA PARA EFECTOS DEL EJEMPLO SIGUIENTE)
• RESTAURAMOS A STATUS
• RESTAURAMOS A W
NOTA: LOS REGISTROS GENERALES W_TEMP, STATUS_TEMP, DEBEN
SER DECLARADOS AL INICIO DEL PROGRAMA, PARA NO GENERAR
ERRORES.
SALVANDO EL ENTORNO
; **** RUTINA PARA SALVAR EL ENTORNO ****
PUSH MOVWF W_TEMP ; COPIAMOS W A ESTE REGISTRO TEMPORAL
SWAPF STATUS,0; INTERCAMBIAMOS STATUS Y LO GUARDAMOS EN W
MOVWF STATUS_TEMP ; SALVAMOS STATUS EN STATUS_TEMP
RUT_INT
;AQUÍ ESTARÁ LA RUTINA DE SERVICIO DE INTERRUPCIÓN
;
POP SWAPF STATUS_TEMP,0 ; INTERCAMBIAMOS NIBBLES EN EL REGISTRO
; STATUS_TEMP
MOVF STATUS ; MOVEMOS W AL REGISTRO STATUS,
RETORNANDO EL
; VALOR ORIGINAL
SWAPF W_TEMP,1; INTERCAMBIAMOS NIBBLES Y LO MANTENEMOS EN
; ESTE REGISTRO
SWAPF W_TEMP,0 ; INTERCAMBIAMOS NIBBLES Y LO
TRASLADAMOS A W
; RETORNANDO EL VALOR ORIGINAL QUE TENÍA
ANTES DE
; ENTRAR A LA RUTINA DE INTERRUPCIÓN
EJEMPLO. REALICEMOS UN PROGRAMA
COMPLETO QUE CONTENGA VARIAS
INTERRUPCIONES. SI LA CAUSA HA SIDO LA
ACTIVACIÓN DEL PIN RB0, SE DEBE
MOSTRAR UN DOS EN BINARIO EN EL
PUERTO A, SI HA SIDO UN CAMBIO DE
NIVEL EN RB4:RB7, SE DEBE MOSTRAR EL
UNO EN BINARIO EN EL PUERTO A Y SI SE
HA DESBORDADO EL TMR0, SE DEBE
MOSTRAR EL CUATRO EN BINARIO EN EL
PUERTO A.

Programa Principal
RSI
¿CUANDO UTILIZAR UNA
INTERRUPCIÓN?
UNA INTERRUPCIÓN ES MUY IMPORTANTE CUANDO
DESEAMOS REALIZAR UNA TAREA QUE NO DEPENDA DE UNA
EXPLORACIÓN CONSTANTE DEL PROGRAMA SOBRE LA MISMA.
TAMBIÉN CUANDO DESEAMOS QUE NUESTRO PROGRAMA
RESPONDA DE FORMA INMEDIATA Y AUTOMÁTICA A
DETERMINADOS EVENTOS.
EJEMPLO DEL USO DE INTERRUPCIÓN:
• EN LOS SISTEMAS DE CONTROL, CUANDO SE NECESITA UN
PULSADOR DE PARADA DE EMERGENCIA (PARE).
• EN UN DISEÑO, CUANDO SE REQUIERE QUE NUESTRO CIRCUITO
CUMPLA CON DETERMINADAS TAREAS, AL PULSARSE UNA TECLA
(LAMP TEST).
• EN EL MANEJO DE TECLADOS, SE RECOMIENDA SU USO, YA QUE SE
PUEDE METER AL MICROCONTROLADOR EN UN ESTADO DE
REPOSO, AHORRANDO ENERGÍA Y ESPERANDO A QUE SE PULSE UNA
TECLA PARA INICIAR UNA RUTINA DE SERVICIO (CLAVE).
• CUANDO ALMACENAMOS INFORMACIÓN EN LA EEPROM Y
DESEAMOS SER ADVERTIDOS DE QUE ÉSTA SE HA TERMINADO
(ALMACENAMIENTO).
• ETC...

También podría gustarte