TEMA 3. RUTINAS INTERMEDIAS Prof. Luis Zurita Microcontroladores IUT Cumaná
SUBRUTINA MIENTRAS SE PRESIONA  UNA TECLA Prof. Luis Zurita Microcontroladores IUT Cumaná TECLA PRESIONADA? NO SI DELAY 10 ms PROCESO A
PRESIONAR TECLA Y ESPERAR A QUE SE SUELTE PARA EJECUTAR SUBRUTINA  Prof. Luis Zurita Microcontroladores IUT Cumaná 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”  Prof. Luis Zurita Microcontroladores IUT Cumaná
ENMASCARAMIENTO DatoA equ 12H DatoL equ 23H DatoH equ 4EH movlw 4CH ; Cargamos a w con 4CH movwf DatoA ; Transferimos 4CH a w movlw 0FH andwf DatoA,0  ; Neutralizamos el nibble ; más significativo de DatoA y lo  ; guardamos en w para no alterar el  ; contenido de DatoA movwf DatoL ; Lo guardamos en éste movlw F0H andwf DatoA,0  ; Neutralizamos el nibble menos  ; significativo de DatoA movwf DatoH swapf DatoH ; Intercambiamos nibbles  ; en DatoH para ordenarlo. Prof. Luis Zurita Microcontroladores IUT Cumaná
ENMASCARAMIENTO También se puede neutralizar un bit o varios bits, selectivamente, según sea nuestra conveniencia. Prof. Luis Zurita Microcontroladores IUT Cumaná
CALL K PCL 27H 28H 29H 2AH 2BH Prof. Luis Zurita Microcontroladores PROGRAMA PRINCIPAL SUBRUTINA INICIO INSTRUCC A INSTRUCC B INSTRUCC C CALL PROX INSTRUCC D FIN PROX INSTRUCC 1 INSTRUCC 2 RETURN ó RETLW K IUT Cumaná
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. Prof. Luis Zurita Microcontroladores IUT Cumaná
CALL K Prof. Luis Zurita Microcontroladores M (09H) N (1FH) O (2AH) L (05H) K (03H) P (2EH) Q (30H) R (3CH) T (40H) PILA (STACK) (PCL) IUT Cumaná
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. Prof. Luis Zurita IUT Cumaná
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) 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. Prof. Luis Zurita IUT Cumaná
RUTINA DE CONVERSIÓN BINARIO A BCD (8 BITS) Prof. Luis Zurita Microcontroladores INICIO DATOX ->W W ->RESP U=0 D=0 C=0 RESP= RESP-100 C=0? incf C,1 incf D,1 MOSTRAR EN DISPLAY FIN RESP= RESP+100 RESP= RESP-10 C=0? RESP= RESP+10 RESP= RESP-1 C=0? incf U,1 NO SI SI SI NO NO IUT Cumaná
RUTINA DE CONVERSIÓN DE  BCD A BINARIO (8 BITS) Prof. Luis Zurita Microcontroladores INICIO DAT=0 UNI=X DEC=Y CEN=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á
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. Prof. Luis Zurita Microcontroladores IUT Cumaná
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 Prof. Luis Zurita Microcontroladores TABLA addwf PCL,1 retlw ‘Valor0’ retlw ‘Valor1’ retlw ‘Valor2’ … … … retlw ‘ValorN’ Puntero + PCL IUT Cumaná
VARIAS OPCIONES Prof. Luis Zurita Microcontroladores TECLA1 ACT? NO SI Proceso B TECLA2 ACT? NO SI TECLA2 ACT? Proceso D Proceso A Proceso C NO SI TECLA3 ACT? SI NO IUT Cumaná
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. Prof. Luis Zurita Microcontroladores IUT Cumaná
MULTIPLEXACIÓN DE DISPLAYS Paso a paso: (Asumamos que tenemos tres displays) Se activa display de UNIDAD Se desactiva el resto de los displays Se muestra el dato de UNIDAD 4)  Se desactiva los displays de UNIDAD y CENTENA 5) Se activa el display de DECENA 6) Se muestra el dato de DECENA 7) Se desactivan los displays de UNIDAD y DECENA 8) Se activa el display de CENTENA 9) Se muestra el dato de CENTENA Prof. Luis Zurita Microcontroladores IUT Cumaná
MULTIPLEXACIÓN DE DISPLAYS Prof. Luis Zurita Microcontroladores MOSTRAR DIG1 ->W W->PORTA HABI DISP1 RETARDO 1ms HABI DISP2 DIG2->W W->PORTA RETARDO 1ms RETURN IUT Cumaná
ESTRUCTURA DE CONTADORES CONTADOR ASCENDENTE SIMPLE INICIO CONTADOR=0 MOSTRAR CONTADOR=0 MOSTRAR MOSTRAR INCF CONTADOR,1 CONTADOR =9? 1 1 NO SI
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 CONTADOR DESCENDENTE SIMPLE INICIO CONTADOR=0 MOSTRAR CONTADOR=9 MOSTRAR MOSTRAR DECF CONTADOR,1 CONTADOR =0? 1 1 NO SI
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) Delimitar / Diseñar el Hardware Diagrama de Flujo para establecer el funcionamiento lógico 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 Prof. Luis Zurita Microcontroladores IUT Cumaná

