miércoles, 9 de julio de 2008

Baseline. ProgBasico 3.

El siguiente programa pretende mostrar el uso de las instrucciones de incremento y decremento con salto.

Las estructuras de dichas instrucciones se puede encontrar en los siguientes enlaces: INCFSZ f, d y DECFSZ f, d.


Para la realización de este programa, se ha utilizado el microcontrolador PIC16F54, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC16F54.

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 veracidad de su autor. *
; *
; El autor no se responsabiliza de las consecuencias que pueda *
; ocasionar éste código debido a un uso inadecuado del mismo. *
;**********************************************************************
; *
; Filename: Incremento.asm *
; Date: 09-Julio-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P16F54.INC *
; *
;**********************************************************************
; *
; Notes: Uso de las instrucciones de Incremento y Decremento con *
; salto. *
;**********************************************************************

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

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC

; _CP_OFF: Protección del código DESACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo tipo Cristal/Resonador.

;***** DEFINICIÓN DE VARIABLES

; Ninguna para este programa

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

ORG 0x000 ; Inicio de código
Inicio
clrf PORTA ; Reset PORTA
clrf PORTB ; Reset PORTB
clrw ; (W) = 0
TRIS PORTA ; PORTA salida
TRIS PORTB ; PORTB salida


PuertoA
decfsz PORTA, F ; Resta binaria en el PortA
goto PuertoA ; Lo realiza 16 veces

PuertoB
incfsz PORTB, F ; Suma binaria en el PortB
goto PuertoB ; Lo realiza 256 veces

goto PuertoA ; Vuelta a empezar

END ; directiva 'fin de programa'
Para el caso de la instrucción de decremento y salto, se usado el puerto A del microcontrolador, el cual, en este caso, sólo dispone de 4 pines comprendidos desde RA0 hasta RA3.

Por lo tanto, cuando el programa llegue a la instrucción

decfsz  PORTA, F

Realizará la operación de resta binaria y si el resultado es cero, no ejecutará la instrucción posterior, sino que se la saltará para ejecutar la siguiente.

En caso contrario, es decir, que cuando realice la resta y su resultado no sea cero, ejecutará la siguiente instrucción.

Si el puerto A empieza desde cero, al estar compuesto de 4 bits, realizará la operación de decremento 16 veces ().

Una vez el resultado del decremento del registro del puerto A sea cero, se pasará a ejecutarse el bloque donde se muestra como utilizar la instrucción de incremento.

Se ha usado el puerto B para tal caso, que está compuesto por 8 bits. La forma de actuar es similar al bloque de decremento.

Se empieza con el valor a cero en el puerto B, y se irá incrementando cada vez que llegue a la siguiente instrucción:
incfsz  PORTB, F

Como ya se ha comentado anteriormente, el puerto B está compuesto por 8 bits, por lo tanto se realizará la operación de incremento 256 veces ().

Cuando la suma sea cero, es decir, cuando se rebose el registro del puerto B, se saltará la siguiente instrucción y se volverá a repetir todo el proceso desde el principio.

Una cosa a tener en cuenta al usar los registros de los puertos del microcontrolador, es configurarlos correctamente, ya que pueden actuar como entrada o como salida.

En este caso, vamos a escribir sobre ellos, por lo tanto debemos configurarlos como salida.

Para este fin, Microchip pone a disposición del programador la instrucción:

TRIS

Para que un pin sea de salida, se debe escribir un 0 en su bit correspondiente, en cambio para que sea de entrada, se escribirá un 1.

En este programa, se han definido los puertos A y B como salida, para ello se ha usado el siguiente bloque de instrucciones:

  clrw              ; (W) = 0
TRIS PORTA ; PORTA salida
TRIS PORTB ; PORTB salida
Se carga en el registro de trabajo W el valor de configuración de los puertos, como ambos son de salida, se carga W con el valor de 0 y se usa la instrucción de configuración TRIS para configurar los puertos.



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

Abrimos la ventana de Special Finction Registers para poder visualizar los cambios en los registros correspondientes a los puertos A y B, en este caso PORTA y PORTB respectivamente.

Simulamos el código paso a paso para observar como se va decrementando el registro PORTA para el bloque de código siguiente:

PuertoA 
decfsz PORTA, F ; Resta binaria en el PortA
goto PuertoA ; Lo realiza 16 veces




Y como se va incrementando el registro PORTB para el bloque de código siguiente:

PuertoB
incfsz PORTB, F ; Suma binaria en el PortB
goto PuertoB ; Lo realiza 256 veces




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





Este proyecto se puede descargar en la siguiente dirección:
Incremento.
Incremento.

0 comentarios: