Forum: Mikrocontroller und Digitale Elektronik PIC18F Assembler & C Frage


von Hano Glahr (Gast)


Lesenswert?

Hallo zusammen,
ich arbeite mich gerade gerade in ein von Microchi erstelltes Tutorial 
ein (PICKit3 Starterkit). Das Tutorial deckt Assembler und C ab. Für 
mich zeigt sich, dass Assembler relativ aufwändig ist im vergleich zu C. 
Allerdings, wenn ich die Datenblätter der PIC18F ansehe, sind diese in 
Assembler gehalten. Wenn ich also wissen will die ich den PIC nutze, 
muss ich Assembler können.
Meine Frage, wenn es schon einen Compiler für PIC18F gibt (C18 oder 
XC8), dann muss es doch dasselbe auch für die Sprache C geben oder? Also 
ein Datenblatt in dem genauso beschrieben wird wie man einen PIC in C 
programmiert. Könnt ihr mir da weiterhelfen?

von ... (Gast)


Lesenswert?

Fuer die 16F habe ich das noch nicht vermisst.

Statt:

MOVLW 255
MOVWF ADCON1

in C (XC8) einfach:

ADCON1 = 255;

zu schreiben, brauche ich kein Tutorial.

von Hano Glahr (Gast)


Lesenswert?

Kein Tutorial. Eine Überischt in Form eines Datenblattes des 
Sprachumfangs in C für die Peripherie der PICs. Das habe ich gemeint.

von Hano G. (Gast)


Lesenswert?

Hano Glahr schrieb:
> Kein Tutorial. Eine Überischt in Form eines Datenblattes des
> Sprachumfangs in C für die Peripherie der PICs. Das habe ich gemeint.

Ergänzung, es stellt sich für mich überdies die Frage ob es überhaupt 
Sinn macht sich mit Assembler beim PIC zu beschäftigen wenn es doch 
offiziell C-Compiler dafür gibt. Was meint ihr?

von Christian F (Gast)


Lesenswert?

Hi,

ich gehe mal schwer davon aus, dass der c-Compiler die selben 
Registernamen wie der Assembler von microchip definiert hat.
Was die Perepherie angeht sollte das also wirklich egal sein.

Obs Sinn macht, asm Beispiele und üben? Musst du selbst entscheiden. MMn 
schadet es sicher nicht wenigstens in Grundzügen eingestiegen zu sein. 
Es ist doch hilfreich bei vielem, bis hin zu schauen, was der compiler 
wann macht etc...
Zudem ist als Hobby auch der Weg das Ziel. Bzw. so war es. Das Extrem 
möglichst ohne Weg am Ziel zu sein existiert auch.
So musst du selber entscheiden.

von Karl H. (kbuchegg)


Lesenswert?

Hano Glahr schrieb:
> Kein Tutorial. Eine Überischt in Form eines Datenblattes des
> Sprachumfangs in C für die Peripherie der PICs. Das habe ich gemeint.

Diese Übersicht gibt es sehr wahrscheinlich nicht. Schon alleine 
deshalb, weil es in C normalerweise dafür keine 'Spezialbefehle' gibt, 
sondern man versucht, das alles mit Standard-C Mitteln abzudecken. 
Manchmal bieten Compiler Hersteller Erweiterungen an. Die sind aber auch 
so: hat man das Prinzip erst mal verstanden, dann funktioniert das an 
allen Ecken und Enden gleich.

Was steht denn im Datenblatt?
Da steht im wesentlichen, welche Bits in welchem Register zu setzen 
sind, damit sich welche Funktion aktiviert. Schön. Wenn du also die 
Register in C namentlich zur Benutzung hast UND dann auch noch die Bits 
als Namen zur Verfügung hast (wobei die höchst wahrscheinlich mit dem im 
Datenblatt verwendeten Namen übereinstimmen), dann hast du alles was du 
brauchst. Denn letzten Endes ist es der Sinn, der hinter dem Setzen oder 
Löschen eines Bits in einem Register steht, der zählt. Und natürlich 
alle Zusammenhänge die sich da rundum noch abspielen und die im Kapitel 
erläutert werden.
Welche Sprache du benutzt ist dann völlig untergeordnet.
Was zählt, dass ist das du verstanden hast, was zu tun ist. Wenn du der 
Ansicht bist, du bräuchtest nur Code-Schnipsel von irgendwo her zu 
kopieren und dann passt das schon, dann muss dir leider sagen, dass du 
mit Zitronen gehandelt hast. Code Schnipsel sind manchmal hilfreich, 
aber letzten Endes führt am Verständnis kein Weg vorbei.

: Bearbeitet durch User
von Dirk W. (Gast)


Lesenswert?

Hano Glahr schrieb:
> Kein Tutorial. Eine Überischt in Form eines Datenblattes des
> Sprachumfangs in C für die Peripherie der PICs. Das habe ich gemeint.

Ein Datenblatt kenne ich im dem Zusammenhang zwar nicht, aber die Seiten 
von Sprut sind hier vielleicht ganz hilfreich: 
http://sprut.de/electronic/pic/c/pic_c/pic_c90_pic_spezifisches.html

von Nonsens (Gast)


Lesenswert?

Assemblerschnipsel im Datenblatt bzw. User Manual sind doch reine 
Extras, Luxus pur, das müßten sie eigentlich gar nicht tun. Andere 
Datenblätter sind dementsprechend eben sehr spartanisch minimalistisch. 
Sei doch deshalb froh, daß da überhaupt was steht. Die 
Programmiersprache möchten die da auch überhaupt gar nicht behandeln. 
Dafür sind andere zuständig. Assembler ist auch das neutralste gegenüber 
einer Hochsprache, weshalb man es für Beispiele wohl wählte.

Der jenige der Basic kann, kann mit Pascal oder Fortran weniger 
anfangen, und umgekehrt. Assembler ist aber für diesen µC die gemeinsame 
Schnittmenge. Der Code, den jeder Hochsprachencompiler als unterste 
Schicht vor dem reinen Maschinencode auch erzeugt. Und es ist nicht 
schlecht, wenn man vom Assembler seines verwendeten µC ein klein wenig 
versteht. Spätestens bei Programmfehlern muß man sowieso auch mal einen 
Blick in den Assemblercode werfen, was der Hochsprachencompiler für 
einen Assemblercode erzeugte. Da gibt es durchaus schon mal Fehler oder 
Dinge, die nicht so laufen wie man es sich vorstellt.

von Volker S. (vloki)


Lesenswert?

Ob Assembler Sinn macht, ist nur für dich allein entscheidend.
Frag so was hier besser nicht ;-)

Der Sprachumfang in C sind erst mal die Register, die in C genau die 
selben Namen haben. Dann kommen noch die ganzen Bitfeld Unions dazu. Das 
ganze ist in den Prozessorheadern deklariert. (Beim XC8 z.B im include 
des Compiler Installationsverzeichnisses)
1
...
2
#ifndef __XC8
3
#warning Header file pic18f25k22.h included directly. Use #include <xc.h> instead.
4
#endif
5
6
/*
7
 * Register Definitions
8
 *  */
9
10
// Register: ANSELA
11
extern volatile unsigned char           ANSELA              @ 0xF38;
12
#ifndef _LIB_BUILD
13
asm("ANSELA equ 0F38h");
14
#endif
15
// bitfield definitions
16
typedef union {
17
    struct {
18
        unsigned ANSA0                  :1;
19
        unsigned ANSA1                  :1;
20
        unsigned ANSA2                  :1;
21
        unsigned ANSA3                  :1;
22
        unsigned                        :1;
23
        unsigned ANSA5                  :1;
24
    };
25
} ANSELAbits_t;
26
extern volatile ANSELAbits_t ANSELAbits @ 0xF38;
27
...
Weil das alles genau so heist, brauchst du also wenn du es erst mal 
weißt, kein extra C-Datenblatt.


Für die allgemeinen C-Sachen speziell für den enztsprechenden Compiler 
gibt es den User Guide im docs Verzeichnis.

