Frage zum MPLAB C18 Compiler

OP #881794
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
OP #881949
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
#881959
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.
Gast #882007
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
OP #882523
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
OP #883252
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
OP #904649
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
#904924
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren