Skip to content

Instantly share code, notes, and snippets.

@petrosagg
Created October 10, 2024 15:55
Show Gist options
  • Select an option

  • Save petrosagg/7940197d5e979d1d0b606595aeeec883 to your computer and use it in GitHub Desktop.

Select an option

Save petrosagg/7940197d5e979d1d0b606595aeeec883 to your computer and use it in GitHub Desktop.
.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