www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zum MPLAB C18 Compiler


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

zu Frage Zwei:

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

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define bit_set(var,bitnr)   ((var) |= 1 << (bitnr))      // Einzelnes Bit setzen
#define bit_clear(var,bitnr) ((var) &= ~(1 << (bitnr)))    // Einzelnes Bit löschen
#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.
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.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Siegfried Saueressig (dieleena)
Datum:

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

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.