viernes, 10 de octubre de 2008

Mid Range PIC. Ejemplo 3

En este programa se profundizará en las instrucciones de incremento y decremento de registros, aparte, se tratará la instrucción de complemento de bits de un registro.


En definitiva, se trata de manejar más el lenguaje ASM de los microcontroladores de la empresa Microchip.


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


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

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: Ejemplo3.asm *
; Date: 6-Octubre-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P16F877A.INC *
; *
;**********************************************************************
; *
; Notes: Manejar instrucciones de operaciones. *
; *
;**********************************************************************

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

__CONFIG _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _DEBUG_OFF & _XT_OSC & _CPD_OFF

; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _CP_OFF: Protección de código DESACTIVADO.
; _WRT_OFF: Protección de escritura de código DESACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _LVP_OFF: Programación en bajo voltaje DESACTIVADO.
; _DEBUG_OFF: Modo Debug en el circuito DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.
; _CPD_OFF: Protección de datos de eeprom DESACTIVADO.

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

;**********************************************************************
ORG 0x000 ; 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
movlw d'23' ; 23 -> (W)
movwf Contador ; (W) -> Numero


Bucle
incf Contador,F ; Contador++

comf Contador,F ; Complementa bits de Contador

decf Contador,F ; Contador--


goto Bucle
; Vuelve a Bucle

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 Contador.

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 decremento e incremento y también se muestra como usar la instrucción de complemento de bits de un registro.



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 Contador, y el la categoría de SFR, el registro WREG.

Simulamos el código paso a paso.

Se puede apreciar como el valor de la constante se almacena en el registro de trabajo W, después se iniciará la variable Contador con el valor contenido en W, posteriormente se incrementará en una unidad y se almacenará en la variable Contador, después se complementarán los bits y por último se decrementará en una unidad su contenido.



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





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

0 comentarios: