Está en la página 1de 132

UNIVERSIDAD TECNOLÓGICA DEL PERÚ

FACULTAD DE INGENIERÍA ELECTRÓNICA Y MECATRÓNICA

CIRCUITOS DIGITALES II

MICROCONTROLADORES
DOCENTE: ING. Luis Pacheco Cribillero

2012- I
TEMA 1:
13 INTRODUCCIÓN A LOS MICROCONTROLADORES
Los microcontroladores se encuentran presentes en muchas tareas,
artefactos y procesos que realizamos y/o utilizamos a diario. Un
ejemplo de ello son: las antiguas tarjetas telefónicas, un reloj
despertador, una alarma de autos y casas, el Mouse de una computadora,
las lavadoras modernas, televisores, microondas, teléfonos celulares,
sistemas de control de acceso, controladores de temperatura, juguetes,
etc. Resumiendo están presentes en las siguientes áreas: industriales,
telecomunicaciones, automóviles, entretenimiento, seguridad, entre
otras.
            Los microcontroladores son una evolución de los
microprocesadores, nacidos en la década de los 70's, presentando en la
actualidad completas utilidades y aplicaciones, integrándose en un chip,
funciones electrónicas que antes eran posibles por circuitos externos
separados.
            Imaginémonos un circuito integrado que controla externamente
los siguientes circuitos: memoria RAM, EPROM, convertidor
Analógico/Digital, comunicación serial, módulos temporizadores, entre
otros. Esto en la actualidad se encuentra contenido en un solo circuito
integrado de 18, 28 y 40 pines, lo que potencia las posibilidades de
aplicaciones.
         ING. Luis Pacheco Cribillero 09/06/2020
INTRODUCCIÓN A LOS MICROCONTROLADORES
14

        Los basamentos teóricos y de operatividad son muy


similares a los controladores lógicos programables (PLC's)
presentes en innumerables procesos industriales, a las
computadoras.
Algunos autores definen al microcontrolador como una
microcomputadora. Con un microcontrolador se puede diseñar un
PLC, más no el caso contrario.
            Realizar un diseño con un microcontrolador es una tarea
gratificante, ya que nos permitirá poner en la práctica nuestras
destrezas y habilidades como diseñadores, y ver como realiza las
funciones que nosotros les habremos de imponerles.
      Al finalizar todos los temas de este curso, mediante una
sistemática enseñanza y metodología, estaremos en capacidad
para partir de una idea o enunciado, hasta simularlo y llevarlo a la
práctica; le encontraremos "El queso a la tostada"
            ¡¡¡ No es nada difícil, la práctica hace la excelencia !!!

ING. Luis Pacheco Cribillero 09/06/2020


ARQUITECTURA DE LOS MICROCONTROLADORES
15
Un microcontrolador es un computador dedicado, con limitaciones y menos
prestaciones. Posee básicamente, las mismas partes que un computador y
un controlador lógico programable. Entre ellas tenemos:
 CPU (Unidad Central de Procesamiento)
 ALU (Unidad Lógico - Aritmética)
 Periféricos

Lógica de
Control
ALU

Memoria Memoria
de Datos de Programa

Periféricos

ING. Luis Pacheco Cribillero 09/06/2020


ARQUITECTURA DE LOS MICROCONTROLADORES
Hemos comentado en el tema anterior que los microcontroladores son una
16 evolución más práctica de los microprocesadores, y esto se fundamenta en dos
aspectos importantes: los microcontroladores albergan en su interior varios
circuitos que los microprocesadores no tienen. Esto se conoce como arquitectura
cerrada (para los primeros) y arquitectura abierta (para los segundos) y la
arquitectura tradicional del procesador del microcontrolador (Tipo Harvard) y de
los microprocesadores (Tipo Von Neumann).

Bus de Direcciones

Bus de Datos
µP
Bus de Control

Memorias Controladores Controladores

Periféricos Periféricos

Microprocesador y su arquitectura abierta


ING. Luis Pacheco Cribillero 09/06/2020
Microcontrolador y su arquitectura cerrada

17

µC
Periféricos

Arquitectura tipo Von Neumann

Bus común de
direcciones

Memoria
CPU Instrucciones
8
+
Datos
Bus de datos e
instrucciones

ING. Luis Pacheco Cribillero 09/06/2020


18 ARQUITECTURA TIPO HARVARD
 Este tipo es la tendencia en las versiones modernas de microcontroladores. Se
caracterizan por separar en circuitos diferentes, las memorias de instrucción y
de datos, facilitando acceder a ambas simultáneamente. Permite la técnica de
segmentación.

Bus de Dirección Bus de Dirección


de Instrucciones  de Datos
Memoria
de
Memoria
Instrucciones
10 CPU 9 de
Datos
14 8
Bus de Instrucciones Bus de Datos

ING. Luis Pacheco Cribillero 09/06/2020


¿CÓMO ACTUARÍA UN MICROCONTROLADOR
19 EN UN PROCESO A CONTROLAR?
 Como lo haría cualquier sistema o circuito de control, sensando o tomando
información del proceso, realizando operaciones de comparación, o de acceso, o
de promedio, o de alarma, etc, y actuando sobre el mismo para corregir,
modificar, o mantener valores, según sean las exigencias del diseño. A "grosso
modo", lo podemos ilustrar formando parte de un lazo de control cerrado o uno
abierto:
Información

Proceso
Microcontrolador
que se desea controlar

Microcontrolador

Información
ING. Luis Pacheco Cribillero 09/06/2020
MICROCONTROLADORES PIC DE MICROCHIP
20
Existe una amplia gama de casas fabricantes de
microcontroladores, en el mercado: Motorola, Intel, Texas
Instrumens, Hitachi, Parallax, etc, en este curso, se han
adoptado los PIC de la gama o familia media de Microchip (PIC
16F8XX) por las siguientes prestaciones:
 ARQUITECTURA HARVARD

 ARQUITECTURA RISC
            La arquitectura RISC (Reduced Instructions Set Computer)
o Juego de Instrucciones Reducidas para Computadoras, posee
un total de 35 instrucciones en lenguaje de máquina o
ensamblador (assembler), con las que se pueden realizar
infinidades de programas para el microcontrolador, lo que
simplifica su uso. Los microprocesadores utilizan arquitectura
CISC (Complex Instructios Set Computers) y están por el orden
de 80 instrucciones.

ING. Luis Pacheco Cribillero 09/06/2020


MICROCONTROLADORES PIC DE MICROCHIP
21
 SEGMENTACIÓN (PIPELINE)
            Esta característica se conoce como paralelismo implícito, segmenta ó
separa las funciones del CPU, producto de la arquitectura Harvard,
permitiéndole realizar en etapas, instrucciones diferentes en cada una de
ellas y operar varias a la vez. Aumenta el rendimiento del CPU, lo que hace
que sus operaciones y procesamiento sean más rápidas que la gran mayoría
de los otros microcontroladores.

 INFORMACIÓN AMPLIAMENTE DIFUNDIDA Y DE FÁCIL ACCESO


            Quizás una de las principales prestaciones. Esta casa fabricante
proporciona libre acceso a las hojas técnicas (Data Sheet) de sus diferentes
componentes, así como software para programación, proyectos propuestos,
tutoriales, etc mediante su página Web: www.microchip.com

 COMPATIBILIDAD
             Existen productos de software y hardware, que no pertenecen a
Microchip, pero que son totalmente compatibles con sus productos. Podemos
"bajar" programas adicionales gratis de Internet y realizar circuitos para
programarlos a un bajo coste, exitosamente.
ING. Luis Pacheco Cribillero 09/06/2020
CARACTERÍSTICAS GENERALES DE LOS
MICROCONTROLADORES
22
ARQUITECTURA INTERNA DE UN MICROCONTROLADOR PIC
    Se dividen en tres grandes áreas:
1) Núcleo
Estas son las características básicas para la operatividad del microcontrolador. Están
constituidas por:
* Oscilador * Reset * CPU * ALU
* Memoria no volátil para programa (ROM)
* Memoria de lecto-escritura para datos (RAM)
* Memoria programable para datos (EEPROM/FLASH)
* Instrucciones
2) Periféricos
Es la parte que los diferencia con los microprocesadores. Permite la conexión con el
"mundo exterior". Destacan:
 Entradas/Salidas de utilidad general
 Módulo de captura, comparación y PWM (1)
 Comunicación serial (1)
 Comunicación paralela (1)
 Comparadores (1)
 Convertidores Analógico/Digital (1)
