martes, 8 de julio de 2008

Baseline. ProgBasico 2.

En este programa, se va a usar la instrucción de intercambio de bits de la parte alta a la parte baja:

swapf f, d

La estructura de dicha instrucción se puede encontrar en el siguiente enlace: SWAPF f, d

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

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: Intercambio.asm *
; Date: 08-Julio-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P12F508.INC *
; *
;**********************************************************************
; *
; Notes: Intercambio parte Alta con la parte Baja de una variable *
; *
;**********************************************************************

list p=12F508 ; Directiva para definir el procesador
#include < p12F508.inc > ; Registros especificas del procesador

__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSCZ

; _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 07h ; Inicio RAM
Var
endc

;**********************************************************************
ORG 0x01FF ; Dirección del 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

movlw 0xFE
movwf Var

Inicio
swapf Var, W ; Intercambio parte alta con parte baja
goto Inicio


END ; directiva 'fin de programa'

Ya que la instrucción encargada de realizar el intercambio trabaja con registros, se ha definido una variable en la memoria RAM, para ello, se usa la siguiente instrucción:

cblock------endc

En este caso, el inicio para el PIC12F508 es la dirección 0x07.

Dicha variable temporal, se ha llamado Var, cuya longitud es de 8-bits y presentará la siguiente estructura:


Una vez ejecutada la instrucción de intercambio, la parte más significativa, Msb, pasará a la parte menos significativa, Lsb, y la parte menos significativa a la más significativa.

Habrá un intercambio de cuatro bits en la variable definida. En este ejemplo, se va ha almacenar el valor en hexadecimal 0xFE, se ejecutará la instrucción de intercambio de bits y se almacenará en la propia variable definida, Var.

Por lo tanto, una vez ejecutada la instrucción, en la variable Var el valor será de 0xEF, y si se vuelve a ejecutar la instrucción, volverán a cambiarse los bits.



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

Abrimos la ventana de Watch para poder visualizar los cambios en la variable que se ha declarado para poder observar como se intercambia la parte más significativa con la menos significativa.

Buscamos en la ventana Watch, en la parte Symbol la variable definida, en este caso la llamada Var y la agregamos a la ventana de inspección.



Donde se puede observar, que la dirección de memoria de la variable Var es la que se ha definido en la RAM, la 0x07.

Una vez llegado a este punto, simulamos el código y vemos que llegado al punto de la instrucción:

swapf Var, F

Es donde se intercambia el nibble Msb y el nibble Lsb, y se almacena en la variable Var.



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





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

0 comentarios: