Forum: Mikrocontroller und Digitale Elektronik Frage zum MPLAB C18 Compiler


von Siegfried S. (dieleena)


Lesenswert?

Hallo guten morgen,
Vorab. Bin unerfahren mit der C Programmierung. Habe aber bewußt diese 
genommen, da es übersichtlicher ist und ich unter Borland C++ einige 
Projekte erstellt habe. Nehmt es nicht grumm, wenn unmögliche Fragen 
auftauchen.

Frage: Wie deklariere ich ein Wert, der 8 Bit groß ist?

Gruß Siegfried

von tt (Gast)


Lesenswert?

char

von Siegfried S. (dieleena)


Lesenswert?

Hallo,
nutze das Buch von Anne und Manfred König. Schreibe ein Programm für den 
18F4580.
Frage 1:
Verwendet man für Output den Befehl LATA und für Input PORTA?
Frage 2:
Besteht die Möglichkeit, wenn ich mit MPLAP Sim arbeite, das ich ein 
Fenster öffnen kann, in dem die n Port's angezeigt werden?
Gruß Siegfried

von Stefan (Gast)


Lesenswert?

Hi,

zu Frage Zwei:

Es gibt unter View order Debugger ein "WATCH" Fenster, darin kannst du 
dir die Portregister anzeigen lassen

von Igor M. (bastel-wastel)


Lesenswert?

char -> 8bit mit Vorzeichen
unsigned char -> 8Bit ohne Vorzeichen

In MPLAB gibts ein "watch" window. Da kannst z.B. PORTB eintippen, dann 
wird dir dort der aktuelle Wert davon angezeigt. Variablen kannst du da 
natürlich auch eintippen.

Für input - output kannst du folgendes definieren:
1
#define bit_set(var,bitnr)   ((var) |= 1 << (bitnr))      // Einzelnes Bit setzen
2
#define bit_clear(var,bitnr) ((var) &= ~(1 << (bitnr)))    // Einzelnes Bit löschen
3
#define bit_test(var,bitnr)  ((var) & (1 << (bitnr)))      // Einzelnes Bit abfragen

Im Quellcode kannst du dann so ein Bit von einem Port setzen:
z.B.
1
bit_set(PORTB,0);  // Bit 0 von PORTB setzen

Wenn du den ganzen PORT setzen willst gehts einfacher, z.B.:
PORTB = 1;   // von 0 bis 255

Nochwas: Lad dir folgende Dokumente runter:
MPLAB_C18_Getting_Started
C18_User_Guide

Die sind sehr empfehlenswert, wenn man den C18 nutzt.

von Gerhard (Gast)


Lesenswert?

Hallo

zu Frage 1:
Verwendet man für Output den Befehl LATA und für Input PORTA?

Antort: jein. Du kannst für output auch PORTA verwenden. LATA gibts für 
den fall, dass du in 2 nacheinanderfolgenden Befehlen je 1 Bit des 
gleichen Ports veränderst.Wird dabei der Port in einem reda-modify-write 
Befehl verändert liest der Prozessor den augenblicklichen Zustand des 
Augangs zurück, verändert das Bit wie gewünscht und schreibt den Inhalt 
zurück. Hat sich aber im vorherfolgenden Befehl die Änderung -elekrisch- 
noch nicht am Ausgang gezeigt (z.B. durch Kapazitäten am Ausgang, kann 
der 2.Befehl den ersten Befehl rückgängig machen. Das LAT-Register ist 
ein Register, das den Soll-Zustand des Ports wiederspiegelt. (ächz-Ich 
hoffe ich hab mich verständlich ausgrdrückt)

Beispiel
kein Problem:
PORTA = 55;
PORTB = 11;
...

oder
PORTAbits.RA0 = 1;
PORTB = 33;
...

aber:

PORTAbits.RA1 = 1;
PORTAbits.RA2 = 0; !!!!!!!!

hier ist es besser zu schreiben
LATAbits.LATA1 = 1;
LATAbits.LATA2 = 0;

Gerhard

Gerhard

von Siegfried S. (dieleena)


Lesenswert?

Hallo guten Morgen,

Habe folgende Variable angelegt.
unsigned char
Data_A_Out;

Ich möchte z.B. Bit 3 eine 1 zuweisen.
Data_A_Out.3 = 1; oder Data_A_Out(3) = 1; funktioniert nicht.


Wenn ich diesen Code nutze,
bit_set(Data_A_Out,3);
bekomme ich folgende Warnmeldung.
......rface1034005_IO.c:224:Warning [2060] shift expression has no 
effect
Laut Debug arbeitet dieses.

Gruß Siegfried

von Siegfried S. (dieleena)


Lesenswert?

Hallo,
Danke an alle, die mir einige Startinformationen geliefert haben.
Zur Zeit nutze ich den FREE C18 Compiler. Habe gelesen, das dieser nur 
ca 6 Wochen voll fonktionfähig ist. Danach ist die unterstützung des 
erweiterten Befehlsatzes und die Optimierung "Procedual Abstraction" 
deaktiviert. Habe auch noch nicht gefunden, was der erweiterten 
Befehlsatzes ist.
Habe leider noch kein Information, was die Vollversion kostet. Möchte 
aber nach möglichkeit nicht n Comiler kaufen, um unterschiedliche 
Microchip PIC Programme erstellen.

Eine alternative ist der CCS Comiler.

Gruß Siegfried

von Siegfried S. (dieleena)


Lesenswert?

Hallo guten Morgen,

Die Funktion für die Bits (setzen,löschen,testen) funtionier jetzt ohne 
Warnmeldung. Beim erstellen eines Projekt hatte ich das falsche *.lkr. 
War im falschem Verzeichnis.

eine Frage.
Besteht die Möglichkeit beim Debugger in Verbindung mit dem "WATCH" 
Fenster, das ich wärend dem Test einem als Eingang definiertem Pin des 
PIC ein "0" oder "1" zuweise?

Gruß Siegfried

von Andreas K. (a-k)


Lesenswert?

Siegfried Saueressig wrote:

> die Optimierung "Procedual Abstraction" deaktiviert.

Fasst kurze Sequenzen durch Unterprogramme zusammen. Ist interessant 
wenn das ROM 5% zu klein ist.

> Habe auch noch nicht gefunden, was der erweiterten
> Befehlsatzes ist.

Hauptsächlich eine andere Art den Speicher zu adressieren. Der C18 legt 
in der Standardeinstellung lokale Daten auf den Stack, statt sie wie bei 
kleineren PICs und 8051 üblich statisch zu adressieren. Das ist mit 
wiedereintrittsfähiger Nutzung (reentrant) und Interrupt-Routinen 
deutlich verträglicher, nicht aber mit dem Standardbefehlssatz, der den 
Stack nur recht umständlich adressieren kann. Der erweiterte Befehlsatz 
kann das besser.

Hier gilt wie oben: Wenn das Program trotzdem ins ROM passt und trotzdem 
schnell genug ist, ist's egal.

von Siegfried S. (dieleena)


Lesenswert?

Hallo,
Wie erstelle ich im Sourcecode eine Variable z.B. "Type Char", die im 
EEPROM angelegt ist. Microchip PIC
Gruß Siegfried

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.