www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HILFE PORTPINS setzen und auslesen in C


Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@all,

ich habe bis jetzt mit Keil programmiert und bin jetzt AVR Studio mit 
WINAVR umgestiegen. Nun habe ich aber etwas Probleme mit der 
Programmierung.
Ich programmiere in C und wenn ich bei Keil einen Ausgang einlesen bzw. 
ausgeben wollte musse ich diesen zuerst deklarieren ( sbit P1.1 = 0x..)
nun konnte ich im Programm den PIN auslesen if(P1.1==0){...}.
Setzen konnte ich den PIN mit P1.1=1; Hier im Forum habe ich zwar schon 
c-code gesehen jedoch ist mir dieser etwas unklar da ich bis jetzt mit 
<< immer die Werte verschoben habe.
Mir scheint, dass der Befehlsatz beim AVR ein anderer ist.
Kann mir jemand ein Online Beschreibung empfehlen oder ein Buch!
Wenn es von AVR Studio bzw. WINAVR eine Doku gibt bitte die Adresse 
einfügen da ich bis jetzt nicht gefunden habe.

Software AVR Studio mit WINAVR
Hardware MEGA128

wenns wichtig ist.

TOM

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm das AVR-Tutorial hier aus dem Wiki.

Ja, die AVRs arbeiten anders.  Es fängt damit an, dass sie
push-pull-Ausgänge haben (nicht nur pulldown mit einem pullup-
Widerstand), sodass man zuvor erst einmal das Pin auf Ausgang
setzen muss.

Kurz: setze Pin B0 auf Ausgang, belasse Pin B1 auf Eingang (das
ist der Reset-Zustand), und kopiere den negierten logischen Wert
von B1 nach B0:
#include <avr/io.h>

int
main(void)
{
  DDRB = (1 << 0); // B0 ist Ausgang
  for (;;) {
    if (PINB & (1 << 1)) // Abfrage Eingang B1
      PORTB &= ~(1 << 0); // Löschen Augang B0
    else
      PORTB |= (1 << 0);  // Setzen Ausgang B0
  }
}

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau mal hier, dann kannst du das so machen wie gewohnt.

Beitrag "sbit macro für avr-gcc"

Gruß Volker

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg,

danke für die Schnelle Antwort.
Ich habe mit das AVR-Tutorial schon angesehen jedoch ist alles in 
Assembler geschrieben und erklärt.
Ich kann zwar auch etwas Assembler jedoch für um die Beispiele zu 
verstehen müsste ich mich erst wieder einarbeiten und das nur weil ich 
eigentlich in C programmieren will.
Gibt es nicht eine anleitung wo die Grundlegenden Dinge anhand von 
Beispielen beschrieben ist.
So wie im AVR-Tutorial nur in C eben.

DDRB = (1 << 0); // B0 ist Ausgang                    --> ist klar
  for (;;) {
    if (PINB & (1 << 1)) // Abfrage Eingang B1        -->ich verknüpfe 
den PINB(8Bit) mit der Maske 0b00000010 wobei die zweite "1" fur die 
Wertigkeit steht! ((1 << 4) Abfrage PINB4 ist 1)  Ist das richtig?

      PORTB &= ~(1 << 0); // Löschen Augang B0        --> ich verknüpfe 
den PORTB(8Bit) mit 0b00000001 plus invertierung Ausgang wird HIGH --> 
LED geht AUS
    else
      PORTB |= (1 << 0);  // Setzen Ausgang B0        -->ich verknüpfe 
den PORTB((8Bit) mit 0b00000001 setze Ausgang auf LOW --> LED geht AN
  }


Ist irgentwo die Syntax grunglegend beschrieben Internetadresse?!?!?

Sind die Port Register im gegensatz zum 80c535 nicht Bitadressierbar?
Warscheinlich nicht daher immer die Maskierung.

TOM

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> So wie im AVR-Tutorial nur in C eben.
wie im AVR-GCC Tutorial vielleicht?
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

:-o Jörg

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.