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:
kompiliert mit dieser LIB Änderung: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
völlig fehlerfrei. (Bascom V1.11.8.2)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]
Versuche es nochmal, wenn es dann noch nicht klappt, fällt mir schon noch was ein.
Grüße
Henrik







Zitieren

Lesezeichen