Sie sind auf Seite 1von 126

UNIVERSIDAD TECNOLGICA DEL PER

FACULTAD DE INGENIERA ELECTRNICA Y MECATRNICA

CIRCUITOS DIGITALES II

MICROCONTROLADORES
DOCENTE: ING. Luis Pacheco Cribillero

2012- I

TEMA 1:
INTRODUCCIN 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 telefnicas, un reloj
despertador, una alarma de autos y casas, el Mouse de una computadora,
las lavadoras modernas, televisores, microondas, telfonos celulares,
sistemas de control de acceso, controladores de temperatura, juguetes,
etc. Resumiendo estn presentes en las siguientes reas: industriales,
telecomunicaciones, automviles, entretenimiento, seguridad, entre
otras.

Los
microcontroladores
son
una
evolucin
de
los
microprocesadores, nacidos en la dcada de los 70's, presentando en la
actualidad completas utilidades y aplicaciones, integrndose en un chip,
funciones electrnicas que antes eran posibles por circuitos externos
separados.
Imaginmonos un circuito integrado que controla externamente los
siguientes
circuitos:
memoria
RAM,
EPROM,
convertidor
Analgico/Digital, comunicacin serial, mdulos 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.

09/01/16

ING. Luis Pacheco Cribillero

INTRODUCCIN A LOS MICROCONTROLADORES


Los basamentos tericos y de operatividad son muy
similares a los controladores lgicos programables (PLC's)
presentes en innumerables procesos industriales, a las
computadoras.
Algunos autores definen al microcontrolador como una
microcomputadora. Con un microcontrolador se puede disear un
PLC, ms no el caso contrario.
Realizar un diseo con un microcontrolador es una tarea
gratificante, ya que nos permitir poner en la prctica nuestras
destrezas y habilidades como diseadores, y ver como realiza las
funciones que nosotros les habremos de imponerles.

Al finalizar todos los temas de este curso, mediante


una sistemtica enseanza y metodologa, estaremos en
capacidad para partir de una idea o enunciado, hasta simularlo y
llevarlo a la prctica; le encontraremos "El queso a la tostada"
No es nada difcil, la prctica hace la excelencia !!!

09/01/16

ING. Luis Pacheco Cribillero

ARQUITECTURA DE LOS MICROCONTROLADORES


Un microcontrolador es un computador dedicado, con limitaciones y
menos prestaciones. Posee bsicamente, las mismas partes que un
computador y un controlador lgico programable. Entre ellas tenemos:
CPU (Unidad Central de Procesamiento)
ALU (Unidad Lgico - Aritmtica)
Perifricos

Lgica de
Control
Memoria
de Datos

ALU
Memoria
de Programa

Perifricos

09/01/16

ING. Luis Pacheco Cribillero

ARQUITECTURA DE LOS MICROCONTROLADORES


Hemos comentado en el tema anterior que los microcontroladores son una
evolucin ms prctica 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

Bus de Control

Memorias

Controladores

Controladores

Perifricos

Perifricos

Microprocesador y su arquitectura abierta


09/01/16

ING. Luis Pacheco Cribillero

Microcontrolador y su arquitectura cerrada

C
Perifricos

Arquitectura tipo Von Neumann


Bus comn de
direcciones

Memoria

CPU

Instrucciones
+
Datos

Bus de datos e
instrucciones
09/01/16

ING. Luis Pacheco Cribillero

ARQUITECTURA TIPO HARVARD

Este tipo es la tendencia en las versiones modernas de microcontroladores. Se


caracterizan por separar en circuitos diferentes, las memorias de instruccin y
de datos, facilitando acceder a ambas simultneamente. Permite la tcnica de
segmentacin.

Memoria
de
Instrucciones

Bus de Direccin
de Datos

Bus de Direccin
de Instrucciones

CPU

10

9
8

14

Bus de Instrucciones

09/01/16

Memoria
de
Datos

Bus de Datos

ING. Luis Pacheco Cribillero

CMO ACTUARA UN MICROCONTROLADOR


EN UN PROCESO A CONTROLAR?

Como lo hara cualquier sistema o circuito de control, sensando o tomando


informacin del proceso, realizando operaciones de comparacin, o de acceso, o
de promedio, o de alarma, etc, y actuando sobre el mismo para corregir,
modificar, o mantener valores, segn sean las exigencias del diseo. A "grosso
modo", lo podemos ilustrar formando parte de un lazo de control cerrado o uno
abierto:
Informacin

Proceso
que se desea controlar

Microcontrolador

Microcontrolador
Informacin
09/01/16

ING. Luis Pacheco Cribillero

MICROCONTROLADORES PIC DE MICROCHIP


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 mquina 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 estn por el orden
de 80 instrucciones.

09/01/16

ING. Luis Pacheco Cribillero

MICROCONTROLADORES PIC DE MICROCHIP


SEGMENTACIN (PIPELINE)
Esta caracterstica se conoce como paralelismo implcito, segmenta
separa las funciones del CPU, producto de la arquitectura Harvard,
permitindole 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 ms rpidas que la gran
mayora de los otros microcontroladores.
INFORMACIN AMPLIAMENTE DIFUNDIDA Y DE FCIL ACCESO
Quizs una de las principales prestaciones. Esta casa fabricante
proporciona libre acceso a las hojas tcnicas (Data Sheet) de sus
diferentes componentes, as como software para programacin,
proyectos propuestos, tutoriales, etc mediante su pgina 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.

09/01/16

ING. Luis Pacheco Cribillero

10

CARACTERSTICAS GENERALES DE LOS


MICROCONTROLADORES
ARQUITECTURA INTERNA DE UN MICROCONTROLADOR PIC
Se dividen en tres grandes reas:
1) Ncleo
Estas son las caractersticas bsicas para la operatividad del
microcontrolador. Estn constituidas por:
* Oscilador * Reset * CPU * ALU
* Memoria no voltil para programa (ROM)
* Memoria de lecto-escritura para datos (RAM)
* Memoria programable para datos (EEPROM/FLASH)
* Instrucciones
2) Perifricos
Es la parte que los diferencia con los microprocesadores. Permite
la conexin con el "mundo exterior". Destacan:

09/01/16

Entradas/Salidas de utilidad general


Mdulo de captura, comparacin y PWM (1)
Comunicacin serial (1)
Comunicacin paralela (1)
Comparadores (1)
Convertidores Analgico/Digital (1)

ING. Luis Pacheco Cribillero

11

CARACTERSTICAS GENERALES DE LOS


MICROCONTROLADORES
3) Caractersticas Especiales Recursos Auxiliares
Contribuyen a reducir el costo del sistema,
incrementan la flexibilidad de diseo y brindan mayor
fiabilidad. Entre ellas tenemos:

09/01/16

