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'
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, FEn 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 salidaPara 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