Forum: Mikrocontroller und Digitale Elektronik pinmode() Alternative in Assembler


von AssemblerMichi (Gast)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

AssemblerMichi schrieb:
> Gibt es eine Alternative zum pinmode() Command in Assembler

pinmode() ist eine Funktion.
Guck dir mal das Data Direction Register (DDR) an.

von flip (Gast)


Lesenswert?

viele alte microcontroller haben nur open drain ausgänge mit (externem) 
pullup.

von AssemblerMichi (Gast)


Lesenswert?

Sind I/O Ports mit internem Pull UP Widerstand

wenns jemand genau wissen will, ist ein AT89C5131

von Wolfgang (Gast)


Lesenswert?

Und was genau ist jetzt dein Problem?

Registerzugriffe mit Assembler oder Datenblattverständniss?

von AssemblerMichi (Gast)


Lesenswert?

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.
von spess53 (Gast)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von HolgerT (Gast)


Lesenswert?

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)

von krumeltee (Nils S.) (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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
Noch kein Account? Hier anmelden.