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
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
Hi, zu Frage Zwei: Es gibt unter View order Debugger ein "WATCH" Fenster, darin kannst du dir die Portregister anzeigen lassen
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.
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
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
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.