Curso Micro Tema 3 2
-
Upload
luis-zurita -
Category
Documents
-
view
4.853 -
download
0
description
Transcript of Curso Micro Tema 3 2
TEMA 3. RUTINAS INTERMEDIAS
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
SUBRUTINA MIENTRAS SE PRESIONA UNA TECLA
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
TECLAPRESIONADA?
NO
SI
DELAY 10 ms
PROCESO A
PRESIONAR TECLA Y ESPERAR A QUE SE SUELTE PARA EJECUTAR SUBRUTINA
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
Tecla Presionada?
Retardo 10 ms
NO
SI
Tecla Soltada?
NO
SI
Retardo 10 ms
Proceso A
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 instrucción ideal para este es la “and”
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
ENMASCARAMIENTO
DatoA equ 12HDatoL equ 23HDatoH equ 4EH
movlw 4CH ; Cargamos a w con 4CHmovwf DatoA ; Transferimos 4CH a wmovlw 0FHandwf 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 éstemovlw F0Handwf DatoA,0 ; Neutralizamos el nibble menos
; significativo de DatoAmovwf DatoHswapf DatoH ; Intercambiamos nibbles
; en DatoH para ordenarlo.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
ENMASCARAMIENTO
• También se puede neutralizar un bit o varios bits, selectivamente, según sea nuestra conveniencia.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
CALL K
INICIO
INSTRUCC A
INSTRUCC B
INSTRUCC C
CALL PROX
INSTRUCC D
FIN
PROX
INSTRUCC 1
INSTRUCC 2
RETURN ó RETLW K
PCL
27H
28H
29H
2AH
2BH
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
PROGRAMA PRINCIPAL
SUBRUTINA
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.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
CALL K
M (09H)
N (1FH)
O (2AH)
L (05H)
K (03H)
P (2EH)
Q (30H)
R (3CH)
T (40H)
PILA (STACK) (PCL)
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
TEMPORIZANDO SIN EL USO DEL TMR0
• 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.
IUT Cumaná
Prof. Luis Zurita
EJEMPLO DE UN RETARDO POR SOFTWARE SIN TMR0
RETARDO movlw d’16’ ; (1 ciclo)movwf REG2 ; Cargamos REG1 con 16 (1 ciclo)
DOS movlw 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)
TRESdecfsz 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.
IUT Cumaná
Prof. Luis Zurita
RUTINA DE CONVERSIÓN BINARIO A BCD (8 BITS)
INICIO
DATOX W→
W RESP→
U=0D=0C=0
RESP= RESP-100
C=0?
incf C,1
incf D,1
MOSTRAR ENDISPLAY
FIN
RESP= RESP+100
RESP= RESP-10
C=0?
RESP= RESP+10
RESP= RESP-1
C=0?
incf U,1NO
SI
SI SI
NO
NO
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
RUTINA DE CONVERSIÓN DE BCD A BINARIO (8 BITS)
INICIO
DAT=0
UNI=XDEC=YCEN=Z
CEN=CEN-1
C=0?
DAT=DAT+100
DAT=DAT+10
RETURN
DEC=DEC-1
C=0?
UNI=UNI-1
C=0?
DAT=DAT+1
NO
SI
NO
NO
SI SI
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
TABLAS
• 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.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
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’
…
…
…
retlw ‘ValorN’
Puntero + PCL
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
VARIAS OPCIONES
TECLA1ACT?
NO
SIProceso B
TECLA2ACT?
NO
SI
TECLA2ACT?
Proceso D
Proceso A
Proceso C
NO
SI
TECLA3ACT?
SINO
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
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.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
MULTIPLEXACIÓN DE DISPLAYS• Paso a paso: (Asumamos que tenemos tres displays)
1) Se activa display de UNIDAD2) Se desactiva el resto de los displays3) Se muestra el dato de UNIDAD
4) Se desactiva los displays de UNIDAD y CENTENA
5) Se activa el display de DECENA6) Se muestra el dato de DECENA
7) Se desactivan los displays de UNIDAD y DECENA8) Se activa el display de CENTENA9) Se muestra el dato de CENTENA
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
MULTIPLEXACIÓN DE DISPLAYS
MOSTRAR
DIG1 W→W PORTA→
HABI DISP1
RETARDO 1ms
HABI DISP2
DIG2 W→W PORTA→
RETARDO 1ms
RETURN
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
CONTADOR=0
MOSTRAR
MOSTRAR
INCF CONTADOR,1 CONTADOR=9?
1
1
NO
SI
CONTADOR ASCENDENTE SIMPLE
CONTADOR ASCENDENTE COMPLEJO INICIO
UNI=0
DEC=0
RETARDO
UNI=0
MOSTRAR
INCF DEC,1
RA0=1?
1
1
NO
SI
MOSTRAR
UNI=9?
MOSTRAR
INCF UNI,1
NO
SI
NO
SI
DEC=9?
MOSTRAR DEC=0
ESTRUCTURA DE CONTADORES
INICIO
CONTADOR=0
MOSTRAR
CONTADOR=9
MOSTRAR
MOSTRAR
DECF CONTADOR,1 CONTADOR=0?
1
1
NO
SI
CONTADOR DESCENDENTE SIMPLE
CONTADOR DESCENDENTE COMPLEJO INICIO
UNI=0
DEC=0
RETARDO
UNI=9
MOSTRAR
DECF DEC,1
RA0=1?
1
1
NO
SI
MOSTRAR
UNI=0?
MOSTRAR
DECF UNI,1
NO
SI
NO
SI
DEC=0?
MOSTRAR DEC=9
DE LA IDEA AL PROGRAMA (PARTE I)
1. Delimitar / Diseñar el Hardware2. Diagrama de Flujo para establecer el
funcionamiento lógico3. 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
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores