Hi René,
sinnvoller scheint es, die Werte erst aufzuaddieren, dann durch deren
Anzahl zu dividieren. Lies die Werte doch über X, Y oder Z indirekt ein.
Ich gehe dabei davon aus, dass die Werte hintereinander im RAM liegen
und bei Adresse data anfangen. Optimal sollte ANZAHL=2_hoch_n sein
#define ANZAHL 10
.def suml r20
.def sumh r21
.def null r0
.dseg
.org SRAM_START
data: BYTE ANZAHL
.cseg
.org DEINE_ANFANGSADRESSE
;..... anderer Code hier
clr null ; ist auch für andere Zwecke später zu gebrauchen!
;..... anderer Code hier
mittelw:
ldi r16, ANZAHL
clr sumh
clr suml
ldi XL, low(data)
ldi XH, high(data)
lp: ld r17, X+
add suml,r17
adc sumh,null
dec r16
brne lp
; jetzt suml/sumh "nur" noch durch ANZAHL dividieren......
; (vielleicht bei 7-10 Werten durch eine Division durch 8 (3*
; Rechtsshift) annähern (?) -- sonst bleibt Dir nur die "echte"
; Divisionsroutine (ist von Atmel in Dokument "AVR200"
; beschrieben)
asr sumh
ror suml
asr sumh
ror suml
asr sumh
ror suml
Gruß
Fred