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
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.decfsz PORTA, F
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:
Publicar un comentario