Bits de configuracin
Reset de encendido
Temporizador WATCHDOG
Modo reposo de bajo consumo
Oscilador RC interno
Programacin serie en el propio circuito
Interrupciones
Temporizadores (Timer's)
(1) Algunas de estas caractersticas aplican para los
PIC16F87X
ING. Luis Pacheco Cribillero

12

Caractersticas

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 Mxima

10 MHz

Temporizadores

2 (TMR0(3) y WDT(4))

Lneas de Entradas/Salidas Digitales

13 (5 Puerto A, 8 Puerto B)

Corriente mxima sumidero

80 mA PA/150 mA PB

Corriente mxima fuente

50 mA PA/100 mA PB

Corriente mxima sumidero por lnea (Pin)

25 mA

Corriente mxima fuente por lnea (Pin)

20 mA

Voltaje de alimentacin

2 a 6 VDC

Voltaje de programacin

12 a 14 VDC

Encapsulado

DIP plstico 18 pines

09/01/16

ING. Luis Pacheco Cribillero

13

DIAGRAMA INTERNO DEL PIC 16F84

09/01/16

ING. Luis Pacheco Cribillero

14

HARDWARE PIC16F84

09/01/16

ING. Luis Pacheco Cribillero

15

DESCRIPCIN DE LOS PINES DEL PIC16F84


Pin

Descripcin/Funcin

VDD

Voltaje de alimentacin. Se aplican 5 VDC

VSS

Tierra

FOSC1/CLKIN

Entrada del circuito oscilador externo, que proporciona la


frecuencia de trabajo
Salida auxiliar del circuito oscilador

FOSC2/CLKOUT
MCLR/VPP

RA4:RA0

RB7:RB0
09/01/16

Se activa con nivel bajo, proporcionando una


reinicializacin del sistema (reset). Cumple con una
funcin adicional (VPP) que recibe la alimentacin del
voltaje de programacin, al momento de grabar al PIC.
5 lneas de Entradas/Salidas digitales del Puerto A.
RA4 tiene una funcin adicional: Entrada de un reloj
externo
asncrono

sncrono,
cuando
el
microcontrolador trabaja como contador de eventos.
8 lneas de Entradas/Salidas digitales del Puerto B
RB0 tiene una funcin adicional: Provoca una interrupcin
externa asncrona, cuando se configura para sta.
ING. Luis Pacheco Cribillero

16

TIPOS DE OSCILADORES

HS: (High Speed Crystall Resonador): Alta velocidad de 20 MHz a 4 MHz.


XT: (Crystall//Resonador): Estndar de 4 MHZ mximo.
LP: (Low Power Crystall): Bajo consumo, 200 KHz a 30 KHz.
RC: (Resistence/Capacitor): Baja precisin, Tiene una tabla asociada a los
valores de R y C. Muy poco uso. 200 Hz a 32 Hz.

09/01/16

ING. Luis Pacheco Cribillero

17

FRECUENCIA DE FUNCIONAMIENTO
ALGUNOS CONCEPTOS
Un ciclo de instruccin tarda en ejecutarse cuatro perodos de
reloj.
Todas las instrucciones del PIC se realizan en un ciclo de
instruccin, exceptuando las de "salto" que tardan dos ciclos.
Los impulsos de reloj entran por FOSC1/CLKIN y se dividen en
cuatro seales internamente, dando lugar a Q1, Q2, Q3 y Q4.
El ciclo de instruccin se logra al realizarse las siguientes
operaciones:
Q1 incrementa el contador de programa (PC)
Q4 busca el cdigo de la instruccin en la memoria del
programa y se carga en el registro de instrucciones
Q2 - Q3 decodifican y ejecutan la instruccin respectiva

09/01/16

ING. Luis Pacheco Cribillero

18

FRECUENCIA DE FUNCIONAMIENTO

09/01/16

ING. Luis Pacheco Cribillero

19

CLCULOS DE TIEMPOS
Los clculos 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 Oscilacin FOSC), por el
oscilador elegido, hallamos el perodo.
3.Un ciclo de instruccin se ejecuta en 4 perodos.
Tciclo de instruccin: 4 * TOSC
4.Multiplicamos la cantidad de instrucciones por lo que tarda en ejecutarse una
de ellas, cuya informacin 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 instruccin por dos.
Duracin del total de instrucciones normales (DTIN): Nro. de
instrucciones * Tciclo de instruccin
Duracin del total de instrucciones de salto (DTIS): Nro. de
instrucciones * Tciclo de instruccin * 2
5. Para determinar cunto dura un programa en ejecutarse, sumamos la
duracin de las instrucciones normales ms la duracin de las instrucciones de
salto.
Total de duracin del programa: DTIN + DTIS

09/01/16

ING. Luis Pacheco Cribillero

20

CLCULOS DE TIEMPOS
Ejemplo. Sea un cristal XT, cuya frecuencia es F= 4 MHz, Halle el total de
duracin de un programa que contiene 250 instrucciones normales y 50
instrucciones de salto.
1. Hallamos el perodo:
T= 1/F, ste valor es conocido como el perodo de oscilacin.

T= 1 / 4 MHz
= 0.25 s
2. Hallamos el Ciclo de Instruccin:
Tciclo de instruccin= 4*0.25 s = 1 s.
3. Duracin del total de instrucciones normales (DTIN):
DTIN: 250 * 1 s = 250 s
4. Duracin del total de instrucciones de salto (DTIS):
DTIS: 50 * 1 s * 2 = 100 s
5. Hallamos el total de duracin 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: Cunto tarda en
ejecutarse el programa? Considere: A) Oscilador LP, B) Oscilador XT
09/01/16

ING. Luis Pacheco Cribillero

21

CIRCUITOS DE RESET

09/01/16

ING. Luis Pacheco Cribillero

22

CIRCUITOS DE APOYO (INTRODUCEN


DATOS AL MICROCONTROLADOR)
Pulsadores e interruptores

09/01/16

ING. Luis Pacheco Cribillero

23

CIRCUITOS DE APOYO (SACAN


DATOS DEL MICROCONTROLADOR)
Visualizacin

Con Display

09/01/16

ING. Luis Pacheco Cribillero

24

CIRCUITOS DE APOYO (SACAN DATOS DEL MICROCONTROLADOR)

Con Rel

Con optoacoplador

09/01/16

ING. Luis Pacheco Cribillero

25

09/01/16

ING. Luis Pacheco Cribillero

26

TEMA 2:
REGISTROS, INSTRUCCIONES Y
BANCOS DE MEMORIA

ESTRUCTURA DE DATOS

BIT: Unidad mnima de


informacin

NIBBLE:

Grupo de 4 bits

x x x x

BYTE:

Grupo de 8 bits

Word:

Grupo de 2 BYTES

x x x x x x x x
BYTE ALTO

(Bit ms significativo) MSB


x

BYTE BAJO

LSB (Bit menos


significativo)
x x

Rango de los microcontroladores de 8 Bits


28 = 256 posibles valores para operaciones
09/01/16

ING. Luis Pacheco Cribillero

28

