miércoles, 11 de febrero de 2009

SC. Repetición 3

Continuamos mostrando ejemplos de como usar las Sentencias de Control. En este caso, se tratará las de repetición.


Como estudio previo, es indispensable ver: SC. Bucle for con preincremento, 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 PIC10F204, se podría haber usado cualquiera, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC10F204.

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: Ej3.asm *
; Date: 11-Febrero-09 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
;**********************************************************************
; *
; Files Required: P10F204.INC *
; *
;**********************************************************************
; *
; Notes: En este programa, se muestra la utilización de las *
; sentencias de control, en este caso, la de repetición *
; de un bucle for con preincremento. *

;**********************************************************************

list p=10F204 ; Directiva para definir el procesador
#include < p10F204.inc > ; Registros especificas del procesador

__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC

; _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 0x10
Contador

Numero

ENDC


;**********************************************************************
ORG 0x01FF ; 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 0x0000 ; Inicio de código
movwf OSCCAL ; Actualiza el valor del oscilador interno a 4MHz

bcf CMCON0,CMPON ; Comparador Off
clrf GPIO
; 0 -> GPIO

movlw b'11011111'
OPTION ; GP2 pin I/0

clrw
TRIS GPIO
; GPI0-GP2 pin salida


Inicio
clrf Contador ; 0 -> Contador

movlw 0x08 ; Número de repeticiones
movwf Numero ; (W) -> Numero

FOR
incf Contador,F ; Contador ++
subwf Contador,W ; Contador - (W) -> (W)
btfss STATUS,Z ; ¿Contador == Numero?
goto Bucle_For ; NO -> Ve a Bucle_For
goto Salir ; SI -> Sal del bucle for

Bucle_For
incf GPIO,F ; GPIO ++
movf Numero,W ; Numero -> (W)
goto FOR ; NO -> Vuelve a FOR

Salir
clrf GPIO ; 0 -> GPIO
goto Inicio ; Vuelve a Inicio


END ; directiva 'fin de programa'

Para la realización de este programa, se han empleado dos variables definidas en memoria RAM. Para ello, se ha usado la instrucción:

cblock---endc

Dichas variables son Contador y Numero, que albergarán el índice de repeticiones y el número total de repeticiones del bucle for respectivamente.

El propósito de este programa consiste en mostrar el funcionamiento del bucle for con preincremento, la finalidad del programa es incrementar en una unidad el puerto GPIO del microcontrolador en dicho bucle.

Antes de empezar a evaluar el programa, se deberá configurar los periféricos internos del microcontrolador para un funcionamiento correcto.

Este microcontrolador, posee el módulo comparador entre otros periféricos, éste, se refleja en los pines del puerto que queremos usar, por lo tanto, se debe de desactivar.

Primero, desactivamos el módulo comparador, como se muestra a continuación:

            movlw  b'11011111'
OPTION

Posteriormente, configuraremos el puerto GPIO como salida.
clrw
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.

Una vez configurado todo, estaremos en disposición de realizar nuestro propósito inicial.

Para ver el resultado, compilamos el código y seleccionamos el MPLAB SIM para poder simularlo.

Abrimos la ventana de Watch y seleccionamos en la categoría de SFR, el registro WREG, STATUS y GPIO y de la categoría Symbol, seleccionaremos Contador y Numero.


El propósito de este programa es comprobar cómo funciona la sentencia de control de repetición, en este caso, la del bucle for con preincremento.

Este programa es bastante sencillito, se incrementará en una unidad el puerto GPIO dentro del bucle for con preincremento.



Se puede observar en el siguiente vídeo todo lo explicado anteriormente:



El presente vídeo se puede ver en YouTube en alta calidad:
SC3.

Una alternativa para la simulación, es usar programas como Proteus, donde se puede simular nuestro código con elementos electrónicos, tales como leds, motor, integrados, etc.

En nuestro caso, si ponemos una barra de leds al puerto GPIO (pines GPI0-GPI3), se podrá observar que, mientras entra en el bucle for, se incrementará en una unidad el puerto GPIO y se reflejará en la iluminación de la barra de leds.



El presente vídeo se puede ver en YouTube en alta calidad: SC3_Proteus.


Este proyecto se puede descargar en la siguiente dirección: SC. Repetición 3.

0 comentarios: