Created
October 10, 2024 15:55
-
-
Save petrosagg/7940197d5e979d1d0b606595aeeec883 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| .equ F_CPU = 16000000 ; Συχνότητα CPU 16 MHz για ATmega328 | |
| .equ DELAY_FACTOR = 100 ; Παράγοντας για τη διεύρυνση της καθυστέρησης | |
| ; Αρχικοποίηση stack pointer | |
| ldi r24, low(RAMEND) | |
| out SPL, r24 | |
| ldi r24, high(RAMEND) | |
| out SPH, r24 | |
| ; Ρύθμιση PORTD για έξοδο | |
| ldi r24, 0xFF | |
| out DDRD, r24 ; PORTD ως έξοδος | |
| ; Κύριος βρόχος | |
| main: | |
| ldi r26, 0x01 ; Αρχικοποίηση r26 για την κίνηση του LED από LSB σε MSB | |
| rcall left ; Καλούμε την υπορουτίνα που κινεί το LED προς τα αριστερά | |
| nop ; No operation, χρησιμεύει για debugging ή timing adjustments | |
| rcall right ; Καλούμε την υπορουτίνα που κινεί το LED προς τα δεξιά | |
| rjmp main ; Επιστροφή στην αρχή του κύριου βρόχου | |
| ; Υπορουτίνα για κίνηση του LED προς τα αριστερά (LSB προς MSB) | |
| left: | |
| out PORTD, r26 ; Αναμμένο το αντίστοιχο LED | |
| call Delay_2sec ; Καθυστέρηση 2 sec | |
| cpi r26, 0x80 ; Έλεγχος αν το LED είναι το MSB | |
| brne move_forward ; Συνέχιση κίνησης αν δεν είναι στο MSB | |
| call Delay_1sec ; Έξτρα 1 sec καθυστέρηση στο MSB | |
| rjmp right ; Αλλαγή κατεύθυνσης προς τα δεξιά | |
| move_forward: | |
| lsl r26 ; Μετακίνηση του LED προς τα αριστερά | |
| rjmp left ; Επιστροφή στην αρχή της υπορουτίνας | |
| ; Υπορουτίνα για κίνηση του LED προς τα δεξιά (MSB προς LSB) | |
| right: | |
| out PORTD, r26 ; Αναμμένο το αντίστοιχο LED | |
| call Delay_2sec ; Καθυστέρηση 2 sec | |
| cpi r26, 0x01 ; Έλεγχος αν το LED είναι το LSB | |
| brne move_back ; Συνέχιση κίνησης αν δεν είναι στο LSB | |
| call Delay_1sec ; Έξτρα 1 sec καθυστέρηση στο LSB | |
| rjmp left ; Αλλαγή κατεύθυνσης προς τα αριστερά | |
| move_back: | |
| lsr r26 ; Μετακίνηση του LED προς τα δεξιά | |
| rjmp right ; Επιστροφή στην αρχή της υπορουτίνας | |
| ; Υπορουτίνες καθυστερήσεων | |
| Delay_1sec: | |
| ldi r18, 255 | |
| outer_loop_1s: | |
| ldi r19, 255 | |
| inner_loop_1s: | |
| ldi r20, DELAY_FACTOR | |
| inner_inner_loop_1s: | |
| dec r20 | |
| brne inner_inner_loop_1s | |
| dec r19 | |
| brne inner_loop_1s | |
| dec r18 | |
| brne outer_loop_1s | |
| ret | |
| Delay_2sec: | |
| ldi r18, 255 | |
| outer_loop_2s: | |
| ldi r19, 255 | |
| inner_loop_2s: | |
| ldi r20, DELAY_FACTOR | |
| inner_inner_loop_2s: | |
| dec r20 | |
| brne inner_inner_loop_2s | |
| dec r19 | |
| brne inner_loop_2s | |
| dec r18 | |
| brne outer_loop_2s | |
| ret |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment