sábado, 4 de octubre de 2008

Suma vista por el puerto pero con retardo

;********************************************************************************************************
;*****PROGRAMA QUE SUMA UNOS DATOS Y LOS ALMACENA EN LA MEMORIA *****
;********************************************************************************************************

.include "m32def.inc"
.def temp=r16

.def suma=r17

;Por el momento haremos un programa muy básico para demostrar algunas de las funciones del micro

RESET:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND) ;configuración del Stack Pointer para uso de subrutinas
out SPH, temp

ser temp ;con esta instrucción se carga el número 255 a r16
out DDRA, temp ;confiduración del puerto Acomo salida
clr temp ;instrucción que borra el contenido de r16
rjmp INICIO

;***** SECCION DE SUBRUTINAS *****
; =============================

; delay loop generator
; 100000 cycles:
; -----------------------------
; delaying 99990 cycles:
RETARDO_A:
ldi R17, $A5
WGLOOP0:
ldi R18, $C9
WGLOOP1:
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 9 cycles:
ldi R17, $03
WGLOOP2:
dec R17
brne WGLOOP2
; -----------------------------
; delaying 1 cycle:
nop
ret

;***** PROGRAMA PRINCIPAL *****

INICIO:
inc temp
sts 0x60, temp
lds temp, 0x60
add suma, temp
sts 0x61, suma
lds suma, 0x61
rcall RETARDO_L ;instruccion que hace un llamado a subrutina
out PORTA, suma ;visualización del resultado en el puerto A
rjmp INICIO

;NOTA:;El stack pointer es un puntero de pila que se utiliza para almacenar datos temporales, para almacenar;variables locales y almacenar el regreso de direcciones despues de llamados a subrutinas, así como;tambien despues de ejecutarse las interrupciones.;Para mas explicación ver la hoja de datos del ATMEGA32 en su sección del stack pointer

;NOTA:
;ir a la página principal para descargar el software generador de retardos para las siguientes aplicadiones...

No hay comentarios: