Aqui hay un sitio dedicado a principiantes:
http://www.avr-asm-tutorial.net/avr_en/beginner/index.html
En todo caso, me tome la molestia de podar un codigo:
;
;**** Comienzo del segmento de codigo
.def RAMEND=1023 ; Fin de la RAM (ajustar de acuerdo al modelo)
.cseg ;Segmento CODE
.org 0 ; Contador de posicion a cero
rjmp reset ;Manejador del reset
nop ;interrupcion no atendid
nop ;interrupcion no atendida
nop ;interrupcion no atendida
;*** Manejador del reset **************************************************
;*** Configura el puerto
reset:
ldi R16,LOW(RAMEND) ; Inicializa el apuintador de pila
out SPL,R16
ldi R16,HIGH(RAMEND)
out SPH,R16
ser R16 ; R16 a unos
out DDRB,R16 ;Configura todo el puerto B como salidas
out PORTB,R16 ;Pone todas las patillas de B a uno
clr flags ;Borramos las banderas
;**** Parpadeo
blink:
ser R16 ; R16 a unos
out PORTB,R16 ;Pone todas las patillas de B a uno
rcall retardo
clr R16 ; R16 a ceros
out PORTB,R16 ;Pone todas las patillas de B a cero
rcall retardo
rjmp blink
; retardo simple
retardo:
ser r15 ; r15 a FFh
retardo1:
dec r15 ; decrementa
cpi r15,0 ; compara con cero
brne retardo1 ; si no es igual salta a retardo1
ret ; regresa de subrutina