Microcontroller

Liebe/-r Experte/-in,

ich probiere seit ein paar Tagen an meinen Mikrocontroller R8C/13 rum das mit C programmiert wird. Jetzt gibt es einen befehl denn ich teilweile nicht verstehe.

pd1 = 0x0F; //Dieser Befehl setzt den Byte P1 auf Output

Ich hab schon herausgefunden das die „pd1“ in der Portdeklarationdatei wieder finde diese wiederrum sind einer Adresse zugeordnet die ich im Datenblatt wieder finde. Jetzt frag ich mich was die Hexzahl 0x0F zu bedeuten hat. Wenn die ich in Dezimal umrechne ist das 15 aber was bedeute das x oder was soll ich 15 jetzt bewirken.

Gruss
Peter

Du hast Recht. 0x0f ist die hexadezimale Schreibweise für den Wert 15. Wenn du an dieser Stelle statt „0x0f“ „15“ schreibst, ändert sich an dem Programm nichts.

Was passiert ? Die Zahl 15 entspricht dem Bitmuster ‚0000 1111‘. Das Bit0 steht in diesem Fall ganz rechts, das Bit7 ganz links. Dieses Bitmuster landet in der Speicherstelle pd1. Die einzelnen Bits in dieser Speicherstelle konfigurieren jeweils den zugehörigen Pin als Input oder Output. Ist das Bit == 0, so fungiert der Pin als Input.

In deinem Beispiel sind dann PD1_0 … PD1_3 Inputs, der Rest sind Outputs.

Vielen Dank, das hat mir sehr geholfen. Aber ich glaube in Deiner Überlegung ist ein Denkfehler.

Ist das Bit == 0, so fungiert der Pin als Input.

In deinem Beispiel sind dann PD1_0 … PD1_3 Inputs, der Rest sind Outputs.

Wenn bei einem Bitmuster 0000 1111 der Port PD1_0 ganz rechts steht muss das dann doch ein Output sein und nicht wie angeschrieben ein Input oder ?

Und was hat jetzt das x zu bedeuten, heisst das das diesen byte nicht verändert wird ??? Und was passiert denn wenn ich da doch was reinschreibe ???

Gruss
Peter

Du hast Recht; Die Pins 0 … 3 sind natürlich Outputs !

‚0x‘ wird einer Hexzahl vorangestellt, damit der Compiler erkennen kann, daß es sich um eine Hexzahl handelt.

0x10 == Sechzehn
10 == Zehn

Gruß,
Ralf

Verstehe…vielen Dank für die ausführliche Antwort.

Gruss

Hallo Peter,

um irgendwelche Aktionen in deinem µC zu bewirken, musst du entsprechende Register manipulieren. Jedem Register (in deinem Fall pd1) ist eine Adresse zugeordnet. Wenn du die Adresse beschreibst, geht der µC in einen oder anderen Modus. Am besten schlägst du im Datenblatt nach, welche Register für welche Hardware-Module zuständig sind.

Bei deinem Beispiel werden 4 Pins vom Port 1 in den Output Modus versetzt. Dazu benutzt man die Maske 0x0F. Die letzten 4 Bits der Maske sind 1 : (00001111b)
0x0F ist nur eine andere (hexadezimale) Darstellung der Zahl 15. Damit der Compiler dies richtig übersetzt wir halt vor einer hexadezimalen Zahl 0x gesetzt.

Grüße,

Wadim