;e-Bake mit voller gregorianischer Schaltjahreslogik ; Gueltig und mathematisch exakt fuer die Jahre 2026 bis 3000! ; Erzeugt die 8.3333 kHz Grundfrequenz auf PB0 via Timer 0 (CTC) ; Taktfrequenz des ATmega328P: 1 MHz (Werkseinstellung) ;------------------------------------------------------------------------------- .include "m328pdef.inc" ;--- Registerdefinitionen --- .def temp = r16 .def seconds = r17 ; 0-59 .def minutes = r18 ; 0-59 .def months = r19 ; 1-12 .def carrier_on = r20 ; 1 = 8.3333 kHz senden, 0 = Ruhe .def hours = r22 ; 0-23 .def days = r23 ; 1-31 .def years_L = r24 ; Aktuelles Jahr 16-Bit Paar (r24:r25) .def years_H = r25 ; Warteschleifen-Register (unterer Block) .def dcnt1 = r2 .def dcnt2 = r3 .def dcnt3 = r4 ; Arbeitsregister fuer die 16-Bit-Division .def rem_L = r6 .def rem_H = r7 .def quot_L = r8 .def quot_H = r9 ;------------------------------------------------------------------------------- ; Interrupt-Vektortabelle ;------------------------------------------------------------------------------- .org 0x0000 rjmp RESET .org OC1Aaddr rjmp TIMER1_COMPA_ISR ; Uhrentakt: Jede Sekunde ein Interrupt .org OC0Aaddr rjmp TIMER0_COMPA_ISR ; Traeger-Takt: Alle 60 Mikrosekunden (16.666 kHz Toggle) ;------------------------------------------------------------------------------- ; Initialisierung & Startwerte via X3 ;------------------------------------------------------------------------------- RESET: ; Stackpointer initialisieren ldi temp, low(RAMEND) out SPL, temp ldi temp, high(RAMEND) out SPH, temp ; PB0 als Ausgang definieren ldi temp, (1< 16.666 kHz Toggle-Rate (8.3333 kHz Sinus) out OCR0A, temp ldi temp, (1<