ich versteh das immernoch nicht ganz mit dem Input: wenn ich einen Pin z.B. P3.0 als Input verwenden will, dann muss ich den ja erst auf Input stellen indem ich eine 1 auf in schreib also erst setb P3.0 und dann kann ich ihn z.B. so benutzen: jb P3.0, sonstwohin zwei Sachen versteh ich daran nicht: 1. warum muss ich denn erst eine 1 auf ihn schreiben? alle Pins sind doch von anfangan schon auf high, also Input 2. wenn ich erst setb P3.0 und dann jb P3.0 benutze, springt er dann nicht immer sonstwohin? ich stell ja sowiso P3.0 auf high oder kann der dann extern trotzdem auf low gezogen werden, und ich les 0 ein?
Die Angabe des verwendeten Controllers sowie der Programmiersprache könnten hier sicherlich hilfreich sein.
Der 8051 (und viele seiner Derivate) hat als Ausgang keine Push-Pull-Endstufe, sondern nur einen Open-Kollektor-Ausgang (teilweise mit internem Pull-Up). Wenn man jetzt mit "setp P3.0" den Ausgang auf H-Pegel setzt, dann gibt es keine Verbndung mehr zur Masse, und der Ausgang ist eher hochohmig, als dass er H-Pegel liefert (deswegen benutzt man bei diesen Controllern auch invertierte Logik, bspw. LEDs gegen + statt gegen Masse anschliessen). Wenn der Ausgangstransitor dann sperrt, kann man einen von aussen anliegenden Pegel "messen" (feststellen...). Zum "jb P3.0" müsste IMHO noch eine Adresse gehören (oder überspringt er einfach nur die folgende Zeile?) zu der er je nach logischem Wert springt. >kann der dann extern trotzdem auf low gezogen werden, und ich les >0 ein? ja genau.
sorry hab ich vergessen, ist ein 8051er: AT89C51ED2 Programmieren tu ich mit Assembler, aber das sieht man ja eigentlich >Wenn man jetzt mit "setp P3.0" den Ausgang auf H-Pegel setzt, dann >gibt es keine Verbndung mehr zur Masse eben das versteh ich nicht, beim starten des Mikrocontrollers sind ja alle ausgänge schon auf high, also warum erst nochmal auf high stellen bevor man die benutzen kann? >Zum "jb P3.0" müsste IMHO noch eine Adresse gehören ja stimmt mein Fehler, sollte so aussehen: jb P3.0, sonstwohin
>also warum erst nochmal auf high stellen bevor man die benutzen kann? Dann hat man zumindest einen gültigen Zustand am Pin. Hast du schon ausprobiert, ob man das wirklich machen muß? Ich würde dir sonst das Buch "Mikrocontroller Kochbuch" von Andreas Roth ans Herz legen. Darin wird ausschliesslich der 8051 behandelt, dafür aber auch sehr grundlegend.
>Dann hat man zumindest einen gültigen Zustand am Pin klar, aber ich müsste auch so schon einen haben, laut Atmel sind alle Pins von anfang an high ausprobieren tu ichs noch, im Moment hab ich auch wenn ich auf high stelle ein Problem mit dem einlesen, aber das kapier ich noch von alleine irgendwann hier hab ich das mit dem auf high schalten her: http://wwwiti.cs.uni-magdeburg.de/~buchmann/privat/ansteuerung.htm klar ist das ein anderes 8051 Derivat, aber ich denke in dem Punkt sind die alle gleich
ich habs jetzt mal mit folgendem Code ausprobiert: mov P3,#11111111b ; Die Quell-Pins auf Input stellen main: mov P1,P3 ; die Arbeit durchführen jmp main ; zurück zum Programmanfang springen den Code hab ich aus dem o.g. Tutorial, wenn ich die erste Zeile weglass, funktioniert das ganze nicht aber wozu nochmal auf high stellen wenn die Pins laut Atmel eh schon alle auf high sind?
ich probier jetzt nochmal mein Problem breiter auszulegen: also intern siehts ja so aus dass es für jeden I/O Port ein SFR gibt, die glaub ich auch Latch-Register genannt werden (P0, P1, P2, P3) jedes von den dingern umfasst 8 Bit, z.b. P3.0 - P3.7 steht jetzt bei P3.0 eine 0 in dem SFR von P3, so wird der Pin P3.0 direkt auf Masse gezogen, kann also schlecht extern auf high geschaltet werden, weswegen man ihn um ihn als Input zu verwenden erst auf high stellen muss steht bei P3.0 eine 1 im SFR, so wird Pin P3.0 mit einem Pullup Widerstand auf Vcc gezogen, ohne externe Beschaltung ist er dann also high, wegen dem Pullup Widerstand kann man ihn aber auch leicht extern auf low ziehen, dadurch lässt sich dann die Input Funktion realisieren ich hoff mal das hab ich soweit richtig verstanden das einzige was ich daran nicht versteh ist warum man wenn man z.B. P3 komplett als Input verwenden will, erst "mov P3, #11111111b" schreiben muss um alle Pins auf Input zu stellen der Reset Zustand ist doch in den SFRs von den einzelnen Ports sowiso 11111111b, also high wofür dann nochmal auf high stellen damit der Input funktioniert? es kann ja eigentlich nichts ändern wenn man einen Wert nochmal mit dem gleichen überschreibt
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.