ING. Luis Pacheco Cribillero 09/06/2020
23 CARACTERÍSTICAS GENERALES DE LOS
MICROCONTROLADORES

3) Características Especiales ó Recursos Auxiliares


    Contribuyen a reducir el costo del sistema, incrementan la
flexibilidad de diseño y brindan mayor fiabilidad. Entre ellas tenemos:
 Bits de configuración
 Reset de encendido
 Temporizador WATCHDOG
 Modo reposo ó de bajo consumo
 Oscilador RC interno
 Programación serie en el propio circuito
 Interrupciones
 Temporizadores (Timer's)
 (1) Algunas de estas características aplican para los PIC16F87X

ING. Luis Pacheco Cribillero 09/06/2020


Características Valor
24 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
ING. Luis Pacheco Cribillero 09/06/2020
Encapsulado DIP plástico 18 pines
DIAGRAMA INTERNO DEL PIC 16F84
25

ING. Luis Pacheco Cribillero 09/06/2020


HARDWARE PIC16F84
26

ING. Luis Pacheco Cribillero 09/06/2020


DESCRIPCIÓN DE LOS PINES DEL PIC16F84

27 Pin Descripción/Función
VDD Voltaje de alimentación. Se aplican 5 VDC
VSS Tierra
Entrada del circuito oscilador externo, que proporciona la
FOSC1/CLKIN
frecuencia de trabajo
FOSC2/CLKOUT Salida auxiliar del circuito oscilador
Se activa con nivel bajo, proporcionando una
reinicialización del sistema (reset). Cumple con una
MCLR/VPP
función adicional (VPP) que recibe la alimentación del
voltaje de programación, al momento de grabar al PIC.
5 líneas de Entradas/Salidas digitales del Puerto A.
RA4 tiene una función adicional: Entrada de un reloj
RA4:RA0
externo asíncrono ó síncrono, cuando el
microcontrolador trabaja como contador de eventos.
8 líneas de Entradas/Salidas digitales del Puerto B
ING. Luis Pacheco Cribillero 09/06/2020
RB7:RB0 RB0 tiene una función adicional: Provoca una interrupción
TIPOS DE OSCILADORES
 HS: (High Speed Crystall Resonador): Alta velocidad de 20 MHz a 4 MHz.
28
 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 09/06/2020


FRECUENCIA DE FUNCIONAMIENTO
29

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)
 Q4 busca el código de la instrucción en la memoria del programa
y se carga en el registro de instrucciones
 Q2 - Q3 decodifican y ejecutan la instrucción respectiva
  

ING. Luis Pacheco Cribillero 09/06/2020


FRECUENCIA DE FUNCIONAMIENTO
30

ING. Luis Pacheco Cribillero 09/06/2020


CÁLCULOS DE TIEMPOS
31

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), por el
oscilador elegido, hallamos el período.
3.  Un ciclo de instrucción se ejecuta en 4 períodos.
            Tciclo de instrucción: 4 * TOSC
4.   Multiplicamos la cantidad de instrucciones por lo que tarda en ejecutarse una de
ellas, cuya información nos la brinda el paso anterior. Las instrucciones de salto se
ejecutan en dos ciclos, por lo tanto, si tenemos instrucciones de salto, éstas hacen
que se multiplique el ciclo de instrucción por dos.
·         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.        Para determinar cuánto dura un programa en ejecutarse, sumamos la duración
de las instrucciones normales más la duración de las instrucciones de salto.
            Total de duración del programa: DTIN + DTIS
 

ING. Luis Pacheco Cribillero 09/06/2020


CÁLCULOS DE TIEMPOS
32 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 μs
2. Hallamos el Ciclo de Instrucción:
          Tciclo de instrucción= 4*0.25 μs = 1 μs.
3. Duración del total de instrucciones normales (DTIN):
          DTIN: 250 * 1 μs = 250 μs
4. Duración del total de instrucciones de salto (DTIS):
          DTIS: 50 * 1 μs * 2 = 100 μs
5. Hallamos el total de duración del programa:
        Total: DTIN + DTIS = 250 μs + 100 μs
        Total: 350 μs
   Por lo tanto nuestro programa tarda en ejecutarse, alrededor de 350 μs.
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

ING. Luis Pacheco Cribillero 09/06/2020


33 CIRCUITOS DE RESET

ING. Luis Pacheco Cribillero 09/06/2020


CIRCUITOS DE APOYO (INTRODUCEN
34 DATOS AL MICROCONTROLADOR)
Pulsadores e interruptores

ING. Luis Pacheco Cribillero 09/06/2020


CIRCUITOS DE APOYO (SACAN DATOS
35 DEL MICROCONTROLADOR)
Visualización

Con Display

ING. Luis Pacheco Cribillero 09/06/2020


CIRCUITOS DE APOYO (SACAN DATOS DEL MICROCONTROLADOR)

36

Con Relé

Con optoacoplador

ING. Luis Pacheco Cribillero 09/06/2020


TEMA 2:

REGISTROS, INSTRUCCIONES Y
BANCOS DE MEMORIA
ESTRUCTURA DE DATOS
38  BIT: Unidad mínima de
x
información

 NIBBLE: Grupo de 4 bits x x x x

x x x x x x x x
 BYTE: Grupo de 8 bits

BYTE ALTO BYTE BAJO


 Word: Grupo de 2 BYTES

(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

ING. Luis Pacheco Cribillero 09/06/2020


ALGUNOS TIPS PARA REPASAR Y RECORDAR
39
 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)
ING. Luis Pacheco Cribillero 09/06/2020
SISTEMAS DE NUMERACIÓN
40 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
ING. Luis Pacheco Cribillero E 1110 09/06/2020

15 F 1111
FORMATO DE SISTEMAS DE NUMERACIÓN
ADMITIDOS POR EL MICROCONTROLADOR
41
Tipo de Sistema Formato Sigla Significado
Registro. Puede ser
Decimal D’126’ cualquiera que el
.126 f (File)
programador desee dentro
del rango permitido.
Binario B’10011011’
k Constante. Valor fijo.

Hexadecimal H’AE’ Registro de trabajo


w (work)
AEH principal.
0xAE Destino del Registro.
Si d vale 1, el resultado
se guardará en el Registro
que el programador haya
d (destiny)
escogido.
Si d vale 0, el resultado
ING. Luis Pacheco Cribillero
se guardará en el Registro 09/06/2020
de trabajo principal "w"
REGISTROS Y BANCOS
42

ING. Luis Pacheco Cribillero 09/06/2020


MEMORIA RAM
43 DE REGISTROS

ING. Luis Pacheco Cribillero 09/06/2020


ACCEDIENDO A LOS BANCOS DE REGISTROS

44

ING. Luis Pacheco Cribillero 09/06/2020


DIRECTIVA EQU
45  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
ING. Luis Pacheco Cribillero 09/06/2020
ESTRUCTURA DE UN PROGRAMA
46

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
Registros, declaraciones de variables y
Datos, constantes,
Constantes.
b) Configuración de registros especiales:
Registro OPTION, INTCON, TMR0,
org
puertos A y B, EECON, STATUS.
Cuerpo del b) Cuerpo del programa: Aquí están
Programa contenidas todas las instrucciones
relacionadas a la ejecución de un
end programa bajo un diseño individual,
realizado por el programador.

