Ich lese ich die verschiedenen Bits von den Sensoren in eine struct
variable ein kann diese aber nicht in den udr schreiben, kann mir da
jemand helfen?
Deklaration der Variable:
struct {
unsigned char Sens1:1;
unsigned char Sens2:1;
unsigned char Sens3:1;
unsigned char Sens4:1;
unsigned char Sens5:1;
unsigned char Sens6:1;
}a;
Einlesen der Sensoren in die Struct Variable(die letzten beiden Bits
bleiben frei):
a.Sens1 = PINC & (1<<PINC0);
a.Sens2 = PINC & (1<<PINC1);
a.Sens3 = PINC & (1<<PINC2);
a.Sens4 = PINC & (1<<PINC3);
a.Sens5 = PINC & (1<<PINC4);
a.Sens6 = PINC & (1<<PINC5);
Warten bis sendepuffer frei ist und udr beschreiben:
while (!(UCSRA & (1<<UDRE)));
UDR=(struct)a;
habe es auch schon mit
UDR=(char)a;
probiert aber das geht auch nicht.
> habe es auch schon mit > > UDR=(char)a; > probiert Das aber ist der zu verfolgende Ansatz. > aber das geht auch nicht. Lautet die Compiler-Fehlermeldung tatsächlich "This won't work"?
Sauber
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Dreckig
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
das ist die compiler meldung: Build started 14.1.2008 at 15:54:48 avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=16000000UL -O0 -fsigned-char -MD -MP -MT timerfertig.o -MF dep/timerfertig.o.d -c ../timerfertig.c ../timerfertig.c: In function 'main': ../timerfertig.c:40: warning: implicit declaration of function 'init_uart' ../timerfertig.c:42: warning: implicit declaration of function 'init_timer' ../timerfertig.c: At top level: ../timerfertig.c:54: warning: conflicting types for 'init_timer' ../timerfertig.c:42: warning: previous implicit declaration of 'init_timer' was here ../timerfertig.c: In function '__vector_9': ../timerfertig.c:87: error: aggregate value used where an integer was expected ../timerfertig.c: At top level: ../timerfertig.c:95: warning: conflicting types for 'init_uart' ../timerfertig.c:40: warning: previous implicit declaration of 'init_uart' was here make: *** [timerfertig.o] Error 1 Build failed with 1 errors and 6 warnings...
es klappt danke dh. das ich in das udr genau 6 bit reinschiebe?
Michael Dietz wrote:
> es klappt danke dh. das ich in das udr genau 6 bit reinschiebe?
Nein.
Es ist immer 1 Byte = 8 Bit
@ Michael Dietz (Firma na) (michaeld) >es klappt danke dh. das ich in das udr genau 6 bit reinschiebe? Du solltest dich mal mit den UART-Grundlagen beschäftigen. RS232 AVR-Tutorial: UART AVR-GCC-Tutorial MfG Falk
Nee, in UDR landen 8 Bits. Nur sind 2 Bits (Bit 6 und Bit 7) nicht definiert, d.h. du solltest keine Annahmen über deren Inhalt machen (praktisch steht 0 von der Initialisierung her drin).
@ Stefan "stefb" B. (stefan) Benutzerseite >Nee, in UDR landen 8 Bits. Nur sind 2 Bits (Bit 6 und Bit 7) nicht >definiert, d.h. du solltest keine Annahmen über deren Inhalt machen >(praktisch steht 0 von der Initialisierung her drin). Vor allem ist schön undefiniert, in welcher Reihenfolge die Bits im Byte abgelegt sind. :-( MFG Falk
Mist hast mich erwischt! Ich habe im ASM-Listing gecheatet. Ich bekenne! Es sieht dort ziemlich seltsam aus.
demnach sollte das das gleiche sein und es sollte damit auch klappen? Variablendeklaration:
1 | |
Einlesen:
1 | |
Senden:
1 | |
Gast
#751066
>a.Sens1 = PINC & (1<<PINC0); >a.Sens2 = PINC & (1<<PINC1); >a.Sens3 = PINC & (1<<PINC2); >a.Sens4 = PINC & (1<<PINC3); >a.Sens5 = PINC & (1<<PINC4); >a.Sens6 = PINC & (1<<PINC5); Ist doch Unsinn. Mache das so wie
1 | |
2 | |
vorgeschlagen hat.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.