| Ο πυγαίος κώδικας (source code) απαρτίζεται από ένα σετ
εντολών που καταλαβαίνει ο μεταγλωττιστής (compiler), κάθε εντολή του
πηγαίου κώδικα διαβάζεται από το μεταγλωττιστή και μετατρέπεται σε γλώσσα
μηχανής.
Παρακάτω θα δείτε τον τρόπο με τον οποίο γράφεται ο
πηγαίος κώδικας.
Source code format - Δομή πυγαίου
κώδικα
 |
Ετικέτες |
 |
Κάθε ετικέτα πρέπει να ξεκινά από την πρώτη στήλη
κάθε γραμμής κειμένου. |
 |
Μετά από την ετικέτα μπορεί να ακολουθούν, άνω κάτω
τελείες ( : ), κενά (space), ή Tabs. |
 |
Οι ετικέτες πρέπει να έχουν σαν πρώτο χαρακτήρα
γράμμα ή κάτω παύλα ( _ ). (Μόνο Λατινικούς
χαρακτήρες) |
 |
Οι ετικέτες μπορεί να έχουν αλφαριθμητικούς Μόνο Λατινικούς χαρακτήρες, κάτω παύλα (
_ ) ή ερωτηματικό (?). |
 |
Οι ετικέτες μπορούν να έχουν μήκος μεγαλύτερο των
32 χαρακτήρων. |
 |
Δεν μπορείτε να χρησιμοποιήσετε εντολές του
μεταγλωττιστή για ετικέτες. |
|
Για παράδειγμα το "List" που χρησιμοποιείται για να
διακρίνει ο μεταγλωττιστής τον τύπο του PIC, δεν μπορεί να γίνει
ετικέτα. |
 |
| Μνημονικά |
 |
Τα μνημονικά (εντολές), ψευδοεντολές και οι κλήσεις
(call) μακροεντολών πρέπει να ξεκινούν μετά από δύο ή περισσότερα
Tab. |
 |
Εάν στην ίδια γραμμή κειμένου υπάρχει ετικέτα
πρέπει να βάλετε μετά την ετικέτα άνω κάτω τελεία (:), ή
TAb. |
|
Γενικότερα η θέση του μνημονικού μέσα στην γραμμή
κειμένου ορίζεται με Tab. |
 |
Τα μνημονικά έχουν μόνο αλφαβητικούς χαρακτήρες ή
και κάτω παύλα ( _ ). |
 |
| Τελεστές |
 |
Οι τελεστές πρέπει να χωρίζονται από τα μνημονικά
με ένα ή περισσότερα κενά. |
 |
Πολλαπλοί τελεστές πρέπει να χωρίζονται με κόμμα (
, ). |
|
Κενό εάν θέλετε, μπορείτε να βάλετε μετά από κάθε
κόμμα για να είναι ευδιάκριτοι οι πολλαπλοί
τελεστές. |
 |
| Σχόλια |
 |
Ο μεταγλωττιστής MPASM διαβάζει οτιδήποτε μετά από
το χαρακτήρα ; σαν σχόλιο. |
 |
Όλοι οι χαρακτήρες που ακολουθούν το
; παραβλέπονται έως το τέλος της
γραμμής κειμένου. |
 |
Οι σειρές σταθερών αριθμών (String constants) που
περιέχουν το ; χαρακτήρα επιτρέπονται και δεν συγχέονται με τα
σχόλια. |
Directives - Ψευδοεντολές
Για τον PIC16F84A υπάρχουν 35 εντολές. Αυτές οι εντολές
εκτελούνται αποκλειστικά από τον μικροεπεξεργαστή. Για τον MPASM υπάρχουν ψευδοεντολές για να
ελέγχετε την λειτουργία του. Ο MPASM έχει 58 Ψευδοεντολές.
Αυτές τις ψευδοεντολές μπορείτε να τις χρησιμοποιήσετε
κατά βούληση. Προσέξτε όμως πως πρέπει στο τέλος του πυγαίου κώδικα
(Source Code), να υπάρχει πάντα η ψευδοεντολή END.
Εάν ξεχάσετε να την γράψετε στο τέλος του πηγαίου
κώδικα, ο μεταγλωττιστής (assembler) δεν θα κάνει την
μεταγλώττιση.
Παρακάτω παρουσιάζονται
αναλυτικά οι ψευδοεντολές :
Σύμβολα & ορισμοί
| [ ] |
: |
Προαιρετικοί ορισμοί |
 |
expr |
: |
δήλωση |
| < > |
: |
Μεταβλητές, ή Κείμενο |
|
 |
: |
Κενό |
| | |
: |
Επιλογή λογικού OR |
|
|
|
|
 |
| _
_CONFIG |
Δήλωση ψηφίων διαμόρφωσης
μικροεπεξεργαστή |
| Σύνταξη |
_ _CONFIG <expr> [& <expr> & <expr>] |
| Περιγραφή |
Ορίζει τα ψηφία διαμόρφωσης του PIC με βάση
τα στοιχεία που έχετε δώσει στο <expr>. (Π.Χ _CP_OFF,
_XT_OSC) Πριν την χρήση αυτής της
ψευδοεντολής πρέπει να έχετε δηλώσει τον
τύπο του PIC με τις ψευδοεντολές LIST ή
PROCESSOR. | |
 |
| DB |
Ορισμός δεδομένων μιας ψηφιολέξης
(Byte) |
| Σύνταξη |
[<label>] DB <expr>[,<expr>,...,<expr>] |
| Περιγραφή |
Ορίζει ψηφιολέξεις από την μνήμη προγράμματος
με οκτάμπιτες
τιμές. | |
 |
| DT |
Ορισμός πίνακα |
| Σύνταξη |
[<label>] DT <expr>[,<expr>,...,<expr>] |
| Περιγραφή |
Δημιουργεί σειρά εντολών RETLW, μία εντολή
για κάθε
<expr>. | |
 |
| EQU |
Ορισμός σταθερών για τον μεταγλωττιστή
(Assembler) |
| Σύνταξη |
<label> EQU <expr> |
| Περιγραφή |
Η τιμή του <expr> αντιστοιχίζεται στο
<label>. | |
 |
| END |
Ορισμός τέλους πυγαίου
κώδικα |
| Σύνταξη |
END |
| Περιγραφή |
Δείχνει στον μεταγλωττιστή το τέλος του
κώδικα. | |
 |
| INCLUDE |
Ενσωμάτωση πηγαίου κώδικα |
| Σύνταξη |
INCLUDE <<include_file>>|"<include_file>" |
| Περιγραφή |
Το αρχείο <include_file>
προστίθεται σαν
κώδικας. | |
 |
| ORG |
Ορισμός αρχής
προγράμματος |
| Σύνταξη |
[label] ORG <expr> |
| Περιγραφή |
Ορίζει την αρχή του κώδικα που ακολουθεί,
στην διεύθυνση που αναφέρει το <expr>. Εάν δεν οριστεί αρχή, αυτόματα ο
κώδικας θα αρχίζει από την διεύθυνση μηδέν
(0000h). | |
 |
| PROCESSOR |
Ορισμός τύπου
μικροεπεξεργαστή |
| Σύνταξη |
PROCESSOR <processor_type> |
| Περιγραφή |
Ορίζει τον PIC που αναφέρεται στο
<processor_type>. | |
 |
| SET |
Ορίζει μεταβλητές στον
μεταγλωττιστή |
| Σύνταξη |
<label> SET <expr> |
| Περιγραφή |
Η τιμή του <label>
αντιστοιχίζεται με το <expr>. Η ψευδοεντολή SET όπως
παρατηρήσατε είναι ίδια με την EQU, με την διαφορά ότι η τιμή
της SET μπορεί στην συνέχεια του κώδικα να μεταβληθεί από άλλη
ψευδοεντολή
SET. | |
 |
IF ELSE ENDIF |
Ξεκινά κομμάτι κώδικα που
περιλαμβάνει συνθήκη Ξεκινά
κομμάτι κώδικα που εναλλάσσεται με την συνθήκη
"Εάν" Τελειώνει κομμάτι κώδικα που περιλαμβάνει
συνθήκη |
| Σύνταξη |
IF <expr> ........
ELSE ........
ENDIF |
| Περιγραφή |
Ξεκινά την εκτέλεση κώδικα με συνθήκη. Εάν το
<expr> είναι αληθές (true), εκτελεί τον κώδικα που
υπάρχει αμέσως μετά το IF. Διαφορετικά το κομμάτι του κώδικα
μέχρι την ψευδοεντολή ELSE ή ENDIF
παραλείπεται. Εάν το <expr> είναι ίσο με μηδέν θεωρείται ψευδές
(FALSE). Για οποιεσδήποτε άλλες τιμές θεωρείται αληθές (TRUE). Οι ψευδοεντολές IF και WHILE
λειτουργούν σε λογικές τιμές ενός <expr>. Αυτές οι ψευδοεντολές ελέγχουν μόνο τον
κώδικα που
μεταγλωττίζεται. | |
 |
