Bei nachfolgendem Assemblerteil in BASCOM wird PB1 abgefragt und nach einem Wechsel auf "1" TCNT1 gelöscht (als Counter intern hochgezählt) und nach 32 Wechseln an PB1 die Schleife verlassen um das Ergebnis in TCNT1 weiter zu verarbeiten. Die vorherge Variante in BASCOM lief einwandfrei. Die ASM-zeilen laufen im BASCOM-Simulator auch korrekt. In der Praxis gibt es irgendwo einen Hänger. Warum ? $asm push R16 lds r16,sreg 'Statusregister einlesen und push r16 'auf den Stack schieben push r17 push R26 'X-Register frei machen Push R27 L1: in R16,PortB 'PortB nach R16 laden bst r16,1 'Bit PB1 aus Register16 in das T-Flag laden BRTS L1 'Springe nach L1 wenn T=1 (auf 0 wartten) L2: in R16,PortB 'PortB nach R16 laden bst r16,1 'Bit PB1 aus Register16 in das T-Flag laden BRTC L2 'Springe nach L2 wenn T=0 (auf 1 warten) clr R16 'Register16 löschen Out Tcnt1h , R16 'Timerregister high löschen Out Tcnt1l , R16 'Timer1register low löschen ldi R17,32 'Schreifenregister mit 32 laden Schleife: L3: in R16,PortB 'PortB nach R16 laden bst r16,1 'Bit PB1 aus Register16 in das T-Flag laden BRTS L3 'Springe nach L3 wenn T=1 (auf 0 warten) L4: in R16,PortB 'PortB nach R16 laden bst r16,1 'Bit PB1 aus Register16 in das T-Flag laden BRTC L4 'Springe nach L4 wenn T=0 (auf 1 warten) dec R17 'Schreifenzähler um 1 vermindern BRNE Schleife 'Schleife nochmal ausführen 'Timerregister auslesen und nach W at &H60 speichern in R16,tcnt1l sts &H60,R16 in R16,tcnt1h sts &H61,R16 Fertig: Pop R27 pop R26 'X-Register pop R17 pop R16 'Statusregister zurückholen sts sreg,R16 '... und zurückschreiebn pop R16 $end Asm
> in R16,PortB 'PortB nach R16 laden
Port einlesen: in R16, PINB
Thomas
PORTB ist die Adresse für "in", kein Befehl wie PINB, Einlesen eines Ports in BASCOM basti
HI Auf den ersten Blick: > lds r16,sreg 'Statusregister einlesen und .... > sts sreg,R16 '... und zurückschreiebn Welchen Wert hat 'sreg'. Normalerweise wird auf SREG mit in/Out zugegriffen. MfG Spess
Vielen Dank an Thomas. PINB ... das wars.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.