Quelltext geht nicht weiter

Gast #961686
Hallo mein Quelltext bleibt immer an der stelle : sp2 = PINB; stecken 
und geht auch nicht weiter außer ich machen aus dem == ein != in der if 
anweisung ich brauche aber ein ==. Ich verwende ein atmaga 16 und AVR 
studio.

1
int main(void)
2
{
3
uint8_t sp2;
4
//lcd_init();            
5
//lcd_home();
6

7

8
               
9
     DDRB  = 0x00;             
10
     //PORTB = 0xff;
11
   
12
    
13
  while(1) 
14
  {                
15
    
16
  sp2 = PINB;  // hier bleibt er immer stehen 
17
   
18

19
       if (sp2 != 0b00000001) // dort brauche ich eigentlich ==
20
      {
21
      PORTD = 0xff; // Teste 
22
      //lcd_string("1");
23
      }
24
         
25
    if (sp2 != 0b00000010) // dort brauche ich eigentlich ==
26
      {
27
      //lcd_string("2");
28
      PORTD = 0xff;  // Teste
29

30
      }
31
     }            
32
return 0;
}
Gast #961690
>immer an der stelle : sp2 = PINB; stecken

Unsinn. Ist ja keine Schleife.

Dein Problem ist, dass du (unter gewissen Bedingungen) das PORTD=0xFF 
setzt, dieses aber nie zurücksetzt....
Gast #961691
Du hast das hier vergessen:
1
sp2 = PINB;  // hier bleibt er immer stehen 
2
sp2 &= 0b00000011;

Sonst wird die If-Bedingung niemals erfüllt sein, weil du nicht weißt, 
welchen Pegel die anderen Port-Pins haben
Moderator (Firma: Titel) Persönliche Seite #961702
@ Frank
>immer an der stelle : sp2 = PINB; stecken
Wie kommst du darauf, welche Auswirkungen verleiten dich zu der Aussage? 
Welcher Compiler? Hast du Hardware oder machst du das im Simulator?

Oder so:
1
sp2 = PINB & 0b00000011;

Besser wäre aber:
1
  sp2 = PINB;  
2
   
3
  if ( sp2 & (1<<PINB0) )   // Taste gegen Vcc an Pin B0
4
  {
5
      PORTD = 0xff; // Teste 
6
  }
7
         
8
  if ( sp2 & (1<<PINB1) )   // Taste gegen Vcc an Pin B1
9
  {
10
      PORTD = 0xff;  // Teste
11
  }
12
:
Gast #961774
Die Beschreibung, dass der Quelltext stehen/stecken bleibt finde ich 
ebenfalls etwas sehr seltsam... wie soll denn das genau gehen? Ich glaub 
mal, dass du einfach deinen Fehler nicht ordentlich beschreiben kannst.

Anhand deiner Beschreibung würde ich eher davon ausgehen, dass er 
einfach nicht in die IF-Anweisung springt. Und das liegt dann wohl 
offenbar daran, dass die Bedingung nicht erfüllt ist. Das würde auch 
erklären, warum es mit != "geht" und mit == nicht. Du solltest also 
tatsächlich mal überprüfen woran  es liegt, dass die Bedingung nicht 
wahr wird.

Also erstmal checken welchen Wert PINB tatsächlich hat. Kann der 
überhaupt den abgefragten Wert annehmen? Ansonsten mal überprüfen ob das 
in den Datentyp pb2 überhaupt sinnvoll reinpaßt. Vielleicht hilft ja 
auch schon ein typecast.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.