mikrocontroller.net

Forum: Compiler & IDEs einfaches programm


Autor: Till H. (mohman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen, ich bin neu auf dem gebiet "c" und habe ein kleines 
erstes programm geschrieben! wie auch sonst funzt das nicht richtig! ich 
kann ausgänge setzten aber iwie kann ich das PIN-register nicht auslesen 
oder hab es falsch konfiguriert!

ich arbeite mit avrstudio und avr-gcc!...makefile hab ich nicht selber 
erstellet, sondern nur bei avrstudio die konfiguarion der "cpu und takt 
vorgenommen" liegt hier der fehler !?

code:
#include <avr/io.h>

int main(void)
{
DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5);
DDRB &= ~(1<<DDB0);
if (PINB &(1<<PINB0))
{
PORTC |= (1<<PC2);
}
else
{
PORTC &= ~(1<<PC2);
}
}

ich hoffe ihr könnt mir helfen :)
Dankeschön :)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Programm ist GANZ schnell zuende wenn es keine
mainloop gibt:
#include <avr/io.h>

int main(void)
{
 DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5);
 DDRB &= ~(1<<DDB0);

 while(1) // do forever
  {
   if (PINB &(1<<PINB0))
    {
     PORTC |= (1<<PC2);
    }
   else
    {
     PORTC &= ~(1<<PC2);
    }
  }
}

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne genau zu wissen was du erreichen willst, versuchs mal mit ner 
Endlosschleife in der du die Abfrage und das Setzen machst, sonst läuft 
es nur einmal durch.

PS: Ein "return 0" am Ende ist auch nicht verkehrt.

EDIT: Da war einer schneller...

Autor: Till H. (mohman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey danke für die schnellen antworten :)
macht sinn ;) werd das gleich mal testen

Autor: Till H. (mohman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal! jetzt funktioniert alles soweit :)
eine frage hätte ich aber noch...
ist die vorgehensweise   while(1) eine gänige lösung !?
gibt es andere möglichkeiten !?

MfG :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Till Hagemann wrote:
> Hallo nochmal! jetzt funktioniert alles soweit :)
> eine frage hätte ich aber noch...
> ist die vorgehensweise   while(1) eine gänige lösung !?

Ist völlig normal.
Dein Programm darf nie aufhören. Was soll auch der µC sonst tun, wenn er
* zwar noch Strom hat
* aber kein Programm mehr dass er abarbeiten soll

Autor: Christoph Mauchle (fakulatus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, jeder Prozessor braucht einen Loop (while(1) )
Im Unterschied zu einem PC der mehrere Prozesse hat, ist ein uC auf 
einen einzigen Prozess beschränkt, also genau derjenige, der du 
geschrieben hast.

Falls das Programm irgendwann zu Ende ist, weiss der Prozessor nicht 
mehr was er tun soll, also läuft er mal quer über den ganzen Speicher, 
was irgendwelche ungewünschte Aktionen oder Absturz zur Folge haben 
kann. (Bei einem PC kehrt der Prozessor wieder zum Betriebssystem 
zurück, also hat er noch andere Aufgaben die er erledigen muss)

Bei deinem Programm lag das Problem an einem anderen Ort: Deine 
if-Abfrage wurde nur einmal durchlaufen, und zwar genau beim Aufstarten 
des Prozessors. Eine spätere Änderung am PINB0 hatte somit keine 
Auswirkungen.

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.