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)