ALGUNOS TIPS PARA REPASAR Y RECORDAR


Suma Binaria Aritmtica: (add)
0+0 =0
0+ 1+=1
1 +0 =1
1 + 1 = 0 y llevo acarreo (Carry) para
la siguiente cifra MSB
Suma Binaria Lgica: (ior)
0+0=0
0+1=1
1+0=1
1+1=1
Resta Binaria Aritmtica: (sub)
00=0
10=1
11=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)

09/01/16

ING. Luis Pacheco Cribillero

29

SISTEMAS DE NUMERACIN

09/01/16

Decimal

Hexadecimal

Binario
(Formato 4 bits BCD)

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

10

1010

11

1011

12

1100

13

1101

14

1110

15

1111

ING. Luis Pacheco Cribillero

30

FORMATO DE SISTEMAS DE NUMERACIN


ADMITIDOS POR EL MICROCONTROLADOR
Tipo de Sistema

Formato

Decimal

D126
.126

Binario

B10011011

Hexadecimal

09/01/16

HAE
AEH
0xAE

Sigla
f (File)
k

Significado
Registro. Puede ser
cualquiera que el
programador desee dentro
del rango permitido.
Constante. Valor fijo.

Registro de trabajo
principal.
Destino del Registro.
Si d vale 1, el resultado
se guardar en el Registro
d (destiny) que el programador haya
escogido.
Si d vale 0, el resultado
se guardar en el Registro
de trabajo principal "w"
w (work)

ING. Luis Pacheco Cribillero

31

REGISTROS Y BANCOS

09/01/16

ING. Luis Pacheco Cribillero

32

MEMORIA RAM
DE REGISTROS

09/01/16

ING. Luis Pacheco Cribillero

33

ACCEDIENDO A LOS BANCOS DE REGISTROS

09/01/16

ING. Luis Pacheco Cribillero

34

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
estn declarados en mayscula. Por lo que durante la elaboracin de un
programa, se debe respetar este formato.
Ejemplo:
INCLUDE <P16F84.INC> INCLUDE P16F84.INC
09/01/16

ING. Luis Pacheco Cribillero

35

ESTRUCTURA DE UN PROGRAMA
Encabezado
Configuracin,
Declaracin de
Registros,
Datos,
Constantes.
org
Cuerpo del
Programa
end

09/01/16

En general un programa est


estructurado en tres grandes partes:
a) Encabezado: Define el tipo de PIC con
que se est trabajando, Bloque de
declaraciones
de
variables
y
constantes,
b) Configuracin de registros especiales:
Registro OPTION, INTCON, TMR0,
puertos A y B, EECON, STATUS.
b) Cuerpo del programa: Aqu estn
contenidas todas las instrucciones
relacionadas a la ejecucin de un
programa bajo un diseo individual,
realizado por el programador.

ING. Luis Pacheco Cribillero

36

ESTRUCTURA DE UN PROGRAMA
1. En todo programa se debe incluir cual es el tipo de PIC que se emplear,
incluir libreras y configurarlo:
List P= 16F84A
; Tipo de PIC a utilizar include < p=16F84.inc>
; Librera asociada al PIC que se
; est utilizando
_config_RC_OSC_&_WDT_OFF ; Se seleccionan los bits de
configuracin
2. Al escribir un programa se realizan y organizan las instrucciones en
columnas:
1ra Columna: nombrar variables o colocar etiquetas.
2da Columna: aplicar la instruccin.
3ra Columna: contiene los datos necesarios para que pueda ejecutarse
dicha instruccin.
4ta Columna: contiene comentarios, no tomados en cuenta por el
microcontrolador.
Ejemplo: Defina a la variable M en la posicin de memoria expresada en 15H
1raC
2daC
3raC
4taC
M equ 15H
; Define a la variable M en la posicin 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 lnea luego de dicho smbolo.
09/01/16

ING. Luis Pacheco Cribillero

37

ESTRUCTURA DE UN PROGRAMA
1ra Columna 2da Columna 3ra Columna
Etiquetas

RESULTADO

INICIO

09/01/16

Instrucciones

Operandos

equ

0FH

org
goto
bsf
movlw
movwf
movlw
movwf

00H
INICIO
STATUS,5
FFH
TRISA
00H
TRISB

4ta Columna
Comentarios

;Declaro al registro
;RESULTADO
;En la posicin 0FH de la RAM

; Configuramos los registros


; asociados a los puertos A y B

ING. Luis Pacheco Cribillero

38

ESTRUCTURA DE UN PROGRAMA
4. Un programa siempre empieza con la instruccin org y termina
con end
5. Considere las siguientes recomendaciones:

Directivas, etiquetas, Variables y constantes en maysculas.


Ejemplo: EQU, DATOA, SUMA, CONTA, RP0, Z
Instrucciones en minsculas. 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 ayudarn a orientarse al momento de revisar un problema
de lgica del mismo o para recordar su funcionamiento.
Utilice la directiva EQU, para asignarle nombres a constantes y/o
variables. Esto facilitar su comprensin y lectura.

6. Se recomienda ampliamente el uso de los diagramas de flujo,


para la estructuracin del respectivo programa. Estos permiten
visualizar el funcionamiento a grosso modo del mismo.
09/01/16

ING. Luis Pacheco Cribillero

39

Cul se entiende mejor?


Sin recomendaciones
List= 16F84
org 00H
goto inicio
inicio Bsf 03H,5
movlw 1FH
movwf 85H
movlw 00H
movwf 86H
bcf 03H,5
movlw b11110000
movwf 06H
movf 05H,0
ExploPA Btfsc 05H,3
goto ExploPA
goto INVPB
INVPB comf 06H,1
End

09/01/16

Con recomendaciones

List P=16F84
;Tipo de procesador
STATUS
equ
03H
; Zona de
declaraciones
PORTA equ
05H
PORTB equ
06H
TRISA equ
85H
TRISB equ
86H
W
equ
00H
F
equ
01H
org
00H
goto
INICIO
INICIObsf
STATUS,5 ;Se pasa a banco1
movlw
1FH
movwf
TRISA
; Se configura puerto A
movlw
00H
movwf
TRISB
; Se configura puerto B
bcf
SATUS,5
; Se regresa al banco 0
movlw
b11110000
movwf
PORTB
; Se escribe valor
movf
PORTA,W
ExploPABtfsc
PORTA,3
; RA3 es cero?
goto
ExploPA
goto
INVPB
INVPB
comf
PORTB,1
; Se activa RB1
End
ING. Luis Pacheco Cribillero

40

DIAGRAMA DE FLUJO

Se recomienda ampliamente que el diseador/programador, se apoye en


elementos grficos para determinar y delimitar el funcionamiento del diseo
que est encarando. Los diagramas de flujo permiten visualizar el
funcionamiento lgico de cualquier programa.

Un rectngulo 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 decisin sobre una
condicin que debe ser evaluada analizada. Si la
respuesta es afirmativa cumple con la condicin, se
toma una direccin y en caso contrario, se toma una
direccin diferente.
Las flechas indican el flujo que debe seguir el programa.
stas indican claramente el camino direccin a seguir
Los Conectores son utilizados cuando el diagrama de
flujo es de medianas o grandes dimensiones y su uso
evita sobrecargar de flechas al diagrama.
09/01/16

ING. Luis Pacheco Cribillero

B
41

INSTRUCCIONES ORIENTADAS A REGISTROS


MNEMNICO

DESCRIPCIN

FLAGS AFECTADOS

addwf f,d

(W)+(f) a (destino)

C, DC, Z

andwf f,d

(W) AND (f) a (destino)

clrf f

00 a (f) (borrar registro F)

clrw

00 a (W) (borrar W)

comf f,d

Complemento de f [(f) a (destino)]

decf f,d

(f)-1 a destino (decrementa f)

decfsz f,d

(f)-1 a destino y si resultado es 0 salta (decrementa F,


salta si zero)

Ninguno

incf f,d

(f)+1 a destino (incrementa f)

incfsz f,d

(f)+1 a destino y si resultado es 0 salta

Ninguno

iorwf f,d

(W) or (f) a destino

movf f,d

mover f a destino

movwf f

(W) a (f) mover W a destino F

Ninguno

nop

No operacin

Ninguno

rlf f,d

Rota f a la izquierda a travs del carry a destino

rrf f,d

Rota f a la derecha a travs del carry a destino

subwf f,d

(f)(W) a (destino)

C,DC,Z

swapf f,d

Intercambia los nibbles de f a destino

Ninguno

xorwf
f,d
09/01/16

(W) XOR (f) a (destino)


ING. Luis Pacheco Cribillero

42

INSTRUCCIONES ORIENTADAS A BIT


MNEMNICO

DESCRIPCIN

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)

call k

Llamada a subrutina

Ninguno

clrwdt

Limpia temporizador Watch Dog

goto k

Go To direccin (ir a direccin)

Ninguno

iorlw k

(W) OR K a (W)

Ninguno

movlw k

K a (W)

Ninguno

retfie

Retorno de una interrupcin

Ninguno

retlw k

Retorno con un literal en W

Ninguno

return

Retorno de una subrutina

C,DC,Z

sleep

Modo Stand by

sublw k

K (W) a W

C, DC, Z

09/01/16
xorlw k

ING. Luis Pacheco Cribillero


(W) XOR K a (W)

43

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). (Pg. 150. Angulo).
goto carga en el PC, la direccin de la nueva instruccin. call antes de
cargar el PC con la direccin de la instruccin a saltar, salva la direccin
de donde parte, guardndola en la cima de pila (stack), el valor actual
del PC. Luego de ejecutar la subrutina, se saca del stack la direccin de
donde parti.
Si no estn en la subrutina llamada por call, las instrucciones return o
retlw k, se puede presentar un error de lgica en la ejecucin del
programa, algo similar a no dejar migajas de pan para recordar el camino
de retorno.
Nota: Recuerde que los PICs poseen un valor limitado de pila (stack). En el PIC 16F84,
este es de 8. Esto significa que en un programa no puede haber ms de 8 subrutinas
anidadas. (Subrutinas dentro de subrutinas).

09/01/16

ING. Luis Pacheco Cribillero

44

09/01/16

ING. Luis Pacheco Cribillero

45

TEMA 3. HERRAMIENTAS
DE PROGRAMACIN

INSTRUCCIONES DE
MANIPULACIN 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

09/01/16

ING. Luis Pacheco Cribillero

47

INSTRUCCIONES DE
EXPLORACIN/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
09/01/16

ING. Luis Pacheco Cribillero

48

STATUS
7
(L/E)

IRP

6 (L/E)

5 (L/E)

4 (L)

3 (L)

2 (L/E)

1 (L/E)

0 (L/E)

RP1

RP0

TO

PD

DC

C. Bit de acarreo en el bit MSB


Vale 1 cuando en el resultado de una operacin aritmtica, 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 "prstamo"
Vale 0 si se ha producido un "prstamo"
DC. Acarreo en el cuarto bit (Nibble bajo). Misma descripcin de C, pero referida al cuarto bit.
Z. Cero.
Vale 1 si el resultado de una operacin lgico - aritmtica es cero
Vale 0 si el resultado de una operacin lgico- aritmtica 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 despus de la conexin de la alimentacin al microcontrolador, o al ejecutarse las
instrucciones clrwdt sleep
Se pone a 0 cuando el perro guardin se ha desbordado.
PD. Power Down
Se pone a 1 despus de la conexin de la alimentacin al microcontrolador o al ejecutarse la
instruccin clrwdt
Se pone a 0 mediante la ejecucin de la instruccin sleep
09/01/16
ING. Luis Pacheco Cribillero
49

RESULTADO DE OPERACIONES
LGICO/ARITMTICAS

Cmo 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
;DatoAW
addwf
DatoB,0
;DatoA+DatoBW
btfss
STATUS,0
; C=1?
goto
Noacarreo
goto
Acarreo
Cmo 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
;DatoAW
addwf
DatoB,0
;DatoA+DatoBW
btfss
STATUS,1
; DC=1?
goto
Noacarreo
goto
Acarreo

09/01/16

ING. Luis Pacheco Cribillero

50

RESULTADO DE OPERACIONES
LGICO/ARITMTICAS
Cmo sabemos si un registro es igual a otro?
Opcin A: Se restan ambos registros y se pregunta si Z es igual a
1:

movf
DatoB,0
subwf
DatoA,0
btfss
STATUS,2
goto NOIGUAL
goto IGUAL

;DatoBW
;DatoA DatoB W

Opcin B: Se aplica XOR entre ambos registros y:


movf
DatoB,0
;DatoBW
xorwf
DatoA,0
;DatoA (XOR) DatoB W
btfss
STATUS,2
goto NOIGUAL
goto IGUAL
09/01/16

ING. Luis Pacheco Cribillero

51

RESULTADO DE OPERACIONES
LGICO/ARITMTICAS
Cmo sabemos si un registro es mayor,
otro?
R= Se restan ambos registros (A B) y:
movf
DatoB,0
subwf
DatoA,0
EXPLORA btfss
STATUS,2
goto
SIGUE
goto
IGUAL
SIGUE
btfsc
STATUS,0
goto
MAYOR
goto
MENOR

09/01/16

ING. Luis Pacheco Cribillero

igual o menor a

;DatoBW
;DatoA-DatoBW
; Z=1?
;Si Z=1, A=B
;C=0?
; Si C=1, A>B
; Si C=0, A<B

52

SELECCIONANDO LOS BANCOS DE REGISTROS


PIC
16F84
posee
El
solamente dos (2) bancos de
Registros, por lo que para
seleccionar
el
banco
deseado,
basta
con
manipular el bit RP0 del
registro STATUS.
RP0=
1,
se
ha
Si
seleccionado el banco 1
RPO=
0,
se
ha
Si
seleccionado el banco 0
Seleccione
el
Ejemplo:
banco de registros 1:
bsf STATUS,5

Seleccione el
registros 0:

; RP0= 1

banco

de

bcf STATUS,5
; RP0=0
As de sencillo es seleccionar
los bancos de registros.

09/01/16

ING. Luis Pacheco Cribillero

53

CONFIGURANDO UN PUERTO
La configuracin de puertos es muy fcil:
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 analoga de la siguiente forma:

1 = In = Entrada = Solo lectura


0 = Out = Salida = Solo escritura
09/01/16

ING. Luis Pacheco Cribillero

54

CONFIGURANDO UN PUERTO
3.

09/01/16

La configuracin de puertos es muy fcil:


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 estn ingresando por l.
Nota: Escribir sobre un puerto (o pin) configurado como entrada,
no tiene ningn efecto. Si se desea escribir sobre l, es necesario
que el mismo sea habilitado como salida.

ING. Luis Pacheco Cribillero

55

CONFIGURANDO UN PUERTO COMO ENTRADA/SALIDA (POR BYTE)

Recordemos los tres pasos:


Por Byte:

A) bsf
movlw
movwf
bcf
B) bsf
movlw
movwf
bcf
C)bsf
movlw
movwf
bcf
09/01/16

STATUS, 5
; (1) Seleccin de banco 1
FFH
; B11111111
TRISB
; (2) Todos los bits del puertoB estn
; configurados como entradas
STATUS,5
; (3) Se regresa al banco 0
STATUS, 5
; (1) Seleccin de banco 1
00H
; B00000000
TRISA
; (2) Todos los bits del puertoA estn
; configurados como salidas
STATUS,5
; (3) Se regresa al banco 0
STATUS, 5
B10010001
TRISB
STATUS,5

;
;
;
;

(1) Seleccin de banco 1


BESSESSSE
(2) Mixto E/S en un mismo puerto
(3) Se regresa al banco 0

ING. Luis Pacheco Cribillero

56

CONFIGURANDO UN PUERTO COMO


ENTRADA/SALIDA (BIT A BIT)
Recordemos los tres pasos:

Bit a bit:
bsf
STATUS,5
; (1) Seleccin 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.
09/01/16

ING. Luis Pacheco Cribillero

57

ESCRIBIR Y LEER SOBRE UN PUERTO

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 declaracin de etiquetas.
PuertoA equ 05H ; Tambin 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, segn sea el caso.
09/01/16

ING. Luis Pacheco Cribillero

58

REGISTROS ASOCIADOS A LOS


PUERTOS
De configuracin:
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 propsito general, slo que estn
directamente vinculados a los puertos del microcontrolador.
Por lo tanto su Lectura/Escritura NO difiere de la de cualquier
otro registro

09/01/16

ING. Luis Pacheco Cribillero

59

LEER Y/O ESCRIBIR EL UN VALOR


EN UN PUERTO
Ejemplo 1. Lea el valor presente en el puerto A y gurdelo en un
Registro DatoA.
movf PORTA,0
; PORTAW
movwf DatoA
; WDatoA
Ejemplo 2. Escriba sobre el puerto B el siguiente valor: 49H
movlw 49H
; 49HW
movwf PORTB
; WPORTB
Ejemplo 3.
RA4:
bsf
bcf
bsf
09/01/16

Active el bit RB0, desactive el bit RB1 y active el bit


PORTB,0
PORTB,1
PORTA,4

; RB0= 1
; RB1= 0
; RA4= 1

ING. Luis Pacheco Cribillero

60

LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO

Segn 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
B00000001
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

09/01/16

ING. Luis Pacheco Cribillero

61

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?

Cmo hacemos para saber el


valor del bit RA0?
Basta con explorar su estado
lgico mediante alguna de las
instrucciones de testeo y/o
exploracin: btfss f,b btfsc
f,b:
btfss PORTA,0
goto RutinA
goto RutinB
09/01/16

ING. Luis Pacheco Cribillero

62

TOMA DE DECISIONES

Condicin
X=1?

NO

Proceso A

Una Tarea.
La condicin puede venir
internamente como
externamente.

SI

Interna
btfss STATUS,0
goto ProcesoA
goto SIGUE

09/01/16

; C=1?

Externa
btfss PORTA,0
goto ProcesoA
goto SIGUE

ING. Luis Pacheco Cribillero

; RA0=1?

63

TOMA DE DECISIONES

Condicin
X=1?

NO

Proceso A

Dos Tareas.
La condicin puede venir
internamente como
externamente.

SI

Proceso B

09/01/16

Interna
btfss STATUS,0
goto ProcesoA
goto ProcesoB

; C=1?

Externa
btfss PORTA,0
goto ProcesoA
goto ProcesoB

ING. Luis Pacheco Cribillero

; RA0=1?

64

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.

09/01/16

ING. Luis Pacheco Cribillero

65

TOMA DE DECISIONES. EJEMPLO

RA0=1?

SI
Activar LED en
RB1

NO

Activar LED en
RB0

Externa

ProcesoA
ProcesoB
SIGUE

09/01/16

btfss
goto
goto
bsf
goto
bcf
goto
----------------

ING. Luis Pacheco Cribillero

PORTA,0
ProcesoA
ProcesoB
PORTB,0
SIGUE
PORTB,1
SIGUE

; RA0=1?

66

TOMA DE DECISIONES. CERROJO


VALIDACIN

Condicin
X=1?

Se queda esperando que


la condicin ocurra.

NO

Interna
ESPERA

Externa
EXPLORA

SI

btfss
goto
goto

INTCON,0
ESPERA
ProcesoA

btfss
goto
goto

PORTA,0 ; RA0=1?
EXPLORA
ProcesoA

Proceso A

09/01/16

ING. Luis Pacheco Cribillero

67

TOMA DE DECISIONES
Condicin
X=1?

NO

Condicin
Y=1?

NO

Proceso A

SI

SI

Proceso B
Proceso C

NO

Condicin
Y=1?

SI

Multitareas.
Dos condiciones permiten
elegir entre uno a cuatro
procesos distintos.

Proceso D
09/01/16

ING. Luis Pacheco Cribillero

68

Cmo pasar del diagrama de flujo al programa?


Es sencillo:
Cada smbolo del diagrama de flujo representa una ( varias)
instruccin (es).
El programador/Diseador, mediante la prctica y/o visualizacin,
debe buscar las instrucciones que cumplan con los smbolos y su
contenido, e ir colocndolas secuencialmente, segn lo indique el
diagrama de flujo previamente elaborado.
35H SUMA

SI

CARGA movlw
movwf

Z=1?
NO

35H
SUMA

btfss

STATUS,2

goto

ProcesoA

goto

Carga

ProcesoA
09/01/16

ING. Luis Pacheco Cribillero

69

09/01/16