Curso Micro Tema 3 2

  • 1.
    TEMA 3. RUTINASINTERMEDIAS Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 2.
    SUBRUTINA MIENTRAS SEPRESIONA UNA TECLA Prof. Luis Zurita Microcontroladores IUT Cumaná TECLA PRESIONADA? NO SI DELAY 10 ms PROCESO A
  • 3.
    PRESIONAR TECLA YESPERAR A QUE SE SUELTE PARA EJECUTAR SUBRUTINA Prof. Luis Zurita Microcontroladores IUT Cumaná Tecla Presionada? Retardo 10 ms NO SI Tecla Soltada? NO SI Retardo 10 ms Proceso A
  • 4.
    ENMASCARAMIENTO Este procesoes 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” Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 5.
    ENMASCARAMIENTO DatoA equ12H DatoL equ 23H DatoH equ 4EH movlw 4CH ; Cargamos a w con 4CH movwf DatoA ; Transferimos 4CH a w movlw 0FH andwf DatoA,0 ; Neutralizamos el nibble ; más significativo de DatoA y lo ; guardamos en w para no alterar el ; contenido de DatoA movwf DatoL ; Lo guardamos en éste movlw F0H andwf DatoA,0 ; Neutralizamos el nibble menos ; significativo de DatoA movwf DatoH swapf DatoH ; Intercambiamos nibbles ; en DatoH para ordenarlo. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 6.
    ENMASCARAMIENTO También sepuede neutralizar un bit o varios bits, selectivamente, según sea nuestra conveniencia. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 7.
    CALL K PCL27H 28H 29H 2AH 2BH Prof. Luis Zurita Microcontroladores PROGRAMA PRINCIPAL SUBRUTINA INICIO INSTRUCC A INSTRUCC B INSTRUCC C CALL PROX INSTRUCC D FIN PROX INSTRUCC 1 INSTRUCC 2 RETURN ó RETLW K IUT Cumaná
  • 8.
    CALL K Elllamado 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. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 9.
    CALL K Prof.Luis Zurita Microcontroladores M (09H) N (1FH) O (2AH) L (05H) K (03H) P (2EH) Q (30H) R (3CH) T (40H) PILA (STACK) (PCL) IUT Cumaná
  • 10.
    TEMPORIZANDO SIN ELUSO 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. Prof. Luis Zurita IUT Cumaná
  • 11.
    EJEMPLO DE UNRETARDO 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) 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. Prof. Luis Zurita IUT Cumaná
  • 12.
    RUTINA DE CONVERSIÓNBINARIO A BCD (8 BITS) Prof. Luis Zurita Microcontroladores INICIO DATOX ->W W ->RESP U=0 D=0 C=0 RESP= RESP-100 C=0? incf C,1 incf D,1 MOSTRAR EN DISPLAY FIN RESP= RESP+100 RESP= RESP-10 C=0? RESP= RESP+10 RESP= RESP-1 C=0? incf U,1 NO SI SI SI NO NO IUT Cumaná
  • 13.
    RUTINA DE CONVERSIÓNDE BCD A BINARIO (8 BITS) Prof. Luis Zurita Microcontroladores INICIO DAT=0 UNI=X DEC=Y CEN=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á
  • 14.
    TABLAS Las tablasnos 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. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 15.
    TABLAS Normalmente, cuandose 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 Prof. Luis Zurita Microcontroladores TABLA addwf PCL,1 retlw ‘Valor0’ retlw ‘Valor1’ retlw ‘Valor2’ … … … retlw ‘ValorN’ Puntero + PCL IUT Cumaná
  • 16.
    VARIAS OPCIONES Prof.Luis Zurita Microcontroladores TECLA1 ACT? NO SI Proceso B TECLA2 ACT? NO SI TECLA2 ACT? Proceso D Proceso A Proceso C NO SI TECLA3 ACT? SI NO IUT Cumaná
  • 17.
    MULTIPLEXACIÓN DE DISPLAYSLa 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. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 18.
    MULTIPLEXACIÓN DE DISPLAYSPaso a paso: (Asumamos que tenemos tres displays) Se activa display de UNIDAD Se desactiva el resto de los displays Se muestra el dato de UNIDAD 4) Se desactiva los displays de UNIDAD y CENTENA 5) Se activa el display de DECENA 6) Se muestra el dato de DECENA 7) Se desactivan los displays de UNIDAD y DECENA 8) Se activa el display de CENTENA 9) Se muestra el dato de CENTENA Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 19.
    MULTIPLEXACIÓN DE DISPLAYSProf. Luis Zurita Microcontroladores MOSTRAR DIG1 ->W W->PORTA HABI DISP1 RETARDO 1ms HABI DISP2 DIG2->W W->PORTA RETARDO 1ms RETURN IUT Cumaná
  • 20.
    ESTRUCTURA DE CONTADORESCONTADOR ASCENDENTE SIMPLE INICIO CONTADOR=0 MOSTRAR CONTADOR=0 MOSTRAR MOSTRAR INCF CONTADOR,1 CONTADOR =9? 1 1 NO SI
  • 21.
    CONTADOR ASCENDENTE COMPLEJOINICIO 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
  • 22.
    ESTRUCTURA DE CONTADORESCONTADOR DESCENDENTE SIMPLE INICIO CONTADOR=0 MOSTRAR CONTADOR=9 MOSTRAR MOSTRAR DECF CONTADOR,1 CONTADOR =0? 1 1 NO SI
  • 23.
    CONTADOR DESCENDENTE COMPLEJOINICIO 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
  • 24.
    DE LA IDEAAL PROGRAMA (PARTE I) Delimitar / Diseñar el Hardware Diagrama de Flujo para establecer el funcionamiento lógico 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 Prof. Luis Zurita Microcontroladores IUT Cumaná