sábado, 25 de octubre de 2008

Mid Range PIC. Ejemplo 9

Este programa consiste en familiarizarnos más con el diseño de subrutinas en lenguaje ensamblador.

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


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

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: Ejemplo9.asm *
; Date: 20-Octubre-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
; *
;**********************************************************************
; *
; Files Required: P16F77.INC *
; *
;**********************************************************************
; *
; Notes: Crear y usar una subrutina. *
; *
;**********************************************************************

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

__CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _CP_OFF: Protección de código DESACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.

;***** DEFINICIÓN DE VARIABLES
; Ninguna variable es usada para este programa


;**********************************************************************
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
nop

call Subrutina ; Llamada a la Subrutina

sleep ; uC entra en modo Sleep


goto Inicio
; Vuelve a Inicio

;**********************************************************************
; *
; Subrutina: Subrutina *
; *
;**********************************************************************
; *
; Date: 20-Octubre-08 *
; File Version: vs0.0 *
; *
; Author: Manuel Caballero *
; Company: Hades *
; *
;**********************************************************************
; *
; NOTAS: Carga un literal al registro de trabajo W *
; *
; Datos de Salida: *
; · W *
; *
;**********************************************************************
Subrutina
nop
nop

retlw d'15' ; Fin de subrutina: 15 -> (W)

END ; directiva 'fin de programa'
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 diseña y se usa una subrutina simple, pero esta vez, la instrucción de fin de subrutina carga un literal al registro 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 SFR, el registro WREG.

Simulamos el código paso a paso.

El propósito de este programa es diseñar una subrutina cuya función sea cargar un literal en el registro de trabajo W cuando salga de la subrutina, posteriormente el microcontrolador entrará en modo de bajo consumo, denominado Sleep.



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





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

0 comentarios: