ich möchte vom port a lesen und die schalterstellungen auf port d ausgeben. folgender code: ldi r17, 0x00 out DDRA,r17 ldi r20, 0xff out PORTA, r20 ; Port A als eingang und pull up widerstände aktivieren in r25, PORTA ldi r16, 0xff out DDRC, r16 out PORTC, r25 die schalter liegen auf masse also müßte alles richtig verdrahte sein. jedoch funktioniert das nicht. was mache ich falsch?
Hi, zum lesen immer die PINx-Register verwenden. Also in r25, PINC Wenn du das PORTx-Register schreibst/liest steuerst du damit nur die Pullups.
eine frage hätt ich noch kann ich die PINS auch einzeln einlesen? PINA ist in der m16def.inc so definiert: ; PINA .equ PINA7, 7 .equ PINA6, 6 .equ PINA5, 5 .equ PINA4, 4 .equ PINA3, 3 .equ PINA2, 2 .equ PINA1, 1 .equ PINA0, 0 wenn ich im programm allerdings in r25, PINA4 schreibe statt PINA funktioniert nichts mehr
Du kannst die Pins mit einer Maskierung einzeln einlesen in r25, PINA ;PINA in r25 einlesen ;Maskieren mit 0b00010000 (1 << 4 bzw. 1 << PINA4): andi r25, (1 << PINA4) PINA4 ist nur die Zahl (Bitnummer) 4 zugeordnet. Ansonsten hat PINA4 keine Funktion. Der Assembler versteht in dem oben von Dir verwendeten Beispiel PINA4 als Register-Adresse. Dann kann es auch nicht funktionieren. Mit einem Skip-Befehl kannst Du den Pin separat auswerten: sbis PINA, 4 oder sbis PINA, PINA4 Ansonsten: Assembler-Befehlssatz mal genauer ansehen und v.a. verstehen, was die einzelnen Befehle machen und wie sie funktionieren! Gruß Johnny
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.