Files
01_atmega328_lauflicht/main.asm

60 lines
1.4 KiB
NASM

;==========================
; Author: Marcel Schirmer
; Date: 31.05.2025
;==========================
.nolist
.include "./m328Pdef.inc"
.list
.def setter = R16
.def overflows = R17
.def active_led = R18
.org 0x0000
rjmp init
.org 0x0020
rjmp overflow_handler
.include "./macros.inc"
init:
;--
; Output Ports definieren
;----
ser setter
out DDRD, setter ; Alle LEDs standardmäßig aus
;--
; Timer/Counter konfigurieren
;----
ldi setter, 0b00000011
out TCCR0B, setter ; CLK/1024 ergibt 250.000 Timer-Ticks/Sekunde
ldi setter, 0b00000001
sts TIMSK0, setter ; Timer-Interupt aktivieren
sei ; globale Interrups aktivieren
;--
; Definiere Startzustand
;----
ldi setter, 0
out TCNT0, setter ; Timer/Counter explizit mit 0 initialisieren
ldi setter, 0b00000001
out PORTD, setter
main:
;--
; Dreh Dräumchen und lass den Timer-Interrupt die Show leiten
;----
rjmp main
overflow_handler:
inc overflows
cpi overflows, 246 ; bei ~980 Überläufe/Sekunde entsprechen 245 Überläufe ca. 250ms
brne overflow_handler_exit ; early Return wenn Schwellenwert noch nicht erreicht
clr overflows ; Überlaufzähler kontrolliert zurücksetzen
left_to_right active_led
overflow_handler_exit:
reti