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
Code:
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
Anders und vermutl. besser geht' sicher auch
Ein bisschen kann man noch sparen, wenn "empf" komplett im adressbereich < 256 liegt.
Lesezeichen