Hallo, Ich arbeite gerade mit einem Atmega168 und komme bei einer Sache nicht weiter. Ich nutze bei PORTD (alle Pins Ausgang) die Pins PD0 bis PD6 zur Ansteuerung eines LCD Displays, wie man schon sieht, ist PD7 noch unbenutzt. Ich würde allerdings gerne noch etwas machen mit diesen Pins aber wie? Also wie kann ich an dem Ausgang dort auf High wechseln, ohne das die anderen Pins beeinflusst werden und z.B. Müll auf dem Display erscheint? Außerdem müsste ich noch abfragen können, ob PD7 gerade High oder Low ist. Wäre nett wenn mir das mal jemand kurz zeigen könnte wie es geht :) MfG FX
Portpin setzen = zu setztende Bits (High) mit aktuellem Portzustand verodern. Portpin löschen = alle nicht zu verändernden Bits High, das zu vernändernde Bit Low (das wäre dann auch das invertierte Byte vom setzen).
FX schrieb: > Also wie kann ich an dem Ausgang dort auf High wechseln, ohne das die > anderen Pins beeinflusst werden und z.B. Müll auf dem Display erscheint? Am einfachsten geht das wohl mit den Assembler-Befehlen sbi und cbi:
1 | sbi PORTD,PD7 |
2 | cbi PORTD,PD7 |
> Außerdem müsste ich noch abfragen können, ob PD7 gerade High oder Low > ist. Geht recht gut mit sbis und sbic. P.S.: ich seh grad, die Leute vor mir haben sehr gute Links gepostet. Beide sehr zu empfehlen.
Ah Danke, das klappt schon mal. Aber wie überprüfe ich jetzt ob dieser Pin high oder low ist? Vorher habe ich auf 0b10000000 geguckt, aber es kann ja z.B. auch 10000011 sein, das ist dann ein anderes Ergebnis aber das 7.bit ist ja trotzdem high.
steht doch lang und breit im schon verlinkten http://www.mikrocontroller.net/articles/Bitmanipulation
Oha, hätte wohl vorher nochmal aktualisieren sollen :D Danke für die Hilfe, klappt alles :)
http://www.mikrocontroller.net/articles/Bitmanipulation#Bits_pr.C3.BCfen müssen wir es vorlesen ? also.... Der AVR hat spezielle Befehle um direkt einzelne Bits in den CPU-Registern r0..r31 sowie den IO-Registern 0..0x1F zu prüfen..... Also auch drauf achten das deine Ports auch in dem Bereich liegen sonst gehen die Befehle nicht.
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.