ING. Luis Pacheco Cribillero 09/06/2020


ESTRUCTURA DE UN PROGRAMA
47 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.
ING. Luis Pacheco Cribillero 09/06/2020
ESTRUCTURA DE UN PROGRAMA
48

1ra Columna 2da Columna3ra 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
ING. Luis Pacheco Cribillero 09/06/2020
49 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.

ING. Luis Pacheco Cribillero 09/06/2020


¿Cuál se entiende mejor? Con recomendaciones

List P=16F84 ;Tipo de procesador


50 Sin recomendaciones STATUS equ 03H ; Zona de declaraciones
PORTA equ 05H
PORTB equ 06H
List= 16F84 TRISA equ 85H
org 00H TRISB equ 86H
goto inicio W equ 00H
inicio Bsf 03H,5 F equ 01H
movlw 1FH org 00H
movwf 85H goto INICIO
movlw 00H INICIObsf STATUS,5 ;Se pasa a banco1
movwf 86H movlw 1FH
bcf 03H,5 movwf TRISA ; Se configura puerto A
movlw b’11110000’ movlw 00H
movwf 06H movwf TRISB ; Se configura puerto B
movf 05H,0 bcf SATUS,5 ; Se regresa al banco 0
ExploPA Btfsc 05H,3 movlw b’11110000’
goto ExploPA movwf PORTB ; Se escribe valor
goto INVPB movf PORTA,W
INVPB comf 06H,1 ExploPABtfsc PORTA,3 ; RA3 es cero?
End goto ExploPA
goto INVPB
INVPB comf PORTB,1 ; Se activa RB1
End

ING. Luis Pacheco Cribillero 09/06/2020


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
51 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.
ING. Luis Pacheco Cribillero 09/06/2020
INSTRUCCIONES ORIENTADAS A REGISTROS
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
52 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 Ninguno
F, 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)
ING. Luis Pacheco Cribillero C,DC,Z 09/06/2020

swapf f,d Intercambia los nibbles de f a destino Ninguno


INSTRUCCIONES ORIENTADAS A BIT
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
53
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
ING. Luis Pacheco Cribillero
Z 09/06/2020

sublw k K – (W) a W C, DC, Z


Diferencias y uso de “call” y “goto”
 Ambas instrucciones rompen con la secuencia normal del programa, al
54 alterar el contenido del contador de programa (PC). (Pág. 150. Angulo).
 “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”, se puede presentar un error de lógica en la ejecución del
programa, algo similar a no dejar migajas de pan para recordar el camino
de retorno.
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).

ING. Luis Pacheco Cribillero 09/06/2020


TEMA 3. HERRAMIENTAS
DE PROGRAMACIÓN
INSTRUCCIONES DE
MANIPULACIÓN
56
DE BITS
 BCF F,B (Poner a Cero al Bit B del registro F)
 Ejemplo: bcf Datox,5
 Datox= E4H

 BSF F,B (Poner a Uno al Bit B del registro F)


 Ejemplo: bsf Datox,3
 Datox= C8H

ING. Luis Pacheco Cribillero 09/06/2020


57 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

ING. Luis Pacheco Cribillero 09/06/2020


STATUS
7      0     
6      (L/E) 5      (L/E) 4      (L) 3      (L) 2      (L/E) 1      (L/E)
(L/E) (L/E)
58
IRP
C. Bit de acarreoRP1 RP0
en el bit MSB TO PD Z DC C
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
ING. Luis Pacheco Cribillero 09/06/2020
RESULTADO DE OPERACIONES
59 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
ING. Luis Pacheco Cribillero 09/06/2020
60 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

ING. Luis Pacheco Cribillero 09/06/2020


61 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
ING. Luis Pacheco Cribillero 09/06/2020
SELECCIONANDO LOS BANCOS DE REGISTROS
 El PIC 16F84 posee
62 solamente dos (2) bancos de
Registros, por lo que para
seleccionar el banco deseado,
basta con manipular el bit
RP0 del registro STATUS.
 Si RP0= 1, se ha seleccionado
el banco 1
 Si RPO= 0, se ha
seleccionado 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
Así de sencillo es seleccionar
los bancos de registros.

ING. Luis Pacheco Cribillero 09/06/2020


CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
63 1. Se selecciona el banco 1
• Aquí se encuentran los registros que manipulan mediante software
a los circuitos triestados que 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.
• Si coloco un uno (1) en un bit asociado a un puerto (RA0, RA1, RB5,
RB7,etc), éste se comportará como una entrada y solamente
podremos leer por esta entrada.
• Si coloco un cero (0) en un bit asociado a un puerto, éste se
comportará como una salida y solamente podremos escribir por
esta entrada.
• Podemos hacer analogía de la siguiente forma:
            1 = In     = Entrada = Solo lectura
            0 = Out  = Salida   = Solo escritura

ING. Luis Pacheco Cribillero 09/06/2020


CONFIGURANDO UN PUERTO
64
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.
• Nota: Escribir sobre un puerto (o pin) configurado como entrada,
no tiene ningún efecto. Si se desea escribir sobre él, es necesario
que el mismo sea habilitado como salida.

