Forum: Mikrocontroller und Digitale Elektronik Alle Pins gleichzeitig setzen


von Michi (Gast)


Lesenswert?

Hallo
ich habe mir vor ein paar Tagen ein Arduino Lernpaket gekauft
um nun meine ersten Schritte in der C-Programmierung zu machen.

Nun suche ich vergeblich nach einen Befehl, um einen ganzen Port
auf einmal anzusprechen. In Assembler ist die ja möglich mit
z.B. move P1, 01010101b;. Könnt Ihr mir verraten, wie bzw ob dies in C 
zu realisieren ist?

Vielen Dank schon einmal,

Michi

von Floh (Gast)


Lesenswert?

Michi schrieb:
> In Assembler ist die ja möglich mit
> z.B. move P1, 01010101b;.

Nein, auch in Assembler brauchst du 2 Befehle:
 ldi r16, 0b01010101
 out PORTA, r16

in C wäre das:
1
PORTA = 0x55;

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Egal ob C, Assembler oder Bascom, es werden immer zwei Befehle draus.

Der Mikrocontroller versteht nur Maschinencode (quasi Assembler, nur 
halt als Befehlsnummern codiert), und da werden es immer mindestens zwei 
Befehle werden. Außer, du hast das auszugebende Bitmuster irgendwann mal 
vorher in ein Register geladen, so dass du es jederzeit ausgeben kannst.

Dann wäre es tatsächlich nur noch ein Assemblerbefehl, das heißt, die 
Ausgabe braucht nur noch einen einzigen CPU-Takt.

von Peter S. (petersp)


Lesenswert?

Hallo Michi,

Port B PB0 bis PB7 als Ein- bzw. Ausgänge festlegen:
DDRB = 0b00001111;
(PB0-PB3 ist Ausgang, PB4-PB7 ist Eingang)

PB1 auf HIGH setzen:
PORTB = 0b00000010;

DDRB ist das Datenrichtungsregister für Port B und PORTB ist eben Port 
B.

Servus
Peter

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.