Dann gibt es für PIC18 noch die Peripheral libraries, die allerdings 
seit der neuesten XC8 Version (1.35) nicht mehr automatisch installiert 
werden, sondern extra heruntergeladen und installiert werden müssen.
Für die Bibliotheken gibt es natürlich auch eine Doku (docs)

Der neueste Schrei ist der MCC (microchip code creator). Gefällt mir 
bisher aber nicht :-(

Also was brauchst du nochmal?

von Toxic (Gast)


Lesenswert?

@ Hano Glahr (Gast)

Hier sind die User Guides fur XC8 und C18 - die wirst Du benoetigen wenn 
Du in C programmieren willst und sie beantworten moeglicherweise deine 
Frage:

https://www.google.ie/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCkQFjABahUKEwj-8aX128THAhXLFtsKHb3sB-s&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F50002053E.pdf&ei=aKDcVf6dOsut7Aa92Z_YDg&usg=AFQjCNHlOYNwvR0KPhhFb8VH7Ry9Rl4ZUg&cad=rja

https://www.google.ie/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAAahUKEwiKxOWR3MTHAhUjStsKHcy5BDU&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F51288c.pdf&ei=pKDcVYriK6OU7QbM85KoAw&usg=AFQjCNFJyHmYQFBOjX65rYNor7fEM2Hdiw&cad=rja

Volker S. schrieb:
> Der neueste Schrei ist der MCC (microchip code creator). Gefällt mir
> bisher aber nicht :-(

"Neuester Schrei" klingt abwertend - hab MCC zwar selbst noch nicht 
benutzt finde es aber nicht schlecht.
Hier ist eine von 5 "Microchip Minutes" Videos die zeigen wie schnell 
man damit ein Programm erstellen kann (ohne dabei die Kontrolle ueber 
den Code zu verlieren).
https://www.youtube.com/watch?v=4nOnEl8zLeM&list=PL9B4edd-p2ahRAG3QFVtrbtJf8HJH0zSZ

von W.S. (Gast)


Lesenswert?

Hano Glahr schrieb:
> Also
> ein Datenblatt in dem genauso beschrieben wird wie man einen PIC in C
> programmiert. Könnt ihr mir da weiterhelfen?

Ja. Lies das Manual so wie es ist und lerne, die Maschinenbefehle zu 
verstehen - damit du einen Eindruck bekommst, mit was für einer Maschine 
du dich befassen willst. Das gehört schlichtweg dazu und was du da 
formuliert hast, klingt nach Überfliegerei.

Also:
Das Manual soll die Hardware erklären und nicht irgend eine 
Programmiersprache, die von hause aus rein garnix mit der konkreten 
Hardware zu tun hat.

Das ist der Punkt.

Ja, auch der Satz von Maschinenbefehlen gehört deshalb ins Manual. 
Ebenso die Darstellung, wie denn nun die Funktionalität von Registern, 
Akkus, Stack usw. konkret ist.

Abgesehen davon gibt es zuweilen auch ganz konkrete Stellen, wo man 
GENAU SO UND NICHT ANDERS irgendwelche Maschinenbefehle verwenden muß, 
Beispiele sind Zugriff auf EEPROM und Flashrom - genauer gesagt die 
Sequenzen zum Freischalten von speziellen Funktionen. So etwas sollte 
gewußt und verstanden sein. Die bloße Hoffnung, daß der Compiler es wohl 
schon richtig machen würde, ist zu wenig.

Dabei ist eigentlich die Doku von Microchip geradezu mustergültig und 
vorbildlich. Also meckere du mal nicht.

Ich hätte da einiges an anderen Beispielen: z.B. einige Prozessoren von 
NEC (78K4 Reihe), wo man zum Entriegeln diverser Hardware einige 
Bitkombinationen in den Assemblercode setzen mußte, die im 
veröffentlichten Assembler-Befehlsumfang überhaupt nicht enthalten 
waren. Da kommt Freude auf! Versuche sowas mal in C überhaupt 
formulieren zu wollen...

Insgesamt finde ich es ärgerlich, daß hier so viele Leute auftreten, die 
ganz dediziert NICHT über den Tellerrand von C hinausblicken wollen, die 
konkrete Hardware ebenso dediziert NICHT zur Kenntnis nehmen wollen und 
die dennoch von sich behaupten, sie seien interessierte 
Mikrocontroller-Leute. Nein, sind sie nicht, sondern (*** unanständiges 
Schimpfwort..).

Wer Programme zum Simulieren von Antennen oder Hohlraumresonatoren oder 
Magnetfeldern oder für Wetterprognosen schreiben will und dies deshalb 
in Fortran oder anderen maschinenunabhängigen Sprachen tut, der betätigt 
sich auf einer ganz anderen Ebene als jemand, der einen Mikrocontroller 
für irgendeine Funktionalität auf seiner Leiterplatte programmieren 
will. Von letzterem sollte man mit Fug und Recht verlangen dürfen, daß 
er sich mit der zugrundeliegenden Hardware wirklich auskennt - wozu eben 
auch (s.o.) zumindest Grundkenntnis von deren Maschinenbefehle gehört.

W.S.

von Volker S. (vloki)


Lesenswert?

Toxic schrieb:
> "Neuester Schrei" klingt abwertend - hab MCC zwar selbst noch nicht
> benutzt finde es aber nicht schlecht.

Du hast es noch nicht benutzt, findest es aber nicht schlecht?
Krass ;-)

Ich wollte den MCC in die Unterlagen für unsere Studierenden mit 
aufnehmen war aber bei meinen ersten Versuchen nicht so überzeugt. Ich 
werde es wohl nur kurz erwähnen dass es das gibt, aber nicht auf die 
Verwendung eingehen.

Da wird eine Unmenge Zeug erstellt, von dem die Anfänger dann im 
Endeffekt nichts verstanden haben. Das ganze landet dann in 'zig Dateien 
die automatisch zum Projekt hinzugefügt werden.

Wenn es ähnlich abliefe wie bei den Config-Settings wäre es mir 
möglicherweise schon sympatischer. Da wird Code erstellt und du kannst 
ihn dann kopieren und irgendwo in eine Datei deiner Wahl einfügen. (Hier 
wäre es für mich sogar OK wenn automatisch eine Datei erstellt und dem 
Projekt hinzu gefügt würde, weil ich das gewöhnlich genau so mache)

Ich kann mich momentan einfach noch nicht daran gewöhnen und vermutlich 
stört mich auch, dass dadurch die PLib nicht mehr automatisch mit den 
jeweiligen Compilern installiert wird, an die ich mich schon gewöhnt 
habe.
Deren Funktionen verwende ich auch nicht alle, aber für die 
Initialisierungsphase schon. Also so was wie OpenUSART(), aber nie 
ReadUSART() wo es auch ein "neuesByte = RCREG; tut.

Letztendlich habe ich mich nach etwas Kampf 
(http://www.microchip.com/forums/m668751.aspx) aber auch mit XC8 
abgefunden (habe vorher immer C18 verwendet) also wird's mit MCC 
möglicherweise ja auch noch was.

von Hano Glahr (Gast)


Lesenswert?

Nachdem ich hier ein bisschen geschimpft wurde hust und ich mir auch 
mal ein C-Tutorial von Microchip angeschaut habe, bin ich zu dem Schluss 
gekommen, dass ich die Assemblervariante zuerst durcharbeiten werde. Im 
C-Tutorial wird - nur um ein Beispiel zu nennen - zwar erwähnt, dass es 
Programm und Datenspeicher gibt, aber es wird bei weitem nicht so 
detailliert darauf eingegangen wie im Assembler Tutorial (Wie er 
aufgeteilt ist, was er alles beinhaltet etc).
Da ich aber grundsätzlich die Dinge verstehen möchte mit denen ich zu 
tun habe, arbeite ich das Assembler-Tutorial zuerst durch, dann habe ich 
die Hardware sicher soweit verstanden um auch mit dem Datenblatt zurecht 
zu kommen.
Später, und soviel ist sicher, werde ich in C programmieren, weil es 
einfacher ist.

von Hano G. (Gast)


Lesenswert?

Und danke für die Verweise auf die Dokus C18 und XC8.

>Dabei ist eigentlich die Doku von Microchip geradezu mustergültig und
>vorbildlich. Also meckere du mal nicht.

Ich will auch gar nicht über Microchip schimpfen. Einer der Gründe 
weshalb ich mich für Microchip entschieden habe ist der, dass Microchip 
einen sehr professionellen Eindruck auf mich gemacht hat. Compiler, 
Tutorials, spezifische Hardware - alles aus einer Hand und gut 
dokumentiert (so zumindest mein Eindruck).

von Toxic (Gast)


Lesenswert?

Volker S. schrieb:
> Du hast es noch nicht benutzt, findest es aber nicht schlecht?
> Krass ;-)

Wichtig ist , dass Du als Profi weisst was Microchip da wieder fuer 
einen Mist fabriziert.Bewirb dich bei denen und mach mal ordentlich 
Dampf dort !

von Bad U. (bad_urban)


Lesenswert?

Hano Glahr schrieb:
> Nachdem ich hier ein bisschen geschimpft wurde hust und ich mir auch
> mal ein C-Tutorial von Microchip angeschaut habe, bin ich zu dem Schluss
> gekommen, dass ich die Assemblervariante zuerst durcharbeiten werde.


Das ist sicher kein Fehler um den Controller wirklich kennenzulernen. C 
ist auf jedem Controller gleich. Die Registernamen aus den Datenblatt 
kannst Du auch in C 1:1 anwenden. Ist dann letztlich eine Frage des 
Geschmacks und der Leidensfähigkeit, grade bei größeren Programmen.

Zur Doku wurde ja schon das XC8 Manual genannt. Da stehen auch die 
Besonderheiten des Compilers und auch die Makros drin. Interessant wäre 
wohl nich die Doku der PLIB. Da sind Beschreibungen von Funktionen drin, 
die die Hardware betreffen. ADC, Flash, EEPROM usw.

Und keine Angst vor dem Umfang. Sind alles insgesamt wohl tausende 
Seiten, aber wenn man den Einstieg mal gefunden hat eine gute Quelle um 
mal was nachzuschlagen.

von vloki (Gast)


Lesenswert?

Toxic schrieb:
> Volker S. schrieb:
> Du hast es noch nicht benutzt, findest es aber nicht schlecht?
> Krass ;-)
>
> Wichtig ist , dass Du als Profi weisst was Microchip da wieder fuer
> einen Mist fabriziert.Bewirb dich bei denen und mach mal ordentlich
> Dampf dort !

