Guten Tag, ich würde gerne ein Byte seriell ausgeben und dabei mit dem höchstwertigen Bit anfangen. Ich versuche es seit 2 Stunden aber irgendwie klappt es nicht, wo liegt mein Fehler? denn ich würde damit gerne ein Schieberegister Laden und die Daten dann parallel ausgeben
1 | void schieberegisterLaden() |
2 | {
|
3 | int actBit,bitNr,bitMaske; |
4 | |
5 | cbi(PORTC,PIN3); //Schiebeoperator 0 setzen |
6 | cbi(PORTC,PIN4); //Speicheroperator 0 setzen |
7 | |
8 | bitMaske=128; //damit man sp‰ter immer nur das hˆchste Bit abfragt |
9 | |
10 | for(bitNr=0;bitNr<=8;bitNr++) //mit hˆchstem Bit anfangen, jedes Bit einlesen |
11 | {
|
12 | // wir wollten numbers[x] einlesen
|
13 | // 0b01001 aufspalten in 0-1-0-0-1
|
14 | actBit=(numbers[2]<<bitNr); |
15 | actBit=actBit & bitMaske; |
16 | |
17 | if(actBit==0) |
18 | cbi(PORTC,PIN2); |
19 | else
|
20 | sbi(PORTC,PIN2); |
21 | |
22 | //Schiebeoperation durchf¸hren:
|
23 | sbi(PORTC,PIN3); |
24 | _delay_us(5); |
25 | cbi(PORTC,PIN3); |
26 | }
|
27 | //mit einem Byte fertig => an Speicher ‹bergeben
|
28 | cbi(PORTC,PIN4); |
29 | _delay_us(5); |
30 | sbi(PORTC,PIN4); |
31 | |
32 | }
|
mfg,