ING. Luis Pacheco Cribillero

70

TEMA 3. RUTINAS
INTERMEDIAS

SUBRUTINA
MIENTRAS SE
PRESIONA
UNA TECLA

TECLA
PRESIONADA?

NO

SI

DELAY 10 ms

PROCESO A

09/01/16

ING. Luis Pacheco Cribillero

72

PRESIONAR TECLA Y
ESPERAR A QUE SE
SUELTE PARA
EJECUTAR SUBRUTINA

Tecla
Presionada?

NO

SI
Retardo 10 ms

Tecla
Soltada?

NO

SI
Retardo 10 ms
Proceso A

09/01/16

ING. Luis Pacheco Cribillero

73

ENMASCARAMIENTO
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
instruccin ideal para este es la and

09/01/16

ING. Luis Pacheco Cribillero

74

ENMASCARAMIENTO
DatoA
DatoL
DatoH

09/01/16

equ
equ
equ

movlw
movwf
movlw
andwf

4CH
DatoA
0FH
DatoA,0

movwf
movlw
andwf

DatoL
F0H
DatoA,0

movwf
swapf

DatoH
DatoH

12H
23H
4EH
; Cargamos a w con 4CH
; Transferimos 4CH a w
;
;
;
;
;

Neutralizamos el nibble
ms significativo de DatoA y lo
guardamos en w para no alterar el
contenido de DatoA
Lo guardamos en ste

; Neutralizamos el nibble menos


; significativo de DatoA
; Intercambiamos nibbles
; en DatoH para ordenarlo.
ING. Luis Pacheco Cribillero

75

ENMASCARAMIENTO

Tambin se puede neutralizar un bit o varios bits, selectivamente,


segn sea nuestra conveniencia.

09/01/16

ING. Luis Pacheco Cribillero

76

CALL K
PCL

27H
28H
29H
2AH
2BH

INICIO
PROX

INSTRUCC A
INSTRUCC B

INSTRUCC 1

INSTRUCC C

INSTRUCC 2

CALL PROX

RETURN RETLW K

INSTRUCC D
SUBRUTINA

FIN
PROGRAMA PRINCIPAL

09/01/16

ING. Luis Pacheco Cribillero

77

CALL K
El llamado a una Subrutina K, desva 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 informacin
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 programacin y elaboracin de un diseo.

09/01/16

ING. Luis Pacheco Cribillero

78

CALL K
PILA (STACK)

(PCL)

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

ING. Luis Pacheco Cribillero

79

TEMPORIZANDO SIN EL
USO DEL TMR0

La temporizacin 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
segn
sean
las
necesidades del programa.

Con
estos
retardos
inducidos, podemos generar
tiempos
para
funciones
especficas, 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.

09/01/16

ING. Luis Pacheco Cribillero

80

EJEMPLO DE UN RETARDO POR SOFTWARE SIN TMR0

RETARDO
movlw
d16
; (1 ciclo)
movwf
REG2
; Cargamos REG1 con 16 (1 ciclo)
DOS movlw
d14
; (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.

09/01/16

ING. Luis Pacheco Cribillero

81

RUTINA DE CONVERSIN BINARIO


A BCD (8 BITS)
INICIO
DATOXW

RESP= RESP+100

WRESP

RESP= RESP-10

U=0
D=0
C=0

C=0?

RESP= RESP-100

RESP= RESP+10
RESP= RESP-1

SI

NO

incf D,1
C=0?

C=0?
NO

incf U,1

SI

MOSTRAR EN
DISPLAY
FIN

SI

NO

incf C,1
09/01/16

ING. Luis Pacheco Cribillero

82

RUTINA DE CONVERSIN DE
BCD A BINARIO (8 BITS)
INICIO
DEC=DEC-1

UNI=X
DEC=Y
CEN=Z

C=0?

DAT=0

SI

NO

CEN=CEN-1

C=0?

UNI=UNI-1

SI

DAT=DAT+10

SI

C=0?

RETURN

NO

DAT=DAT+1

NO

DAT=DAT+100
09/01/16

ING. Luis Pacheco Cribillero

83

TABLAS
Las tablas nos permiten extraer valores para ser utilizados en
otras tareas, tales como la visualizacin de datos, linealizacin
de valores, conversin de cdigos, etc.
Su funcionamiento se basa en la manipulacin 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 mximo 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 instruccin RETLW K, est muy asociada a las tablas, ya que
cuando se llama a una subrutina tabla, esta instruccin extrae
el valor de la misma previamente seleccionada por el puntero de
tabla.

09/01/16

ING. Luis Pacheco Cribillero

84

TABLAS
Normalmente, cuando se llama a una subrutina tabla,
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:
movf

CONTADOR,0

call

TABLA

movwf

PORTB

TABLA addwf

PCL,1

retlw

Valor0

retlw

Valor1

retlw

Valor2

Puntero + PCL

retlw

09/01/16

ING. Luis Pacheco Cribillero

ValorN

85

VARIAS OPCIONES
TECLA1
ACT?

NO

SI

TECLA2
ACT?

TECLA2
ACT?

NO

Proceso A

SI

Proceso B

SI

Proceso C

NO
NO

09/01/16

TECLA3
ACT?

SI

Proceso D

ING. Luis Pacheco Cribillero

86

MULTIPLEXACIN DE DISPLAYS
La multiplexacin de displays, consiste en la
activacin 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 activacin y desactivacin
de displays se utilice un tiempo menor a 5 ms.
El efecto ptico percibido por el ojo humano es el de
una cifra fija.
09/01/16

ING. Luis Pacheco Cribillero

87

MULTIPLEXACIN DE DISPLAYS

Paso a paso: (Asumamos que tenemos tres displays)

1)
2)
3)

Se activa display de UNIDAD


Se desactiva el resto de los displays
Se muestra el dato de UNIDAD

4)
5)
6)

Se desactiva los displays de UNIDAD y


CENTENA
Se activa el display de DECENA
Se muestra el dato de DECENA

7)
8)
9)

Se desactivan los displays de UNIDAD y DECENA


Se activa el display de CENTENA
Se muestra el dato de CENTENA

09/01/16

ING. Luis Pacheco Cribillero

88

MULTIPLEXACIN DE DISPLAYS
MOSTRAR
DIG1W
WPORTA
HABI DISP1
RETARDO 1ms
DIG2W
WPORTA
HABI DISP2
RETARDO 1ms
RETURN
09/01/16

ING. Luis Pacheco Cribillero

89

ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
1

MOSTRAR
INCF CONTADOR,1

NO

CONTADOR
=9?
SI
CONTADOR=0

MOSTRAR

CONTADOR ASCENDENTE SIMPLE


09/01/16

ING. Luis Pacheco Cribillero

90

INICIO

CONTADOR ASCENDENTE
COMPLEJO

UNI=0
DEC=0
MOSTRAR
1
NO

SI

MOSTRAR

RETARDO

NO
INCF DEC,1

