Beruflich Dokumente
Kultur Dokumente
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
09/01/16
Lgica de
Control
Memoria
de Datos
ALU
Memoria
de Programa
Perifricos
09/01/16
Bus de Control
Memorias
Controladores
Controladores
Perifricos
Perifricos
C
Perifricos
Memoria
CPU
Instrucciones
+
Datos
Bus de datos e
instrucciones
09/01/16
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
Proceso
que se desea controlar
Microcontrolador
Microcontrolador
Informacin
09/01/16
09/01/16
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
10
09/01/16
11
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
68 Bytes
64 Bytes
Pila de programa
8 Niveles
Interrupciones
4 tipos diferentes
RISC
35
Frecuencia Mxima
10 MHz
Temporizadores
2 (TMR0(3) y WDT(4))
13 (5 Puerto A, 8 Puerto B)
80 mA PA/150 mA PB
50 mA PA/100 mA PB
25 mA
20 mA
Voltaje de alimentacin
2 a 6 VDC
Voltaje de programacin
12 a 14 VDC
Encapsulado
09/01/16
13
09/01/16
14
HARDWARE PIC16F84
09/01/16
15
Descripcin/Funcin
VDD
VSS
Tierra
FOSC1/CLKIN
FOSC2/CLKOUT
MCLR/VPP
RA4:RA0
RB7:RB0
09/01/16
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
09/01/16
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
18
FRECUENCIA DE FUNCIONAMIENTO
09/01/16
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
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
21
CIRCUITOS DE RESET
09/01/16
22
09/01/16
23
Con Display
09/01/16
24
Con Rel
Con optoacoplador
09/01/16
25
09/01/16
26
TEMA 2:
REGISTROS, INSTRUCCIONES Y
BANCOS DE MEMORIA
ESTRUCTURA DE DATOS
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
BYTE BAJO
28
09/01/16
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
30
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)
31
REGISTROS Y BANCOS
09/01/16
32
MEMORIA RAM
DE REGISTROS
09/01/16
33
09/01/16
34
DIRECTIVA EQU
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
35
ESTRUCTURA DE UN PROGRAMA
Encabezado
Configuracin,
Declaracin de
Registros,
Datos,
Constantes.
org
Cuerpo del
Programa
end
09/01/16
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
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
38
ESTRUCTURA DE UN PROGRAMA
4. Un programa siempre empieza con la instruccin org y termina
con end
5. Considere las siguientes recomendaciones:
39
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
B
41
DESCRIPCIN
FLAGS AFECTADOS
addwf f,d
(W)+(f) a (destino)
C, DC, Z
andwf f,d
clrf f
clrw
00 a (W) (borrar W)
comf f,d
decf f,d
decfsz f,d
Ninguno
incf f,d
incfsz f,d
Ninguno
iorwf f,d
movf f,d
mover f a destino
movwf f
Ninguno
nop
No operacin
Ninguno
rlf f,d
rrf f,d
subwf f,d
(f)(W) a (destino)
C,DC,Z
swapf f,d
Ninguno
xorwf
f,d
09/01/16
42
DESCRIPCIN
FLAGS AFECTADOS
bcf f,b
Ninguno
bsf f,b
Ninguno
btfsc f,b
Ninguno
btfss f,b
Ninguno
(W)+ K a (W)
C,DC,Z
andlw k
call k
Llamada a subrutina
Ninguno
clrwdt
goto k
Ninguno
iorlw k
(W) OR K a (W)
Ninguno
movlw k
K a (W)
Ninguno
retfie
Ninguno
retlw k
Ninguno
return
C,DC,Z
sleep
Modo Stand by
sublw k
K (W) a W
C, DC, Z
09/01/16
xorlw k
43
09/01/16
44
09/01/16
45
TEMA 3. HERRAMIENTAS
DE PROGRAMACIN
INSTRUCCIONES DE
MANIPULACIN DE BITS
09/01/16
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
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
RESULTADO DE OPERACIONES
LGICO/ARITMTICAS
09/01/16
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
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
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
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
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
54
CONFIGURANDO UN PUERTO
3.
09/01/16
55
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
;
;
;
;
56
Bit a bit:
bsf
STATUS,5
; (1) Seleccin de Banco 1
bcf PuertoA,2
; (2) Salida o Entrada?
57
58
09/01/16
59
; RB0= 1
; RB1= 0
; RA4= 1
60
09/01/16
61
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
; 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
; RA0=1?
64
09/01/16
65
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
----------------
PORTA,0
ProcesoA
ProcesoB
PORTB,0
SIGUE
PORTB,1
SIGUE
; RA0=1?
66
Condicin
X=1?
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
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
68
SI
CARGA movlw
movwf
Z=1?
NO
35H
SUMA
btfss
STATUS,2
goto
ProcesoA
goto
Carga
ProcesoA
09/01/16
69
09/01/16
70
TEMA 3. RUTINAS
INTERMEDIAS
SUBRUTINA
MIENTRAS SE
PRESIONA
UNA TECLA
TECLA
PRESIONADA?
NO
SI
DELAY 10 ms
PROCESO A
09/01/16
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
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
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
75
ENMASCARAMIENTO
09/01/16
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
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
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
79
TEMPORIZANDO SIN EL
USO DEL TMR0
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
80
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
81
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
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
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
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
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
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
87
MULTIPLEXACIN DE DISPLAYS
1)
2)
3)
4)
5)
6)
7)
8)
9)
09/01/16
88
MULTIPLEXACIN DE DISPLAYS
MOSTRAR
DIG1W
WPORTA
HABI DISP1
RETARDO 1ms
DIG2W
WPORTA
HABI DISP2
RETARDO 1ms
RETURN
09/01/16
89
ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
1
MOSTRAR
INCF CONTADOR,1
NO
CONTADOR
=9?
SI
CONTADOR=0
MOSTRAR
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
91
ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
1
MOSTRAR
DECF CONTADOR,1
NO
CONTADOR
=0?
SI
CONTADOR=9
MOSTRAR
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
93
09/01/16
94
09/01/16
95
TEMA 4. TIMER 0
REGISTROS ASOCIADOS AL
TEMPORIZADOR TMR0
97
09/01/16
98
EJEMPLOS DE CONFIGURACIN
bxx11xxxx1
movwf
OPTION
09/01/16
En el segundo caso:
movlw
bxx0x0100
movwf
OPTION
99
TEMPORIZADOR TMR0
09/01/16
100
QU ES EL PRESCALER?
09/01/16
101
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
102
09/01/16
103
OTROS EJEMPLOS
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.
Temporizac in
1.5ms
(256 N10) = 4 TOSC Rgodivisor = 4 100ns RgoDivisor
N10 = 256 - (3750/RgoDivisor)
09/01/16
104
09/01/16
105
09/01/16
106
107
1segundo
200.32
4.992ms
108
09/01/16
109
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
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
09/01/16
Programa Principal
Subrutina
112
09/01/16
113
OTRA
09/01/16
114
09/01/16
115
TEMA 5. INTERRUPCIONES
INTERRUPCIONES
Instruccin 2
Instruccin 1
Instruccin 3
Instruccin 2
Instruccin 24
RETFIE
Instruccin 25
Instruccin N
Fin de programa
09/01/16
118
DIAGRAMA DE
FLUJO RSI
09/01/16
119
CAUSAS DE INTERRUPCIN
1.
2.
3.
4.
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
120
INTCON
09/01/16
121
INTCON
09/01/16
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
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
124
Programa Principal
09/01/16
RSI
125
09/01/16
126