ING. Luis Pacheco Cribillero 09/06/2020


CONFIGURANDO UN PUERTO COMO ENTRADA/SALIDA (POR BYTE)

65 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

ING. Luis Pacheco Cribillero 09/06/2020


CONFIGURANDO UN PUERTO COMO
66 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.

ING. Luis Pacheco Cribillero 09/06/2020


ESCRIBIR Y LEER SOBRE UN PUERTO
67
 Para configurarlos como entradas y/o salidas, debemos de estar en el banco 1. Una vez
configurados, para poder leer y/o escribir sobre estos, debemos de cambiarnos al banco 0.
 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   ; A esta parte se le conoce como zona de
; etiquetas o declaración de etiquetas.
            PuertoA          equ            05H; También se puede usar la directiva
; INCLUDE
            PuertoB          equ            06H ; Y se obvian estas declaraciones
            bsf                STATUS,5        ; Hemos cambiado 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, según sea el caso.

ING. Luis Pacheco Cribillero 09/06/2020


REGISTROS ASOCIADOS A LOS PUERTOS
68

 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, como
cualquier otro registro de propósito general, sólo que están
directamente vinculados a los puertos del microcontrolador.
 Por lo tanto su Lectura/Escritura NO difiere de la de cualquier
otro registro

ING. Luis Pacheco Cribillero 09/06/2020


LEER Y/O ESCRIBIR EL UN VALOR
69 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
ING. Luis Pacheco Cribillero 09/06/2020
LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO

70  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

ING. Luis Pacheco Cribillero 09/06/2020


LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO
71
 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
ING. Luis Pacheco Cribillero 09/06/2020
72 TOMA DE DECISIONES

 Una Tarea.
La condición puede venir
Condición NO internamente como
Proceso A
X=1? externamente.

SI

• Interna • Externa
btfss STATUS,0 ; C=1? btfss PORTA,0 ; RA0=1?
goto ProcesoA goto ProcesoA
goto SIGUE goto SIGUE

ING. Luis Pacheco Cribillero 09/06/2020


73 TOMA DE DECISIONES

 Dos Tareas.
NO La condición puede venir
Condición internamente como
Proceso A
X=1? externamente.

SI

Proceso B

• Interna • Externa
btfss STATUS,0 ; C=1? btfss PORTA,0 ; RA0=1?
goto ProcesoA goto ProcesoA
goto ProcesoB goto ProcesoB
ING. Luis Pacheco Cribillero 09/06/2020
TOMA DE DECISIONES. EJEMPLO
74  Dado el siguiente circuito, Active el LED
ubicado en RB0 si RA0, vale 0 y en caso
contrario, active el LED ubicado en RB1.

ING. Luis Pacheco Cribillero 09/06/2020


75 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 ------
------
------
ING. Luis Pacheco Cribillero 09/06/2020
76 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

ING. Luis Pacheco Cribillero 09/06/2020


77 TOMA DE DECISIONES

Condición NO Condición NO
Proceso A
X=1? Y=1?

SI SI

Proceso B

NO
Condición
Proceso C
Y=1?  Multitareas.
Dos condiciones permiten
elegir entre uno a cuatro
SI procesos distintos.

Proceso D
ING. Luis Pacheco Cribillero 09/06/2020
¿Cómo pasar del diagrama de flujo al programa?
78  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
ING. Luis Pacheco Cribillero 09/06/2020
TEMA 3. RUTINAS
INTERMEDIAS
SUBRUTINA
80 MIENTRAS SE
PRESIONA
UNA TECLA TECLA NO
PRESIONADA?

SI

DELAY 10 ms

PROCESO A

ING. Luis Pacheco Cribillero 09/06/2020


PRESIONAR TECLA Y
81 ESPERAR A QUE SE
SUELTE PARA Tecla NO
Presionada?
EJECUTAR SUBRUTINA
SI

Retardo 10 ms

Tecla NO
Soltada?

SI

Retardo 10 ms

Proceso A

ING. Luis Pacheco Cribillero 09/06/2020


ENMASCARAMIENTO
82
Este proceso es muy utilizado cuando se desea segmentar ó separar un
registro en dos nibbles (4 bits) y luego en registros de 8 bits. La
instrucción ideal para este es la “and”

ING. Luis Pacheco Cribillero 09/06/2020


ENMASCARAMIENTO
83 DatoA equ 12H
DatoL equ 23H
DatoH equ 4EH

movlw 4CH; Cargamos a w con 4CH


movwf DatoA ; Transferimos 4CH a w
movlw 0FH
andwf DatoA,0 ; Neutralizamos el nibble
; más significativo de DatoA y lo
; guardamos en w para no alterar el
; contenido de DatoA
movwf DatoL ; Lo guardamos en éste
movlw F0H
andwf DatoA,0 ; Neutralizamos el nibble menos ; significativo de DatoA
movwf DatoH
swapf DatoH ; Intercambiamos nibbles
; en DatoH para ordenarlo.

ING. Luis Pacheco Cribillero 09/06/2020


84 ENMASCARAMIENTO

 También se puede neutralizar un bit o varios bits, selectivamente,


según sea nuestra conveniencia.

ING. Luis Pacheco Cribillero 09/06/2020


