sábado, 4 de octubre de 2008

Mid Range PIC. Ejemplo 1.

Este es el primer programa de la entrega de programas básicos que constará de manejar y por tanto, poder familiarizarse con el lenguaje ASM de programación para la familia mediana de Microchip.

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


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

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: Ejemplo1.asm *
; Date: 4-Octubre-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P16F84A.INC *
; *
;**********************************************************************
; *
; Notes: Manejar instrucciones de carga y salto. *
; *
;**********************************************************************

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

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; _CP_OFF: Protección del código DESACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _PWRTE_ON: Retraso 72ms al reset para estabilizar la alimentación.
; _XT_OSC: Oscilador externo tipo XT.


;***** DEFINICIÓN DE VARIABLES
CBLOCK 0x0C ; Inicio dirección memoria de datos
Numero
ENDC

CTE EQU d'10' ; Constante de valor decimal 10

;**********************************************************************
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
movlw CTE ; CTE -> (W)
movwf Numero ; (W) -> Numero


clrw ; (W) = 0
clrf Numero ; Numero = 0

goto Inicio
; Vuelve a Inicio

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

Teniendo en cuenta que el PIC 16F84A comienza la dirección de memoria de datos en la dirección 0x0C, se declarará la variable Numero.

También se usará una constante, para ello, se usa la instrucción EQU y se le ha dado el valor 0x0A.

CTE EQU d'10'

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 mueven datos tanto de una variable como de una constante con el registro de trabajo W.



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 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 Numero con el valor contenido en W, y por último, tanto el registro de trabajo W como la variable Numero se ponen a cero y vuelta a empezar.



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





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

0 comentarios: