| Home Pic in Greek Οδηγός χρήσης Pic Οδηγίες για να γράψετε κώδικα |
Οδηγίες για να γράψετε κώδικα
Ο πυγαίος κώδικας (source code) απαρτίζεται από ένα σετ εντολών που καταλαβαίνει ο μεταγλωττιστής (compiler), κάθε εντολή του πηγαίου κώδικα διαβάζεται από το μεταγλωττιστή και μετατρέπεται σε γλώσσα μηχανής. Παρακάτω θα δείτε τον τρόπο με τον οποίο γράφεται ο πηγαίος κώδικας. Source code format - Δομή πυγαίου κώδικα Με τα κόκκινα γράμματα φαίνεται η δομή μιας εντολής. Να θυμάστε πως η χωρητικότητα κάθε γραμμής κειμένου είναι 255 χαρακτήρες.
Ετικέτα | Mνημονικό | Τελεστής | ;Σχόλια
|  |  | ;Σχόλια
Μπορείτε αν χρειάζεται να χρησιμοποιήσετε και μια ολόκληρη γραμμή κειμένου για σχόλια, προσοχή! μην ξεχάσετε να βάλετε σαν πρώτο χαρακτήρα το ; Η ετικέτα, το μνημονικό, ο τελεστής, και τα σχόλια χωρίζονται με κενά πατώντας το πλήκτρο TAB, του πληκτρολογίου σας.
| Ετικέτες |  | Κάθε ετικέτα πρέπει να ξεκινά από την πρώτη στήλη κάθε γραμμής κειμένου.
| Μετά από την ετικέτα μπορεί να ακολουθούν, άνω κάτω τελείες ( : ), κενά (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> προστίθεται σαν κώδικας.
LIST | Λίστα επιλογών
Σύνταξη | LIST[<list_option>,...,<list_option>]
Περιγραφή | Η ψευδοεντολή LIST ενεργοποιεί την δημιουργία του "Αρχείο.lst" σε περίπτωση που έχει απενεργοποιηθεί. Διαφορετικά η χρήση της με μία από τις παρακάτω επιλογές, μπορεί να ελέγξει τη λειτουργία μεταγλώττισης ή την διαμόρφωση του "Αρχείο.lst".
Επιλογές | Προεπιλογή | Περιγραφή
--- | --- | ---
b=nnn | 8 | Ορίζει τα κενά για κάθε tab.
c=nnn | 132 | Ορίζει το μέγεθος κάθε στήλης.
f=<format> | INHX8M | Ορίζει τη φόρμα του "Αρχείο.hex".
free | FIXED | Ορίζει ελεύθερη φόρμα.
fixed | FIXED | Ορίζει σταθερή φόρμα.
mm=ON|OFF | ON | Εκτυπώνει το κατειλημμένο μέγεθος μνήμης στο "Αρχείο.lst".
n=nnn | 60 | Ορίζει τις γραμμές κειμένου ανά σελίδα.
p=<type> | None | Ορίζει τον τύπο του μικροεπεξεργαστή.
r=<radix> | hex | Ορίζει το σύστημα αρίθμησης (radix). Δεκαεξαδικό (hex), Δεκαδικό (dec), Οκταδικό (oct)
st=ON|OFF | ON | Εκτυπώνει τον πίνακα συμβόλων στο "Αρχείο.lst".
t=ON|OFF | OFF | Περικόπτει γραμμές από το "Αρχείο.lst".
w=0|1|2 | 0 | Ορίζει το επίπεδο μηνυμάτων του μεταγλωττιστή.
x=ON|OFF | ON | Ενεργοποιεί / Απενεργοποιεί τις μακροεντολές.
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)