CALL K
85
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

ING. Luis Pacheco Cribillero 09/06/2020


86 CALL K

 El llamado a una Subrutina K, desvía el flujo normal del programa, hacia


donde se encuentra la etiqueta K.
 El valor del contador del programa (PC) es guardado en la pila
(STACK), que es una memoria tipo FIFO (First In First Out).
 La familia de la gama media (PIC16FXXX) posee 8 niveles de STACK.
Si se sobrepasa de este valor, se pierde la información del contador de
programa y el microcontrolador no puede determinar el retorno
correcto.
 Esto ocurre si existen 8 subrutinas anidadas (Subrutinas dentro de
subrutinas).
 Ciertamente, este problema se puede presentar en programas
medianos o grandes, pero debe tenerse en cuenta al momento de la
programación y elaboración de un diseño.

ING. Luis Pacheco Cribillero 09/06/2020


87 CALL K

PILA (STACK) (PCL)


K (03H)
L (05H)
M (09H)
N (1FH)
O (2AH)
P (2EH)
Q (30H)
R (3CH)

T (40H)

ING. Luis Pacheco Cribillero 09/06/2020


TEMPORIZANDO SIN EL
USO DEL TMR0
88  La temporización sin el uso
del temporizador TMR0 se
basa en “hacer perder el
tiempo” al microcontrolador
mientras las ejecuta en
lazos o bucles, logrando un
retardo (delay) que puede
variar según sean las
necesidades del programa.

 Con estos retardos


inducidos, podemos generar
tiempos para funciones
específicas, como la de
eliminar rebotes de un
pulsador o interruptor por
software, lo que nos permite
simplificar el hardware que
esto acarrea en nuestro
circuito aplicado al
microcontrolador, dejando el
uso del temporizador TMR0,
para otros usos.
ING. Luis Pacheco Cribillero 09/06/2020
EJEMPLO DE UN RETARDO POR SOFTWARE SIN TMR0
RETARDO movlw d’16’ ; (1 ciclo)
89 movwf REG2 ; Cargamos REG1 con 16 (1 ciclo)
DOSmovlw d’14’ ; (1 ciclo)
movwf REG1 ; Cargamos REG2 con 14 (1 ciclo)
UNO decfsz REG1,1 ; Dec REG2 (13 veces*1 ciclo + 1*2 ciclos)
goto UNO ; Se mantiene dec. REG2 (2 ciclos)
TRES decfsz REG2,1 ; Dec REG1 (16 veces * 1ciclo)
goto DOS; Va a recargar REG2 (2 ciclos)
return ; (2 ciclos)
 La subrutina UNO, tarda 3 ciclos que se repite 13 veces hasta que REG2 se hace cero y salta
(2 ciclos)= (3*13 ciclos)= 39 ciclos.
 La subrutina DOS consume 2 ciclos + 3 ciclos que consume la subrutina TRES= 5 ciclos, y
ambas se repiten al igual que la UNO, por 16 veces = [39 ciclos (de la rutina UNO)+ 5 ciclos
(de las rutinas DOS y TRES)*16 ]= 704 ciclos
 Pero, cada vez que se salta de la subrutina UNO a la TRES se consumen 2 ciclos y esto se
repite por 16 veces: 2 ciclos *16 = 32 ciclos
 Adicional a esto, al iniciarse la rutina de retardo, han transcurrido 4 ciclos (hasta que
empieza la subrutina UNO)
 En total= 704 ciclos + 32 ciclos + 4 ciclos + 2 ciclos (al ejecutarse “return”) = 742 ciclos.

ING. Luis Pacheco Cribillero 09/06/2020


RUTINA DE CONVERSIÓN BINARIO
90 A BCD (8 BITS)
INICIO

DATOX→W RESP= RESP+100 RESP= RESP+10

W→RESP RESP= RESP-10 RESP= RESP-1

U=0
D=0 SI SI
C=0 C=0? C=0? MOSTRAR EN
DISPLAY
RESP= RESP-100
NO NO
FIN
incf D,1 incf U,1
SI
C=0?

NO

incf C,1
ING. Luis Pacheco Cribillero 09/06/2020
RUTINA DE CONVERSIÓN DE
BCD A BINARIO (8 BITS)
91
INICIO

DEC=DEC-1 UNI=UNI-1
UNI=X
DEC=Y
CEN=Z
SI SI
C=0? C=0? RETURN
DAT=0
NO NO
CEN=CEN-1

DAT=DAT+10 DAT=DAT+1
SI
C=0?

NO

DAT=DAT+100
ING. Luis Pacheco Cribillero 09/06/2020
TABLAS
92

 Las tablas nos permiten extraer valores para ser utilizados en otras
tareas, tales como la visualización de datos, linealización de valores,
conversión de códigos, etc.
 Su funcionamiento se basa en la manipulación del contador de
programa (PC) mediante la suma de un puntero de tabla (registro) y la
parte baja del contador de programa (PCL).
 Para un rango máximo de 256 valores, se manipula directamente el PCL.
En caso de valores superiores, se debe manipular adicionalmente el
PCLATH, que amplia la capacidad de datos en una tabla.
 La instrucción RETLW K, está muy asociada a las tablas, ya que cuando
se llama a una subrutina “tabla”, esta instrucción extrae el valor de la
misma previamente seleccionada por el puntero de tabla.

ING. Luis Pacheco Cribillero 09/06/2020


TABLAS
 Normalmente, cuando se llama a una subrutina “tabla”,
93 previamente se carga el valor del puntero.
 Dentro de la subrutina “tabla”, el puntero se suma al PCL,
“saltando” al valor correspondiente indicado por el puntero.
 Veamos el siguiente programa:

TABLA addwf PCL,1 Puntero + PCL


movf CONTADOR,0
retlw ‘Valor0’
call TABLA
retlw ‘Valor1’
movwf PORTB
retlw ‘Valor2’



retlw ‘ValorN’

ING. Luis Pacheco Cribillero 09/06/2020


VARIAS OPCIONES

94
TECLA1 NO TECLA2 NO
Proceso A
ACT? ACT?

SI SI
Proceso B

TECLA2 SI
Proceso C
ACT?

NO

NO TECLA3 SI
Proceso D
ACT?

ING. Luis Pacheco Cribillero 09/06/2020


95 MULTIPLEXACIÓN DE DISPLAYS

 La multiplexación de displays, consiste en la activación


secuencial de varios displays. Se activa un display y se
desactiva el resto, mientras el dato que se desea mostrar es
colocado inmediatamente por el puerto correspondiente.
 Seguidamente, se desactiva este display, se activa el display
siguiente y se desactivan los restantes y se coloca el dato
correspondiente. Y así sucesivamente.
 Se recomienda que entre activación y desactivación de displays
se utilice un tiempo menor a 5 ms.
 El efecto óptico percibido por el ojo humano es el de una cifra
fija.
ING. Luis Pacheco Cribillero 09/06/2020
96 MULTIPLEXACIÓN DE DISPLAYS
 Paso a paso: (Asumamos que tenemos tres displays)
1) Se activa display de UNIDAD
2) Se desactiva el resto de los displays
3) Se muestra el dato de UNIDAD

4) Se desactiva los displays de UNIDAD y


CENTENA
5) Se activa el display de DECENA
6) Se muestra el dato de DECENA

7) Se desactivan los displays de UNIDAD y DECENA


8) Se activa el display de CENTENA
9) Se muestra el dato de CENTENA

ING. Luis Pacheco Cribillero 09/06/2020


97 MULTIPLEXACIÓN DE DISPLAYS

MOSTRAR

DIG1→W
W→PORTA

HABI DISP1

RETARDO 1ms

DIG2→W
W→PORTA

HABI DISP2

RETARDO 1ms

RETURN
ING. Luis Pacheco Cribillero 09/06/2020
ESTRUCTURA DE CONTADORES
98 INICIO

CONTADOR=0

MOSTRAR
MOSTRAR 1

NO
INCF CONTADOR,1 CONTADOR
=9?

SI
CONTADOR=0

1 MOSTRAR

CONTADOR ASCENDENTE SIMPLE

ING. Luis Pacheco Cribillero 09/06/2020


INICIO

99 CONTADOR ASCENDENTE UNI=0


COMPLEJO
DEC=0

MOSTRAR
1

NO
RA0=1?

SI
MOSTRAR
RETARDO
NO MOSTRAR
INCF DEC,1
DEC=9? NO
INCF UNI,1 UNI=9?
SI

1 MOSTRAR DEC=0 UNI=0 SI


ING. Luis Pacheco Cribillero 09/06/2020
ESTRUCTURA DE CONTADORES
100 INICIO

CONTADOR=0

MOSTRAR
MOSTRAR 1

NO
DECF CONTADOR,1 CONTADOR
=0?

SI
CONTADOR=9

1 MOSTRAR

CONTADOR DESCENDENTE SIMPLE

ING. Luis Pacheco Cribillero 09/06/2020


INICIO

101 UNI=0

CONTADOR DESCENDENTE COMPLEJO DEC=0

MOSTRAR
1

NO
RA0=1?

SI
MOSTRAR
RETARDO
NO MOSTRAR
DECF DEC,1
DEC=0? NO
DECF UNI,1 UNI=0?
SI

1 MOSTRAR DEC=9 UNI=9 SI


ING. Luis Pacheco Cribillero 09/06/2020
102 DE LA IDEA AL PROGRAMA (PARTE I)

1. Delimitar / Diseñar el Hardware


2. Diagrama de Flujo para establecer el funcionamiento
lógico
3. Realizar programa en lenguaje ensamblador.
 Ejercicios propuestos:
 Leer el valor del puerto A y visualizarlo por el Puerto B
 Taladro / Torno
 Manipular Display
 Estacionamiento Local Comercial
 Doble interruptor
ING. Luis Pacheco Cribillero 09/06/2020
TEMA 4. TIMER 0
REGISTROS ASOCIADOS AL
104 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
ING. Luis Pacheco Cribillero 09/06/2020
REGISTRO OPTION (Dirección 81H)
105

 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.
ING. Luis Pacheco Cribillero 09/06/2020
EJEMPLOS DE CONFIGURACIÓN
 Configure al PIC16F84 para que el temporizador TMR0, trabaje con los
106 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’xx11xxxx1’
movwf OPTION
movwf OPTION
ING. Luis Pacheco Cribillero 09/06/2020
TEMPORIZADOR TMR0
107

 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 y se deben de cumplir ciertos requisitos para que el reloj externo
pueda ser sincronizado con el reloj interno (TOSC). Además existe un
retardo en el incremento real del TMR0, después de la sincronización. El
bit TOCS= 1. Se debe seleccionar el tipo de flanco que producirá el
incremento del TMR0 ( TOSE = 1 ó 0).

ING. Luis Pacheco Cribillero 09/06/2020


¿QUÉ ES EL PRESCALER?
 Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos, como
se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc., genera una
108 nueva señal de menor frecuencia a la salida, que será la señal de reloj de entrada al
registro TMR0.
 “Ralentiza” señales de entrada demasiado rápidas para nuestros propósitos.
 También existe un postescaler, asociado al perro guardián WDT (Watch Dog Timer)
del microcontrolador, pero en este caso recibe el nombre de postcaler ya que se usa a
la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al WDT. El
preescaler es transparente para el programador, no se puede leer ni escribir sobre
él, pero se puede seleccionar por software, como ya se ha dicho, mediante el registro
OPTION.
 Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una
secuencia de instrucciones específicas cuando se cambia la asignación del prescaler
del TMR0 al WDT. Esta secuencia debe ser seguida, aún cuando el WDT esté inactivo.

ING. Luis Pacheco Cribillero 09/06/2020


¿CÓMO CUENTA EL TMR0?
109
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
ING. Luis Pacheco Cribillero 09/06/2020
CÁLCULOS CON EL TMR0
110
 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.

ING. Luis Pacheco Cribillero 09/06/2020


OTROS EJEMPLOS
111
 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: Temporizac ión 10,24ms
(256 – N ) = =
10 = 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

Temporizac ión 1.5ms


(256 – N10) = =
4  TOSC  Rgodivisor 4 100ns  RgoDivisor

N10 = 256 - (3750/RgoDivisor)


ING. Luis Pacheco Cribillero 09/06/2020
CONTINUACIÓN EJEMPLO ANTERIOR
112

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.

ING. Luis Pacheco Cribillero 09/06/2020


 Ejemplo. Diga ¿cuánto es la máxima temporización que se puede
113 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.

ING. Luis Pacheco Cribillero 09/06/2020


USO DE REGISTRO AUXILIAR
Pasos:
114
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

ING. Luis Pacheco Cribillero 09/06/2020


CONTINUACIÓN DEL EJEMPLO ANTERIOR
115
 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
4.992Hz,
ms redondeando, tomamos este múltiplo:

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
ING. Luis Pacheco Cribillero 09/06/2020
DE LOS CÁLCULOS A LA PROGRAMACIÓN
116
 Realicemos un ejercicio completo: Realice un programa que
permita encender y apagar un led cada 15 ms, mediante el
timer0. Utilice un oscilador XT.

ING. Luis Pacheco Cribillero 09/06/2020


DE LOS CÁLCULOS A LA PROGRAMACIÓN

117

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.
ING. Luis Pacheco Cribillero 09/06/2020
LIST P=16F84A
INCLUDE P16F84A.INC
ORG 00H
118 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

ING. Luis Pacheco Cribillero 09/06/2020


Ejercicio. Realice un programa que permita
encender y apagar un led cada un segundo.
Subrutina
Mediante Timer0 y con un oscilador XT.

119

Programa Principal
ING. Luis Pacheco Cribillero 09/06/2020
120

ING. Luis Pacheco Cribillero 09/06/2020


121 ¿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…

ING. Luis Pacheco Cribillero 09/06/2020


TEMA 5.
INTERRUPCIONES
INTERRUPCIONES
123  “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 nivel activo en una patilla del
microcontrolador, o bien, 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.
ING. Luis Pacheco Cribillero 09/06/2020
DIAGRAMA DE FLUJO DURANTE UNA
124 INTERRUPCIÓN
Programa normal
Instrucción 1 Rutina de Servicio de Interrupción
Instrucción 2 Instrucción 1
Instrucción 3 Instrucción 2
… …




RETFIE
Instrucción 24
Instrucción 25

Nota: Una Rutina de Servicio

de Interrupción puede ser
Instrucción N igual de extensa e incluso
Fin de programa más que el mismo programa
principal.
ING. Luis Pacheco Cribillero 09/06/2020
125

DIAGRAMA DE
FLUJO RSI

ING. Luis Pacheco Cribillero 09/06/2020


CAUSAS DE INTERRUPCIÓN
126
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:

ING. Luis Pacheco Cribillero 09/06/2020


INTCON
127
 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

ING. Luis Pacheco Cribillero 09/06/2020


128 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
ING. Luis Pacheco Cribillero 09/06/2020
SALVANDO EL ENTORNO
129
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.
ING. Luis Pacheco Cribillero 09/06/2020
130 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
ING. Luis Pacheco Cribillero 09/06/2020
Ejemplo. Realicemos un programa completo
que contenga varias interrupciones. Si la
causa ha sido la activación del pin RB0, se
131 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
ING. Luis Pacheco Cribillero
RSI 09/06/2020
¿CUANDO UTILIZAR UNA
132
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...
ING. Luis Pacheco Cribillero 09/06/2020

También podría gustarte