Continuamos mostrando ejemplos de como usar las Sentencias de Control. En este caso, se tratará las de repetición-condicional.
Como estudio previo, es indispensable ver: SC. Bucle do-while igualdad, donde se explica la sentencia de control que se usará en este ejemplo de aplicación en detalle.
Para la realización de este programa, se ha utilizado el microcontrolador PIC12F510, se podría haber usado cualquiera, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC12F510.El programa es el siguiente:
;**********************************************************************
; AqueronteBlog@gmail.com *
; *
; Este archivo es propiedad intelectual del blog Aqueronte, *
; cuya dirección web, es la siguiente: *
; *
; http://unbarquero.blogspot.com/ *
; *
; Se permite cualquier modificación del archivo siempre y cuando *
; se mantenga la autoría del mismo. *
; *
; El autor no se responsabiliza de las consecuencias que pueda *
; ocasionar éste código debido a un uso inadecuado del mismo. *
;**********************************************************************
; *
; Filename: Ej2.asm *
; Date: 5-Marzo-09 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
;**********************************************************************
; *
; Files Required: P12F510.INC *
; *
;**********************************************************************
; *
; Notes: En este programa, se muestra la utilización de las *
; sentencias de control, en este caso, la de *
; repetición-condicional de un bucle do-while que ejecuta *
; un bucle hasta que se cumpla la condición de igualdad. *
;**********************************************************************
list p=12F510 ; Directiva para definir el procesador
#include < p12F510.inc > ; Registros especificas del procesador
__CONFIG _IOSCFS_ON & _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSCZ
; _IOSCFS_ON: Frecuencia de reloj interno a 8MHz.
; _MCLRE_ON: Reset externo ACTIVADO.
; _CP_OFF: Protección del código DESACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _IntRC_OSC: Oscilador interno de 4MHz.
;***** DEFINICIÓN DE VARIABLES
cblock 0Ah ; Inicio RAM
Numero
endc
;**********************************************************************
ORG 0x03FF ; Dirección del valor del oscilador interno
; El valor del oscilador interno se localiza en la dirección 0xFF
; como una instrucción movlw k, donde k es el valor de configuración del oscilador.
ORG 0x000 ; Inicio de código
movwf OSCCAL ; Actualiza el valor del oscilador interno
movlw b'11011111'
OPTION ; Transición Timer interna
bcf CM1CON0,C1ON ; Comparador OFF
andlw b'00111111'
andwf ADCON0 ; ADC OFF
clrf GPIO ; Reset GPIO
movlw 0xFF
TRIS GPIO ; GP0-GP2 Entradas digitales
Inicio
movlw 0x02
movwf Numero ; (W) -> Numero
Do_while
movf GPIO,w ; GPIO -> (W)
subwf Numero,w ; Numero - (W) -> (W)
btfss STATUS,Z ; ¿Numero == GPIO?
goto Do_while ; NO -> Vuelve a Do_While
goto Inicio
END ; directiva 'fin de programa'
Para la realización de este programa, se ha empleado una variable definida en memoria RAM. Para ello, se ha usado la instrucción:
cblock---endc
Dicha variable es Numero.
También se va a usar los pines del puerto GPIO del microcontrolador, exactamente GP0-GP5.
Para ello, se deben configurar adecuadamente. Lo primero que haremos, es que la transición del Timer sea interna, así se podrá configurar el pin GP2 como entrada. Se debe poner a '0' el bit T0CS del registro OPTION.
movlw b'11011111'
OPTION..............
.............................bcf CM1CON0,C1ON
Y por último, se debe "apagar" también el periférico del convertidor A/D.
.......
andlw b'00111111'
andwf ADCON0
Para ello, los bits ANS1 y ANS0 deben ser puestos a '0' en el registro ADCON0 como se muestra en las instrucciones anteriores.
Una vez configurados todos los periféricos de tal manera que se puedan usar los pines como entrada o salida digitales, se realiza el último paso de configuración, los pines cómo entrada digitales.
movlw 0xFF
TRIS GPIO
Para ello, usamos la instrucción siguiente:
TRIS
Que se encarga de configurar si los pines son de entrada o salida. Para ser de entrada, debe escribirse un '1' y para ser de salida un '0' en el bit correspondiente al pin a configurar.
El propósito de este programa consiste en mostrar el funcionamiento del bucle do-while igualdad, la finalidad del programa es ejecutar el bucle Do-While hasta que el puerto GPIO sea igual al valor de la variable definida en memoria RAM Numero.
Para ver el resultado, compilamos el código y seleccionamos el MPLAB SIM para poder simularlo.
Buscamos en la ventana Watch, en la parte Symbol la variable definida, en este caso la llamada Numero y la agregamos a la ventana de inspección, y en la parte de SFR, agregamos los registros STATUS, WREG y GPIO.
El propósito de este programa es comprobar cómo funciona la sentencia de control de repetición-condicional, en este caso, la del bucle do-while igualdad.
Este programa es bastante simple, se leerá el puerto GPIO y su contenido se almacenará en el registro de trabajo W, y se hará hasta que dicho valor sea igual al contenido de la variable Numero definida en memoria RAM, es decir, cuando GPIO valga 2, se terminará el bucle Do-While, según está expuesto en el programa.
En la simulación, para poder modificar los valores usaremos la aplicación que nos pone a nuestra disposición Microchip, Stimulus, donde configuraremos los pines GP0-GP5 como Toggle.
Así que para poder cambiar el estado de cualquier pin del PIC, deberemos pulsar sobre Fire (símbolo > de cada pin definido).
Por lo tanto, el bucle Do-While se ejecutará constantemente hasta que el pin GP1 sea '1' y los demás sean '0'.
Este tipo de sentencias de control es bastante usada y versátil, ya que es fácil adaptarla y modificarla para nuestros propósitos en concreto.
Se puede observar en el siguiente vídeo todo lo explicado anteriormente:
El presente vídeo se puede ver en YouTube en alta calidad: SC6.
Este proyecto se puede descargar en la siguiente dirección: SC. Repetición 6.
0 comentarios:
Publicar un comentario