PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Logisches UND funzt irgendwie nicht?



17.07.2004, 19:22
Ich verstehe das nicht mein Code funktioniert nicht. Es soll ein Codeschloss werden. Hier ist die simple Form, die auch nicht funktioniert:



#include <io.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
WORD i,f;
BYTE d=0,s1=0,s2=0;
int main (void)
{
DDRB =0x1f;
DDRD=0x00;
PORTD = 0x01;
sbi(TCCR1B,2);//counter
for (;;)
{
cbi(PORTB,3);
cbi(PORTB,4);
if (d==1)
{
sbi (PORTB, 2);
f=inw(TCNT1) - 1;
do
{
i=inw(TCNT1);
}while(i!=f);
cbi(PORTB,2);
s1=0;
s2=0;
d=0;
}
if (bit_is_clear(PIND, PIND2))//wenn Taste gedrückt
{
sbi (PORTB, 4);
s1=s1 +1;
if(s2==25)
d=1;
}
if (bit_is_clear (PIND,PIND3))
{
sbi (PORTB, 3);
if((s1 > 2) && (s1 < 6)) //hier liegt der Fehler, wieso geht das nicht?
s2=25;
}
}
}

Kjion
18.07.2004, 09:10
Hi,

if ((s1 > 2) && (s1 < 6))
s2=25;

was geht denn da nicht ?? Sieht doch alles korrekt aus, beschreib mal dein Problem etwas genauer...

Und noch ein paar Anmerkungen zum Code ;-):
sbi(), cbi() sind "deprecated", werden also demnächst nicht mehr von avr-gcc unterstüzt werden. Man sollte daher zum Beispiel statt:
cbi(PORTB,2);
PORTB &= ~(1<<2);
bzw. statt
sbi(PORTB,2);
PORTB |= (1<<2); benutzten...

Gleiches gilt für "bit_is_clear" ( -> !(PIND & (1<<PIND3)) oder (PIND & (1<<PIND3)) == 0 ).

Und statt #include <io.h> sollte man #include <avr/io.h> benutzten

MfG Kjion

LLiinnuuxx
19.07.2004, 16:38
Der Gast hat sich verdrückt?