#define __SFR_OFFSET 0
#include <avr/io.h>
// Registerbelegung
#define Freq0 r2
#define Freq1 r3
#define Freq2 r4
#define Freq3 r5 // 32 Nutzbits
#define saveSREG r6
#define Phase0 r7
#define Phase1 r8
#define Phase2 r9
#define Phase3 r10 // muss gerade sein
#define Phase4 r11 // 34 Nutzbits
#define saveZL r12
#define saveZH r13
.global TIMER0_COMPA_vect
TIMER0_COMPA_vect:
// ISR: „Überlauf“ Timer0 mit (bis zu) 20 MHz/64 = 312 kHz
in saveSREG,SREG
add Phase0,Freq0
adc Phase1,Freq1
adc Phase2,Freq2
adc Phase3,Freq3
brcc 1f
inc Phase4
1: movw saveZL,ZL
movw ZL,Phase3
ori ZH,0xFC // in den hintersten Flash-Bereich (400..7FF) eingrenzen
out SREG,saveSREG
lpm saveSREG,Z
out OCR1A,saveSREG // das verändert keine Flags mehr
movw ZL,saveZL
reti // = 4+16+4 = 24 Takte
Vorgefundene Kodierung: UTF-8 | 0
|