Guten Tag,
Zu allererst: Ich habe kein Ozilloskop und versuche mich deshalb gerade
mit dem Simulator vom AtmelStudio 6.1.2440 beta.
Die Funktion, die aufgerufen wird, sieht folgendermaßen aus:
1 | void send_spi(uint8_t byte){
|
2 | uint8_t i=0;
|
3 | //PB 7 = clock; , auf low ziehen
|
4 | PORTB &= ~(1 << PB7);
|
5 |
|
6 | for (i=0;i<8;i++) {
|
7 | if (byte &(1 << (7-i))) {
|
8 | PORTB |= (1 << PB5);
|
9 | }
|
10 | else {
|
11 | PORTB &= ~(1 << PB5);
|
12 | }
|
13 |
|
14 | PORTB |= (1 << PB7);
|
15 | _delay_ms(1);
|
16 | PORTB &= ~(1 << PB7);
|
17 | _delay_ms(1);
|
18 | }
|
19 |
|
20 | PORTB &= ~(1 << PB5);
|
21 | }
|
Letzendlich soll eine Art Software SPI realisiert werden. Der Simulator
von Atmel geht allerdings bei i=0 nicht mehr in die if-Bedingung. Mir
fehlt also in der Simulation das letzte Bit. Warum? Letzendlich würde
ich dann ja haben:
if (byte &(1 << 0))
Mag das der Simulator nicht? Oder mag das der compiler schonmal
garnicht?
Ich bin ratlos und weiß also nicht, ob der Fehler im Simulator oder im
Code liegt.
Danke für jeden Hinweis!