Curso Micro Tema 3 2

Post on 08-Jul-2015

4.857 views 0 download

description

Tema 3 complementario de Microcontroladores I del IUT Cumaná

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