WHILE ENDW |
Ξεκινά κύκλους επαναλήψεων
εφόσον η συνθήκη είναι Αληθείς Τελειώνει τους κύκλους επαναλήψεων |
| Σύνταξη |
WHILE <expr> ........
ENDW |
| Περιγραφή |
Ξεκινά κύκλους επαναλήψεων κώδικα
που υπάρχει ανάμεσα στο WHILE και στο ENDW, όσο το
<expr> είναι αληθές (TRUE).Εάν το <expr> είναι ίσο με μηδέν θεωρείται
ψευδές (FALSE). Για οποιεσδήποτε άλλες τιμές
θεωρείται αληθές (TRUE). Ένας κύκλος WHILE μπορεί να
περιλαμβάνει το πολύ 100 γραμμές κώδικα, και μπορεί να
επαναληφτεί έως 256 φορές. Αυτές οι ψευδοεντολές ελέγχουν μόνο τον κώδικα που
μεταγλωττίζεται. | |
Αριθμητικές σταθερές και συστήματα
αρίθμησης
Ο MPASM υποστηρίζει τα παρακάτω αριθμητικά συστήματα.
Σαν προκαθορισμένο είναι το δεκαεξαδικό (hexadecimal). Οι σταθεροί αριθμοί μπορούν να έχουν μπροστά τους τα σύμβολα + ή
-, εάν δεν υπάρχει σύμβολο πριν το σταθερό αριθμό αυτός θεωρείται
θετικός.
Προδιαγραφές
| Τύπος |
Σύνταξη |
Παράδειγμα |
| Decimal -
Δεκαδικό |
D'<Αριθμός>' ή
.(τελεία)<Αριθμός> |
D'100' ή .100 |
| Hexadecimal -
Δεκαεξαδικό |
H'<hex_Αριθμός>' ή 0x<hex_Αριθμός>
ή 0<hex_Αριθμός>H |
H'A8' ή 0xA8 ή 0A8H |
| Octal - Οκταδικό |
O'<Οκταδικός αριθμός> |
O'567' |
| Binary - Δυαδικό |
B'<Δυαδικός αριθμός> |
B'011001' |
| ASCII - Αλφαβητικοί
Χαρακτήρες |
A'<Χαρακτήρες>' ή
'<Χαρακτήρες>' |
A'ABC' ή
'ABC' |
Αριθμητικές
συναρτήσεις
| Συνάρτηση |
Παράδειγμα |
| $ |
Διεύθυνση του μετρητή προγράμματος (Program
Counter) |
goto $+3 |
| ( |
Αριστερή παρένθεση |
(length+1)*256 |
| ) |
Δεξιά παρένθεση |
| * |
Πολλαπλασιασμός |
a*b |
| / |
Διαίρεση |
a/b |
| + |
Πρόσθεση |
a+b |
| - |
Αφαίρεση |
a-b |
| high |
Δηλώνει το high byte |
movlw high TABLE |
| low |
Δηλώνει το low byte |
movlw low TABLE |
| >= |
Μεγαλύτερο ή ίσο |
if a>=b |
| > |
Μεγαλύτερο από |
if a>b |
| <= |
Μικρότερο ή ίσο |
if a<=b |
| < |
ΜΙκρότερο από |
if a<b |
| == |
Ίσο με |
if (a==b) |
| != |
Διαφορετικό |
if (a!=b) |
| & |
Λογική πράξη AND |
flag=flag&CHECK_BIT |
| | |
Λογική πράξη inclusive OR |
flag=flag|CHECK_BIT |
| && |
Λογικό AND |
if (a==b)&&(c==d) |
| || |
Λογικό OR |
if(a==b)||(c==d) |
| ! |
NOT (Λογικό συμπλήρωμα) |
if !(a==b) | |