#define __SFR_OFFSET 0
#include <avr/io.h>
.global main
asmDelay:
ldi r30, 32 ; Load 0b00100111 to r30 (high byte).
ldi r31, 15 ; Load 0b00010000 to r31. (low byte).
delayLoop:
sbiw 30, 1 ; Subtract 1 from word in r30.
brne delayLoop ; When != 1, branch to "delay_loop".
subi r24, 1 ; Subtract 1 from r18.
brne asmDelay ; When != 1, branch to "delay".
ret ; Return.
main:
sbi DDRB, 0 ; Set pin mode to OUTPUT for PB0.
loop:
sbi PORTB, 0 ; Set PB0 state to HIGH.
ldi r24, 255 ; Prepare r24 for delay.
rcall asmDelay ; Delay.
cbi PORTB, 0 ; Set PB0 state to HIGH.
ldi r24, 255 ; Prepare r24 for delay.
rcall asmDelay ; Delay.
rjmp loop ; Repeat.