Hallo,
ich habe mit avr-gcc (WINAVR-20070525) im Studio (v4.13) ein Programm
geschrieben was u.a. zwei Eingänge abfragt, ob diese NICHT gesetzt sind.
Die EIngänge sind mit Pull-Up (PORTD=0x40, PORTB=0x01).
1 | if (!(PORTD & (1<<PD6)) && !(PORTB & (1<<PB0)))
|
2 | {
|
3 | ...
|
4 | }
|
Das Problem ist, dass bei der Simulation diese Abfrage immwer false
ergibt, wenn die Eingänge low sind. Wenn ich aber schreibe
1 | if ((PORTD & (1<<PD6)) && (PORTB & (1<<PB0)))
|
2 | {
|
3 | ...
|
4 | }
|
um abzufragen, ob diese gesetzt sind, funktionierts (wenn sie auch
gesetzt sind:).
Seltsamerweise ist auch der Assemblercode richtig. Hier mal ein
Ausschnitt aus dem list-File:
1 | if (!(PORTD & (1<<PD6)) && !(PORTB & (1<<PB0))) //(!INPUT1 && !INPUT2)
|
2 | 522: 96 9b sbic 0x12, 6 ; 18
|
3 | 524: 1e c0 rjmp .+60 ; 0x562 <main+0xac>
|
4 | 526: c0 9b sbic 0x18, 0 ; 24
|
5 | 528: 1c c0 rjmp .+56 ; 0x562 <main+0xac>
|
6 | ....//hier gehts dann weiter, wenn die Eingänge nicht gesetzt sind
|
7 | {
|
nur in der Simulation funktionierts nicht.
Was mach ich da falsch? Was macht AVR-Studio/gcc falsch?