Ich sag doch gar nicht, dass es totaler Mist ist

Volker S. schrieb:
> Ich kann mich momentan einfach noch nicht daran gewöhnen und vermutlich
> stört mich auch, dass dadurch die PLib nicht mehr...

Im Moment habe ich nur das "Gefühl", dass ein " Profi" mehr Zeit 
verbraucht den erzeugten Code übersichtlich zurecht zu stutzen als wenn 
er alles selbst gescjtieben hätte.
Für Anfänger die wirklich etwas verstehen wollen scheint es mir auch 
ungeeignet. Also wer ist die Zielgruppe? (im 8bit Bereich)

von vloki (Gast)


Lesenswert?

Bad U. schrieb:
> Interessant wäre wohl nich die Doku der PLIB. Da sind Beschreibungen von
> Funktionen drin, die die Hardware betreffen. ADC, Flash, EEPROM usw.

Auf die Zukunft von plib würde ich nicht wetten. z.B. -> 
http://www.microchip.com/forums/FindPost/886302

von Ewald (Gast)


Lesenswert?

BTW (sollte denke ich nicht unerwähnt bleiben): http://pic-projekte.de /

von Bad U. (bad_urban)


Lesenswert?

vloki schrieb:
> Auf die Zukunft von plib würde ich nicht wetten.

OK. Danke für die Info. Ich nutzte sie nur für Flashzugriffe bei meinem 
Bootloader. Sonst habe ich mir alles selbst erstellt.
Aber grade als Anfänger kann man mit der Lib wohl schnell erste Erfolge 
haben und dann tiefer einsteigen.

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.