Hallo Leute, kurze Frage: Gibt es eine Alternative zum pinmode() Command in Assembler bzw. Wie stell ich auf einem 8051 basierten Microcontroller ein, das ein Port als Eingang fungiert, um eine logische 1 oder 0 einzulesen. PS: Benutzen KeilUVision5 als IDE, falls dies von Relevanz ist (In Bezug auf Libarys etc.) Danke für folgende Tipps LG
AssemblerMichi schrieb: > Gibt es eine Alternative zum pinmode() Command in Assembler pinmode() ist eine Funktion. Guck dir mal das Data Direction Register (DDR) an.
viele alte microcontroller haben nur open drain ausgänge mit (externem) pullup.
Sind I/O Ports mit internem Pull UP Widerstand wenns jemand genau wissen will, ist ein AT89C5131
Und was genau ist jetzt dein Problem? Registerzugriffe mit Assembler oder Datenblattverständniss?
Das Problem liegt daran, wie Ich das ganze realisiere im Programm. Wir arbeiten mit einem Fotowiderstand der eine logische 1 an den Microcontroller senden soll, sodass auf die Umstände reagiert werden kann. Das Problem ist das zwar die logische 1 durch das Kabel an den Microcontroller gelangen sollte, dieser aber jedoch nichts damit anfangen kann und somit immer logisch 0 sprich keine Veränderung anzeigt. Dazu müsste es ja in Assembler einen Befehl geben, probiere demnächst das mit dem DDR, bin mir aber auch noch unschlüssig wie das entgültig gehen soll, weil in der DDR immer von Port A-D geredet wird, und wir Port 1-4 haben, macht das einen Unterschied? Muss ich etwas ändern?
Beitrag #5008760 wurde von einem Moderator gelöscht.
Hi >Programmier es doch einfach mit der Arduino IDE in C++. Da kommt ma vom Regen in die Traufe. Gegen das was Arduino macht ist schlechter Assembler immer noch besser. >Ich versteh >diese ASM Leute nicht, die ganze Zeit geilen sie sich an ASM auf, aber >sinnvoll ist es in nahezu keinem Fall. Ganz im Gegenteil. Der Code ist >schlecht lesbar und unnötig komplex, ... Da gehe ich davon aus, daß du von Assembler keinen blassen Schimmer hast. MfG Spess
Wolfgang schrieb: > Guck dir mal das Data Direction Register (DDR) an. Hat der (ursprüngliche) 8051 nicht. Man darf die Eingänge eines 8051 nicht aktiv H treiben, wenn man den Ausgang auf L gesetzt hat. Also: Portpin auf H setzen und extern dann auf L ziehen. Wenn Du den Port dann einliest, liest Du auch ein L. AssemblerMichi schrieb: > Sind I/O Ports mit internem Pull UP Widerstand Na bitte ... Gruß Jobst
AssemblerMichi schrieb: > Wir > arbeiten mit einem Fotowiderstand der eine logische 1 an den > Microcontroller senden soll Fotowiderstände senden keine logischen Pegel. Zeig mal eure Hardware (Schaltplan)
Dieter schrieb im Beitrag #5008760: > Programmier es doch einfach mit der Arduino IDE in C++. Ich versteh > diese ASM Leute nicht, die ganze Zeit geilen sie sich an ASM auf, aber > sinnvoll ist es in nahezu keinem Fall. 1. Arduino hat nichts mit 8051 zu tun. 2. Hört sich der Text an, als bekam ein Berufsschüler eine Aufgabe, die er lösen will. Also erübrigt sich jede Sinn-Diskussion daher.
AssemblerMichi schrieb: > stell ich auf einem 8051 basierten Microcontroller ein, das ein Port als > Eingang fungiert, um eine logische 1 oder 0 einzulesen. Beim originalen 8051 schreibt man einfach eine 1 in das entsprechende Port Bit - die sind nämlich Open Drain. Aber Achtung: Moderne 8051-kompatible können auch Push-Pull Ausgänge haben, die dann mit den entsprechenden SFRs konfiguriert werden müssen. Da muss man dann das Handbuch (Manual) zum µC lesen.
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.