mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik If-Anweisung in C


Autor: 1udo1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


in AVR Studio setze ich PINA auf HIGH. Die Abfrage if ( i != 0 ) ergibt 
doch eine "1", also wahr. Jetzt muss demnach Funktion test() 
angesprungen werden. Im Simulator wird PINA mit "1" angezeigt. Warum 
wird der Funktionsaufruf test() übersprungen? Bin neu in C. Fehlt 
irgendwo ein { oder ; oder sonst was? Nach der if-Abfrage springt der 
Befehlszähler sofort auf PORTB +=akku;

Danke meinen Helfern.

Udo


#include <avr\io.h>

uint8_t i, akku=9;


int main( void )
{

 while(1)

  {
   // Funkion test1 aufrufen, wenn Bit 0 in Register PINA gesetzt (1) 
ist


  i = PINA;       // Inhalt in Arbeitsvariable
  i = i & 0x01;   // alle Bits bis auf Bit 0 ausblenden (logisches und)
                    // falls das Bit gesetzt war, hat i den Inhalt 1

  if ( i != 0 )  // Ergebnis ungleich 0 (wahr)?
    {
      int test1();  // dann muss Bit 0 in i gesetzt sein -> 
Funktion aufrufen
              }
    akku+=1;

    PORTB +=akku;
....................................................................

Hier geht es weiter in der While-Schleife

// FUNKTIONEN test1() und weitere


int test1();
{

 PORTB=0x55;
}

return 0 ;

Autor: Div0 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Funktion schreibt man so:

int test1()
{
  PORTB=0x55;
  return 0;
}

und ruft man so auf:

test1();

also ohne das int davor.

Das Du compilieren konntest, grenzt an ein Wunder :-)

Autor: janjan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre nicht auch folgendes möglich?

void test1(void)
{
  PORTB=0x55;

}

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also der unten stehende Code macht das was du da oben machen willst, 
allerdings ist mir nicht klar, warum du eine Funktion aufrufst in der 
PORTB gesetzt wird und 2 Zeilen später setzt du wieder den PORTB neu ???


#include <avr\io.h>

void test();

int main( void )
{
  uint8_t i, akku=9;
  while(1)
  {
     i = PINA;
     if (i & 0x01)
     {
        test1();
     }

    akku+=1;
    PORTB +=akku;

     .
     .
     .
  }
return 0;
}


void test();
{
   PORTB=0x55;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.