so, soweit möglich getestet:
Besonderheiten:
"dummy" dient nur dazu, damit Bascom bei "Loadadr" keinen Index verlangt, verbraucht aber keinen Platz (Overlay) . könnte man auch anders machen, however.
"channel" Bascom verlangt Index 1-5. das ist aber ungünstig zu rechnen. Besser 0-4 . man braucht dadurch nur auf > 4 ( >= 5) zu prüfen
Anders und vermutl. besser geht' sicher auchCode:Dim Empf(5) As Word Dim Dummy As Byte At Empf Overlay Dim Channel As Byte Getreceiver: 'falling edge detection $asm PUSH r24 PUSH r25 PUSH XL PUSH XH !IN r24, SREG PUSH r24 LDS r24, {channel} ' channel 0-4 ( Bascom 1-5) CPI r24, 5 ' >= 5 --> skipped BRSH _out_of_range LSL r24 ' * 2 (wordlength) CLR r25 ' clear (r24 kann ja nicht grösser als 8 werden) Loadadr Dummy , X ' addr Empf(0) ADD XL, r24 ' addr Empf + 2*channel ADC XH, r25 !IN r24, TCNT0 ' timer0 ST X+ , r24 ' empf(channel) = timer0 ST X , r25 _out_of_range: LDS r24, {channel} ' channel 0-4 ( Bascom 1-5) INC r24 STS {channel}, r24 LDI r24, 6 !OUT TCNT0, r24 POP r24 !OUT SREG, r24 POP XH POP XL POP r25 POP r24 $end Asm Return
Ein bisschen kann man noch sparen, wenn "empf" komplett im adressbereich < 256 liegt.







Zitieren


Lesezeichen