MOSTRAR
DEC=9?
SI

MOSTRAR
09/01/16

RA0=1?

DEC=0

NO
INCF UNI,1

UNI=9?

UNI=0

SI

ING. Luis Pacheco Cribillero

91

ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
1

MOSTRAR
DECF CONTADOR,1

NO

CONTADOR
=0?
SI
CONTADOR=9

MOSTRAR

CONTADOR DESCENDENTE SIMPLE


09/01/16

ING. Luis Pacheco Cribillero

92

INICIO
UNI=0

CONTADOR DESCENDENTE
COMPLEJO

DEC=0
MOSTRAR
1
NO

SI

MOSTRAR

RETARDO

NO
DECF DEC,1

MOSTRAR
DEC=0?
SI

MOSTRAR
09/01/16

RA0=1?

DEC=9

NO
DECF UNI,1

UNI=0?

UNI=9

SI

ING. Luis Pacheco Cribillero

93

DE LA IDEA AL PROGRAMA (PARTE I)


1. Delimitar / Disear el Hardware
2. Diagrama de Flujo para establecer el
funcionamiento lgico
3. Realizar programa en lenguaje ensamblador.
Ejercicios propuestos:

09/01/16

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

94

09/01/16

ING. Luis Pacheco Cribillero

95

TEMA 4. 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 informacin 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
09/01/16

ING. Luis Pacheco Cribillero

97

REGISTRO OPTION (Direccin 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 travs 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 asignacin 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 acta el divisor de
frecuencia.

09/01/16

ING. Luis Pacheco Cribillero

98

EJEMPLOS DE CONFIGURACIN

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 dems bits?


Cmo lo cargo al OPTION?
En el primer caso:
movlw

bxx11xxxx1

movwf

OPTION

09/01/16

En el segundo caso:
movlw

bxx0x0100

movwf

OPTION

ING. Luis Pacheco Cribillero

99

TEMPORIZADOR TMR0

Registro asociado al Timer0. Se encuentra en la posicin 01H de la


memoria RAM. Es el corazn del mdulo Timer0. Puede ser ledo o
escrito en cualquier momento. El TMR0 se incrementar
automticamente por cada ciclo de instruccin 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, segn sea el preescaler a utilizar para lograr nuestra
temporizacin.
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). Adems existe un
retardo en el incremento real del TMR0, despus de la sincronizacin. El
bit TOCS= 1. Se debe seleccionar el tipo de flanco que producir el
incremento del TMR0 ( TOSE = 1 0).

09/01/16

ING. Luis Pacheco Cribillero

100

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 nueva seal de menor frecuencia a la salida, que ser la seal de reloj de
entrada al registro TMR0.
Ralentiza seales de entrada demasiado rpidas para nuestros propsitos.
Tambin existe un postescaler, asociado al perro guardin 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 especficas cuando se cambia la asignacin del prescaler
del TMR0 al WDT. Esta secuencia debe ser seguida, an cuando el WDT est
inactivo.

09/01/16

ING. Luis Pacheco Cribillero

101

CMO CUENTA EL TMR0?


El TMR0 cuenta exclusivamente de
forma ascendente, nunca descendente.

00H
FFH

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

00H
FFH
Valor cargado
En el TMR0
00H

09/01/16

ING. Luis Pacheco Cribillero

102

CLCULOS 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 expresin:
Temporizacin= 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.
Solucin: Sea XT = Frecuencia = 4 MHz, T = 0.25 s.
Temporizacin= 4*0.25 s* (256 100) * 32 = 4.992 ms.

09/01/16

ING. Luis Pacheco Cribillero

103

OTROS EJEMPLOS

Se desea saber: Qu valor debemos cargar en el TMR0, si


deseamos obtener una temporizacin de 10,24 ms, utilizando un
preescaler de 128 y un cristal XT?
Solucin:
Temporizac in
10,24ms
10
(256 N ) =
=
= 80

4 TOSC Rgodivisor

4 0.25s 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.
Solucin: Sea Fosc= 10 MHz, T = 100 ns

Temporizac in
1.5ms
(256 N10) = 4 TOSC Rgodivisor = 4 100ns RgoDivisor
N10 = 256 - (3750/RgoDivisor)
09/01/16

ING. Luis Pacheco Cribillero

104

CONTINUACIN EJEMPLO ANTERIOR


Dmosle valores al Rango del divisor, hasta obtener un valor que se
acerque lo ms 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 prctica, realice usted, el clculo de la Temporizacin, para
cada uno de los valores que se consiguieron en los clculos 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
clculos, estos deben de estar cercanos a la respuesta que se espera del
temporizador que est diseando.

09/01/16

ING. Luis Pacheco Cribillero

105

Ejemplo. Diga cunto es la mxima temporizacin que se puede


hallar con el TMR0? Asuma que se est trabajando con un XT.
Solucin: Tomamos el mximo factor de escala de divisin todos los
estados que puede contar el TMR0:

Temporizacin= 4*0.25 s*(256 )*256 = 65.536 ms.


Este es el mximo valor que podemos conseguir del TMR0 .
Cmo 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 nmero
de bits. La solucin est en extender el Timer0 con un registro
(auxiliar) controlado por software.
Dicho registro (auxiliar) contar el nmero de interrupciones
por desbordamiento que genera el Timer0, de forma de que ste
pase por cero, cuando haya pasado el tiempo que estamos
calculando.

09/01/16

ING. Luis Pacheco Cribillero

106

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 mltiplos de ellas a la salida del
TMR0 con mayor facilidad. En general, la eleccin del valor del prescaler
es emprica: depende del problema, la experiencia y sobre todo de la
prctica.
2. Determinar el valor del Registro Auxiliar, a partir del valor dado por
el TMR0.
Normalmente viene dado por un mltiplo 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 temporizacin de 1 segundo. Utilice un oscilador XT.
Solucin: XT= Frecuencia = 4 MHz ; Tosc= 250 ns
Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que
temporizacin, podemos aleatoria mente escogerlas, como en el ejemplo
6. Evaluando cualquiera, cuya temporizacin del TMR0 se bas en 5 ms,
escojamos el prescaler 128 y sustituyamos los valores en la ecuacin
principal:
Temporizacin= 4*250 ns*(256 - 217)*128 = 4.992 ms
09/01/16

ING. Luis Pacheco Cribillero

107

CONTINUACIN 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 mltiplo:
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 operacin pero interpretada de una forma ms sencilla
es determinar cuantas veces necesitamos al tiempo calculado
para lograr un segundo:

1segundo
200.32
4.992ms

La que usted entienda mejor es vlida.


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
09/01/16

ING. Luis Pacheco Cribillero

108

DE LOS CLCULOS A LA PROGRAMACIN


Realicemos un ejercicio completo: Realice un programa que
permita encender y apagar un led cada 15 ms, mediante el
timer0. Utilice un oscilador XT.

09/01/16

ING. Luis Pacheco Cribillero

