viernes, 20 de febrero de 2009

SC. Repetición-Condicional 1

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 infinito, 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 PIC16F914, se podría haber usado cualquiera, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC16F914.

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: Ej1.asm *
; Date: 20-Febrero-09 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
;**********************************************************************
; *
; Files Required: P16F914.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 infinito.
*
;**********************************************************************

list p=16F914 ; Directiva para definir el procesador
#include < p16F914.inc > ; Registros especificas del procesador

__CONFIG _DEBUG_OFF & _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

; _DEBUG_OFF: Debug en circuito DESACTIVADO, RB6 y RB7 I/O.
; _FCMEN_OFF: Monitor de fallo del CLK DESACTIVADO.
; _IESO_OFF: Switchover DESACTIVADO.
; _BOD_OFF: Brown-out Reset DESACTIVADO.
; _CPD_OFF: Protección de código de datos DESACTIVADO.
; _CP_OFF: Protección de código DESACTIVADO.
; _MCLRE_ON: Reset externo ACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _INTRC_OSC_NOCLKOUT: Oscilador interno RA6 y RA7 pines I/O.


;***** DEFINICIÓN DE VARIABLES
CBLOCK 0x20 ; RAM Banco 0
Contador
ENDC

;**********************************************************************
ORG 0x000 ; Vector de reset
goto Inicio

ORG 0x0004 ; Vector de interrupción
; El vector de interrupción se encuentra en la dirección 0x004
; En este ejemplo no se usará interrupciones.

retfie ; Fin de interrupción



Inicio

decf Contador,f ; Contador--

goto Inicio ; Vuelve a 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 Contador.

El propósito de este programa consiste en mostrar el funcionamiento del bucle do-while infinito, la finalidad del programa es decrementar de forma indefinida la variable Contador.

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 Symbol, seleccionaremos Contador.


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 infinito.

Este programa es bastante simple, se decrementará en una unidad una variable definida en memoria RAM llamada Contador en dicho bucle.

Este tipo de sentencias de control es bastante usada, ya que su utilización hace que el microcontrolador no termine de ejecutar un programa.


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



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


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

0 comentarios: