Hallo alle, ich weiss nicht wo, aber irgendwo hab ich einen Denkfehler. Hab folgende kleine Testfunktion geschrieben: byte Test(void) { DDRB = 0xff; DDRD = 0x00; PORTB = 0xff; LCD_PrintHex(PIND); } So - nun hätte ich mir erwarten auf dem Display "FF" zu sehen. Tatsächlich seh ich nur "00". Warum das?
Hi, versuch's mal mit PORTD. Da ich aber nicht weiss, wie die Funktion "LCD_PrintHex()" aussieht, bin ich auch net sicher ob es so funktioniert. Aber was soll denn der Sinn davon sein?
Du setzt Port B auf Ausgang, Port D auf Eingang, setzt Port B auf ff und liest Pin D ein. Alles korrekt. Wenn du anstelle DDRD = 0x00 ein DDRB = 0x00 schreibst oder LCD_PrintHex(PINB), sollte das Ergebnis entsprechend sein. MW
@Phillip: Ich möchte ein RS232-Signal, das an einem Pin anliegt einlesen. PORTD anstelle von PIND kann nicht richtig sein, da ich mit PORTD lediglich den Status der PullUp-Widerstände einlese. @Michael: Ich habe PORTD und PORTB mit einem Kabel direkt verbunden, und möchte nun auf dem einen (PORTB) ein Signal rausschreiben - kein Problem mit PORTB = 0xff - und auf dem anderen (PORTD) das nun anliegende Signal empfangen - so dachte ich, ganz einfach mit x = PIND. Aber anscheinend habe ich doch irgendetwas nicht berücksichtigt. Und ich komme nicht drauf. Dass is PORTD als Eingang definiere, müsste sogar überflüssig sein, da PINx immer den Pinstatus liefert. Ich hoffe noch auf den rettenden Einfall. Das kann doch nur eine Kleinigkeit sein - oder? GF
- Aufbau deienr PrintHex-Funktion - Endlosschleife am Ende - Verkabelungsfehler ...
byte Test(void) { DDRB = 0xff; DDRD = 0x00; _NOP(); // Damit funktionierts PORTB = 0xff; LCD_PrintHex(PIND); } Zum einsynchronisieren fehlte offensichtlich diese NOP() funktion.
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.