Lab Zero

martes, 17 de marzo de 2009

Este Viernes tenemos un laboratorio demostrativo. Les prepare el siguiente codigo para que se vayan familiarizando con la programacion en assembly con el ATMEGA64L.
Antes unos enlacea para el software que necesitan y material basico:
AVR Studio 4 - Plataforma IDE.
AVR Device Programmer - Programacion AVR con el cable Digilent.
Atmega64L - Documentacion.
Atmega64L Summary - Resumen, incluye set de instrucciones.

Para ver el codigo presiona aqui


; lab0.asm
.NOLIST
.INCLUDE "m64def.inc"
; (Los nombres "de manual"para registros ATMEGA64)
.LIST
; Genera un archivo de lista (ver lab0.lst)
; Ejemplo de retardo utilizando Macros
.MACRO Delay
ldi @0,@1
loop:
subi @0,1
NOP
NOP
NOP
NOP
NOP
brne loop
.ENDMACRO

; Segmento de Codigo
.CSEG
.ORG 0x0000
RJMP Start ; Salto a Comienzo del Codigo (Atiende a RESET)
;RJMP RutinaInt0 ; Salto a Rutina de atencion a INT0
;RJMP RutinaInt1 ; Salto a Rutina de atencion a Rutina INT1
; ... Continuacion de Vectores de interrupcion Vea la tabla 23. Pag 61.
Start:
;;Inicializacion del stack (Ver pag 14)
ldi R16,low(RAMEND) ;al final de la RAM (crece hacia abajo)
out SPL,R16
ldi R16,high(RAMEND)
out SPH,R16
;; Fin inicializacion
ldi R16,0xF0 ; Cargando 0xF0 en DDRE los 4 MSB del puerto E
out DDRE,R16 ; Se configuran como salida.
ldi R16,0x80 ; Se carga b'10000000 en R16
out PORTE,R16 ; Se carga R16 en la puerta de salida E
ldi R19,7 ; Contador para Iterar
main_loop:
call DelayR
lds R17,PING
sbrc R17,PING4
lsr R16 ; Desplazamiento hacia la izquierda
out PORTE,R16
subi R19,1
breq Start ; Luego de 7 empezamos denuevo
rjmp main_loop

; Ejemplo de retardo por subrutina
DelayR:
push R18
push R17
ldi R18,200
loopR:
Delay R17,255
subi R18,1
brne loopR
pop R17
pop R18
ret

Publicado por Ronald en 7:18  

0 comentarios:

Publicar un comentario