Hallo Dirk,
nicht gut, daß das Fehler ergibt, gut, daß Du Dich nochmal meldest.
Mir sind bei meinem "aus dem Gedächtnisgeschreibsel" nach Überprüfung folgende Abweichungen zu meiner in Betrieb befindlichen LIB aufgefallen:
1) ich habe das Label warte0 mit einem führenden Unterstrich verziert.
2)@genus hatte ich auskommentiert, weil die 80 Takte bei 8 MHz ja schon 10 µS Wartezeit entsprechen. Das haut dann auch hin.
Mein Kurztestprogramm:
Code:
$regfile = "m8def.dat"
'$regfile = "m168def.dat"
'$regfile = "m32def.dat"
$crystal = 7372800
'$crystal = 14745600
'$crystal = 16000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Config Pind.3 = Input
Dim Value0 As Word
'-------------------------------------------------------------------------------
Do
Pulsein Value0 , Pind , 3 , 0 'detect time from 0 to 1
Loop
End
kompiliert mit dieser LIB Änderung:
Code:
_pulse_in5: ; FÜR 7.3xx MHZ ------------------
; @genus(9)
; Warteschleife für insgesamt 73 Takte)
push r17 ; 2 Zyklen -------------------
; warte 57 Zyklen:
ldi R17, $13
_warte0:
dec R17
brne _warte0
; ----------------------------- 63 Zyklen
; warte 2 Zyklen:
nop
nop
; =============================
pop r17 ; 2 Zyklen ------------------
Ld r0,z ; 2 cycl. get pin state
And r0, r24 ; 1 cycl. get only the input pin state
Eor r0,r16 ; 1 cycl. xor with begin state
Brne _pulse_in_exit ; 2 cycl. ready ,state changed
Adiw xl,1 ; 2 cycl. counter
brne _pulse_in5 ; 2 cycl. again
_pulse_in_timeout:
call _Set_Error ; set error because of time out
_pulse_in_exit:
; X holds timing
Mov r24,XL ; store data here
Mov R25,XH
Ret
[END]
völlig fehlerfrei. (Bascom V1.11.8.2)
Versuche es nochmal, wenn es dann noch nicht klappt, fällt mir schon noch was ein .
Grüße
Henrik
Lesezeichen