Hi, ich suche die C-Befehle für schieben und rollen. in asm ist nach links schieben ja glaub ich LSL oder? gibts dafür auchn befehl in C? THX
<< und >> schieben. Rollen gibt's nicht wirklich. Je nach Intelligenz des Compilers kann er eine Verschiebung a la foo = ((bar & 0x80) >> 7) | (bar << 1); erkennen und sehen, dass dafür ein rotate taugen würde. Ansonsten kann man in zeitkritischem Code eventuell an inline asm dafür denken.
ja und wie schaut das dann aus wenn ich an PortC an Pin0 0b00010000 hinausschieben möchte? thx
kann mir da keiner ein code beispiel geben? please @Andreas W.: hast du den link für dieses forum?
http://www.mikrocontroller.net/forum/read-1-109099.html#109191
1 | void write_data(unsigned char data) //msb first |
2 | {
|
3 | unsigned char loop, mask; |
4 | |
5 | for(loop=0, mask=0x80; loop<8; loop++, mask=mask>>1) |
6 | {
|
7 | if(data & mask) |
8 | {
|
9 | PORTC |= (1<<PC0); |
10 | }
|
11 | else
|
12 | {
|
13 | PORTC &= ~(1<<PC0); |
14 | }
|
15 | }
|
16 | }
|
Die Loop kann noch etwas vereinfacht werden, da links shiften für unsigned char von links mit nullen auffüllt kann man die Ausgabeschleife auch wie folgt schreiben:
1 | void write_data(unsigned char data) //msb first |
2 | {
|
3 | unsigned char mask; |
4 | |
5 | for(mask=0x80; mask!=0; mask>>=1) |
6 | {
|
7 | if(data & mask) |
8 | {
|
9 | PORTC |= (1<<PC0); |
10 | }
|
11 | else
|
12 | {
|
13 | PORTC &= ~(1<<PC0); |
14 | }
|
15 | }
|
16 | }
|
mfg Oliver
Hi kann mir einer erklären für was die MASK sein soll? thx mark
Mit der Maske wird immer nur ein Bit eingeblendet (0x80 = 0b100000). In der for-Schleife wird das Bit der Maske über Dein Datenbyte geschoben und geguckt, was bei einer UND-Verknüpfung rauskommt. Rick
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.