sábado, 18 de octubre de 2008

Mid Range PIC. Ejemplo 7

El propósito de este programa es ilustrar como se usa las instrucciones de suma y de test de bit con posibilidad de salto.


En este programa, se centrará en manejar las siguientes instrucciones:


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

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 autor. *
; *
; El autor no se responsabiliza de las consecuencias que pueda *
; ocasionar éste código debido a un uso inadecuado del mismo. *
;**********************************************************************
; *
; Filename: Ejemplo7.asm *
; Date: 16-Octubre-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P16F88.INC *
; *
;**********************************************************************
; *
; Notes: Manejar instrucciones de suma y de test con salto. *
; *
;**********************************************************************

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

__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

; _CP_OFF: Protección de código DESACTIVADO.
; _DEBUG_OFF: Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF: Protección de código de datos DESACTIVADO.
; _LVP_OFF: Programación en baja tensión DESACTIVADO.
; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _MCLRE_ON: Reset por pin externo ACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.

__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.
; _FCMEN_OFF: Monitor de CLK DESACTIVADO.

;***** DEFINICIÓN DE VARIABLES
CBLOCK 0x20 ; Inicio dirección memoria de datos del Banco 0
Contador
ENDC

;**********************************************************************
ORG 0x0000 ; Inicio de código
goto Inicio ; Salta a programa principal

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

Inicio
clrw ; 0 -> (W)
clrf Numero ; 0 -> Numero

bsf Numero,3 ; 0000 1000 -> Numero

addlw 0x01 ; (W) + 0x01 -> (W)

Incrementa
addwf Numero,F ; (W) + Numero -> Numero
btfsc Numero,3 ; ¿Bit 3 del registro Numero == 0?
goto Incrementa ; NO -> Vuelve a Incrementa

goto Programa
; Vuelve a Programa

END ; directiva 'fin de programa'

Para la realización de este programa, se ha empleado una variable definida en memoria RAM. Para tal propósito, se ha usado la instrucción:

cblock---endc

Para este microcontrolador, la dirección de memoria de datos es 0x20, donde se declarará la variable Numero, que está en el banco 0 de la memoria de datos.

El propósito de este programa es familiarizarse con las instrucciones de programación en lenguaje ensamblador, donde se usará instrucciones que serán comunes en nuestros códigos.

En este programa se muestra como se utilizan las instrucciones de suma y de test de bit con posibilidad de salto.



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 la variable definida como Numero y de la categoría de SFR se selecciona el registro de trabajo WREG.

Simulamos el código paso a paso.

Lo que se puede observar es como se usan las instrucciones de suma tanto con el registro de trabajo W como con los registros en general, y posteriormente se mostrará como funciona la instrucción de test de bit con posibilidad de salto en caso que el bit que se esté controlando sea cero.



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





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

0 comentarios: