mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variablenzuweisung PIC18f2525


Autor: Timo Borchers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich möchte ein PIC18f2525 programieren, ich nutze den C18 Compiler von
MPLap. Mein Problem ist nun folgendes und zwar möchte ich den einzelnen
Bits der verschieden Ports Variablennamen zuweisen. Also das ich zum
Beispiel sagen kann das Bit 1 des Port B heißt nun sensor. Habe es mal
mit : char sensor = PORTC.RC1;  aber das scheint unsinn zu sein.
Vielleicht kann mir ja jemand weiterhelfen.

Mfg

Timo

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird so nicht gehen, "PORTC.RC1" ist ja Teil eines Bitfields,
darauf kann man keine Pointer anlegen.

(deine Anweisung oben würde übrigens nur den aktuellen Status einlesen,
und einmalig in der variablen "sensor" speichern.

was gehen würde ist z.b.

#define sensor PORTC.RC1

danach kannst du im program z.B. "sensor=1;" verwenden.

/Ernst

Autor: Timo Borchers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, soweit so gut. Das nächste Problem was nun aber kommt ist wenn
ich nun die Variable nutzte z.B.
if (sensor = 1)
{
...
}
Dann meckert er: struct or union object designatior expected

mfg
Timo

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal so
#define Sensor1 PORTBbits.RB0


@2: es muss heissen

if (Sensor1 == 0)  //!!!! == verwenden und nicht den
Zuweisungsoperator
{
...
}

Beste Grüsse
Geri

Autor: Timo Borchers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider nicht, die Fehlermeldung bleibt die gleiche. Aber es muß doch
eine Möglichkeit geben ein Portbit eine Variable zuzuweisen.
Beziehungsweise auch einzelne Portbits über if-Abfragen abzufragen
(sorry, schlechtes deutsch).

MfG
Timo

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einzelne Bits kann man meines Wissens nicht abfragen, weil die interne
Wortbreite nunmal 8 Bit ist, d.g. Vergleichsoperatoren funktionieren
hardwaremäßig nunmal nur mit den ganzen 8 Bit (in dem Fall dem ganzen
Port). Da hilft alles nix, fürchte ich; da musst Du mit binären
Operatoren umzugehen lernen!

In deinem Fall:

if (PORTC & 0x01) ...

Du vernüpft den Port mit einer Bitmaske die nur das entsprechende Bit
übriglässt und vergleichst das Ergebnis mit der entsprechenden
Zweierpotenz.

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
war natürlich quatsch, wollte sagen Du vergleichst damit die
entsprechende Zweierpotenz im Wort.

Autor: Timo Borchers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, werde es mal ausprobieren.
Vielen Dank für die schnelle Hilfe.
MfG
Timo

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der MCC18-Compiler kann das.

Du musst zuvor natürlich noch die entsprechende
Hardware-Definitionsdatei einbinden. Sonst kennt der Compiler die
Definition der Portbits nicht.

z.B.


#include <p18f452.h> // z.B. für den PIC18F452

#define Sensor1 PORTBbits.RB0
#define LE1     PORTBbits.RB1


void main(void)
{
  while (1==1)
  {
    if (SENSOR1 == 0)
    {
      LED1 = 1;
    }
    else
    {
       LED1 = 0;
    }
  }
}


Wenn man den Assembler-Code anschaut, dann sieht man, dass intern auf
"Byte-Breite" gearbeitet wird.

Autor: Timo Borchers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Geri es funktioniert!! Super! Vielen Dank für die Hilfe!! Wenn ich
wieder mal Probleme habe wende ich mich vertrauensvoll an euch!

Vielen Dank.

Timo

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.