109

DE LOS CLCULOS A LA PROGRAMACIN

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 informacin 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
clculos, as como de
asignarlo al TMR0. As como
la rutinaria configuracin
de los puertos.
09/01/16

ING. Luis Pacheco Cribillero

110

Paso 3. Programa

09/01/16

LIST P=16F84A
INCLUDE P16F84A.INC
ORG
00H
GOTO
INICIO
INICIO BSF
STATUS,5
CLRF
TRISA
MOVLW B11010110
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 D139
MOVWF TMR0
ESPERA BTFSS
INTCON,TOIF
GOTO
ESPERA
BCF
INTCON,TOIF
RETURN
END
ING. Luis Pacheco Cribillero

111

Ejercicio. Realice un programa que permita


encender y apagar un led cada un segundo.
Mediante Timer0 y con un oscilador XT.

09/01/16

Programa Principal

Subrutina

ING. Luis Pacheco Cribillero

112

09/01/16

ING. Luis Pacheco Cribillero

113

OTRA

FORMA DE HACER LOS CLCULOS?

Pero si an le enredan todas estas frmulas, para calcular


temporizaciones, probemos con estas tres:

Pruebe ahora realizar los mismos clculos siguiendo el 1, 2, 3

09/01/16

ING. Luis Pacheco Cribillero

114

09/01/16

ING. Luis Pacheco Cribillero

115

TEMA 5. INTERRUPCIONES

INTERRUPCIONES

Las interrupciones son desviaciones del flujo de control del programa


originadas asncronamente, por diversos sucesos que no se hallan bajo la
supervisin de las instrucciones. Dichos sucesos pueden ser externos al
sistema, como la generacin 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 instruccin call de
llamado a subrutina. Se detiene la ejecucin del programa en curso, se
salva la direccin actual del contador de programa (PC) en la pila (STACK)
y se carga el PC con una direccin, que en el caso de una interrupcin es
una direccin reservada de la memoria de cdigo, llamada vector de
interrupcin. Parejo. Microcontroladores PIC. Pg. 117. 2da Edicin.

En el PIC 16F84, este vector de interrupcin est ubicado en la posicin


04H, en donde comenzar la rutina de servicio de la interrupcin. Ejemplo:
org 00H
; Vector de origen del programa
goto INICIO ; salto a la rutina de programa principal
org 04H
; Vector de interrupcin
goto INTERR; salto a la rutina de interrupcin.

La idea de colocar una instruccin de salto incondicional, es la de trasladar


el flujo del programa a la zona de memoria de cdigo que contiene a la
rutina de interrupcin. ING. Luis Pacheco Cribillero
09/01/16
117

DIAGRAMA DE FLUJO DURANTE UNA INTERRUPCIN


Programa normal
Instruccin 1

Rutina de Servicio de Interrupcin

Instruccin 2

Instruccin 1

Instruccin 3

Instruccin 2

Instruccin 24

RETFIE

Instruccin 25

Instruccin N
Fin de programa

09/01/16

Nota: Una Rutina de Servicio


de Interrupcin puede ser
igual de extensa e incluso
ms que el mismo programa
principal.
ING. Luis Pacheco Cribillero

118

DIAGRAMA DE
FLUJO RSI

09/01/16

ING. Luis Pacheco Cribillero

119

CAUSAS DE INTERRUPCIN
1.
2.
3.
4.

Activacin del pin RB0/INT


Desbordamiento del TMR0
Cambio de estado de una de los 4 pines de ms peso
(RB7:RB4) del puerto B
Finalizacin de la escritura en la EEPROM de datos

REGISTRO INTCON
Este registro se encuentra ubicado en la posicin 0BH del banco
0 de los registros de funciones especiales (SFR). A continuacin
se describirn cada uno de sus bits:

09/01/16

ING. Luis Pacheco Cribillero

120

INTCON

GIE: (Global Interrupt Enable), Permiso Global de Interrupciones


1: Habilita todas las interrupciones, cuyos bits de permiso individuales
tambin las permitan
0: Deshabilita todas las interrupciones
EEIE: (EEPROM Interrupt Enable), Permiso de Interrupcin por fin
de escritura en la EEPROM
1: Habilita la interrupcin cuando termina la escritura de la EEPROM
de datos
0: Deshabilita esta interrupcin
TOIE: (TMR0 Overflow Interrupt Enable), Permiso de interrupcin
por desborde del TMR0
1: Habilita una interrupcin por desborde del TMR0
0: Deshabilita esta interrupcin
INTE: (Interrupt Enable RB0/INT), Permiso de interrupcin por
activacin del pin RB0/INT
1: Habilita la interrupcin al activarse RB0/INT
0: Deshabilita esta interrupcin

09/01/16

ING. Luis Pacheco Cribillero

121

INTCON

RBIE: (RB Port Change Interrupt Enable), Permiso de interrupcin


por cambio de estado en RB7:RB4
1: Habilita esta interrupcin
0: Deshabilita esta interrupcin
TOIF: (TMR0 Overflow Interrupt Flag), Sealizador de desborde del
TMR0
1: Ha ocurrido un desborde del TMR0
0: No se ha desbordado el TMR0
INTF: (RB0/INT Interrupt Flag), Sealizador de activacin del pin
RB0/INT
1: Se ha activado RB0/INT
0: No se ha activado RB0/INT
RBIF: (RB Port Change Interrupt Flag), Sealizador de cambio de
estado en RB7:RB4
1: Pasa a 1 cuando cambia el estado de alguna de estas 4 lneas
0: No ha cambiado el estado de RB7: RB4

09/01/16

ING. Luis Pacheco Cribillero

122

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 interrupcin.
Para salvar el entorno cuando ocurre una interrupcin 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 interrupcin (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.
09/01/16

ING. Luis Pacheco Cribillero

123

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 interrupcin
;
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 tena antes de
; entrar a la rutina de interrupcin

09/01/16

ING. Luis Pacheco Cribillero

124

Ejemplo. Realicemos un programa completo


que contenga varias interrupciones. Si la
causa ha sido la activacin 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
09/01/16

ING. Luis Pacheco Cribillero

RSI

125

CUANDO UTILIZAR UNA


INTERRUPCIN?

Una interrupcin es muy importante cuando deseamos realizar


una tarea que no dependa de una exploracin constante del
programa sobre la misma.
Tambin cuando deseamos que nuestro programa responda de
forma inmediata y automtica a determinados eventos.
Ejemplo del uso de Interrupcin:
En los sistemas de control, cuando se necesita un pulsador de
parada de emergencia (PARE).
En un diseo, 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
energa y esperando a que se pulse una tecla para iniciar una
rutina de servicio (CLAVE).
Cuando almacenamos informacin en la EEPROM y deseamos ser
advertidos de que sta se ha terminado (ALMACENAMIENTO).
Etc...

09/01/16

ING. Luis Pacheco Cribillero

126

Das könnte Ihnen auch gefallen