//Salman Taş 20191701044
void setup() {
asm volatile (
".equ DDRD, 0x0A \n" // DDRD (Data Direction Register of PORTD)
".equ PORTD, 0x0B \n" // PORTD I/O Address
"ldi r24, 0x01 \n" // Load 0x01 into register r24
"out PORTD, r24 \n" // Set PORTD out with r24
"mainProgram: \n" // this main program shift left 7 times
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n" // out the port every time
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsl r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" jmp ReversemainProgram \n" // jump nother progrem called ReversemainProgram (not main)
"ReversemainProgram: \n" // this program shift right 7 times
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n" // out everytime
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" lsr r24 \n"
" call delay \n"
" out PORTD, r24 \n"
" jmp mainProgram \n" // jump to mainProgram to shift left again
// with jumping between subroutines, I managed to continuous knight rider effect
// same delay function as in-class activities
"delay: \n"
" ldi r18, 0x00 \n"
" ldi r19, 0xD4 \n"
" ldi r20, 0x30 \n"
"repeat: \n"
" subi r18, 1 \n"
" sbci r19, 0 \n"
" sbci r20, 0 \n"
" brcc repeat \n"
" ret \n"
);
}
void loop() {
// put your main code here, to run repeatedly:
}