Περιεχόμενα
Είσοδος
Αναζήτηση
Ποιοι είναι εδώ
Δημοσκόπηση
Γλώσσα Προγραμματισμού PBASIC
ΠΕΡΙΕΧΟΜΕΝΑ
-
ΣΥΝΤΑΞΗ ΚΑΙ ΕΝΤΟΛΕΣ
-
ΕΝΤΟΛΗ DEBUG
-
ΜΕΤΑΒΛΗΤΕΣ
-
ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ
-
ΛΟΓΙΚΕΣ ΠΡΑΞΕΙΣ
-
LABELS, GOTOS ΚΑΙ ΕΠΑΝΑΛΛΗΨΕΙΣ
-
ΔΟΜΗ ΕΠΙΛΟΓΗΣ IF... THEN
-
ΥΠΟΡΟΥΤΙΝΕΣ
-
ΕΝΤΟΛΕΣ HIGH, LOW, TOGGLE
-
ΕΝΤΟΛΗ PAUSE
-
ΕΝΤΟΛΗ FREQOUT
-
ΕΝΤΟΛΕΣ PULSOUT, PULSIN
-
ΕΝΤΟΛΗ RCTIME
-
ΕΝΤΟΛΗ END
Τα προγράμματα για τον μικροελεγκτή Basic Stamp 2 γράφονται σε γλώσσα προγραμματισμού PBASIC. Η εταιρία Parallax ενσωμάτωσε επάνω στον Basic Stamp 2 έναν διερμηνευτή PBASIC. Η γλώσσα PBASIC είναι ένα δημιούργημα της εταιρείας και βασίζεται στην γλώσσα BASIC. Οι εντολές της γλώσσας PBASIC είναι οι κλασικές εντολές της BASIC, μαζί με δομές επανάληψης, επιλογής και εντολών τύπου GOTO κτλ. Υπάρχουν όμως και κάποιες επιπλέον εντολές, κυρίως για την υλοποίηση ρουτινών Εισόδου/ Εξόδου όταν ο μικροελεγκτής επικοινωνεί με περιφερειακές συσκευές. Ο χρήστης γράφει τα προγράμματα στο ειδικό λογισμικό που διατίθεται μαζί με τους μικροελεγκτές (Basic Stamp Editor) και στη συνέχεια τα κατεβάζει στον Basic Stamp 2 μέσω της σειριακής θύρας.
Η γλώσσα PBASIC υποστηρίζει προγράμματα ως λίστα εντολών. Τα προγράμματα που γράφονται σε αυτήν τρέχουν εντολή προς εντολή και σειρά προς σειρά.
Πρόταση 1
Πρόταση 2
Πρόταση 3
END
Τα σχόλια στην PBASIC ορίζονται με το σύμβολο ‘. Αν κάποιος τοποθετήσει αυτό το σύμβολο μπορεί να γράψει μια γραμμή σχολίων μετά από αυτό. Για να πάει σε επόμενη γραμμή σχολίων πρέπει να βάλει ένα ακόμη τέτοιο σύμβολο.
‘Αυτή είναι η πρώτη γραμμή και είναι ένα σχόλιο
‘Αυτή είναι η δεύτερη γραμμή και είναι ένα σχόλιο
Η γλώσσα PBASIC είναι γενικότερα μια γλώσσα που δεν είναι case sensitive. Δηλαδή δεν έχει σημασία αν οι εντολές γραφούν με μικρά η κεφαλαία. Επιπλέον και η κλήση των υπορουτινών ή μεταβλητών θα γίνει ακόμη και αν τις έχουμε δηλώσει με μικρά γράμματα και τις καλέσουμε με κεφαλαία.
Πριν αρχίσουμε ένα πρόγραμμα πρέπει να στείλουμε στον Basic Stamp Editor δύο βασικές οδηγίες. Αυτές ορίζονται όπως ορίζονται τα σχόλια, αλλά ο editor αντιλαμβάνεται ότι δεν είναι σχόλια. Η πρώτη οδηγία είναι η ' {$STAMP BS2} και ενημερώνει τον Basic Stamp Editor ότι έχουμε συνδέσει στον ηλεκτρονικό υπολογιστή τον μικροελεγκτή Basic Stamp 2 και η δεύτερη είναι η ' {$PBASIC 2.5} που ενημερώνει τον editor ότι πρόκειται να χρησιμοποιηθεί στη σύνταξη του προγράμματος η γλώσσα προγραμματισμού PBASIC έκδοσης 2.5.
Μια βασική εντολή είναι η εντολή DEBUG. Η εντολή DEBUG δίνει την δυνατότητα στον μικροελεγκτή να εξάγει μηνύματα, που απευθύνονται στον χρήστη με μορφή αλφαριθμητικών, προς κάποια οθόνη στον ηλεκτρονικό υπολογιστή, όπου συνδέεται ο προγραμματιστής. Η σύνταξη της εντολής γίνεται ως εξής:
DEBUG Output Data.
Επιπλέον αυτή η εντολή έχει και παραμέτρους που αφορούν τον τρόπο εκτύπωσης των δεδομένων πρόκειται να εκτυπωθούν. Τα αποτελέσματα της εντολής φαίνονται στο ειδικό παράθυρο DEBUG που έχει ο Basic Stamp 2 Editor.
Η έξοδος στην οθόνη DEBUG για αυτή την εντολή θα είναι Hello World!. Οι παράμετροι που μπορούν να χρησιμοποιηθούν για την εντολή αυτή είναι:
CLS για τον καθαρισμό τη οθόνης , CR για αλλαγή γραμμής, HOME για μετακίνηση του κέρσορα στο ακραίο αριστερό σημείο της οθόνης, BELL για ήχο από τα ηχεία του υπολογιστή, BKSP (έχει τον ρόλο του backspace) για μετακίνηση του κέρσορα μια θέση πίσω και TAB για αλλαγή στήλης.
DEBUG "Hello World!" DEBUG "Hello World!", CR
DEBUG "and Hello again” DEBUG "and Hello again”
ΈΞΟΔΟΣ: ΈΞΟΔΟΣ:
Hello World!and Hello again Hello World!
and Hello again
Επιστροφή στα περιεχόμενα
ΜΕΤΑΒΛΗΤΕΣ
Όπως και σε άλλες γλώσσες προγραμματισμού και στη γλώσσα PBASIC του μικροελεγκτή Basic Stamp χρησιμοποιούνται διάφοροι τύποι μεταβλητών ώστε να αξιοποιείται στο μέγιστο η διαθέσιμη μνήμη. Υπάρχει επίσης η δυνατότητα χρήσης σταθερών. Αυτές δεσμεύουν κάποιον χώρο μνήμης και δεν αλλάζουν ποτέ σε όλη τη διάρκεια εκτέλεσης του προγράμματος. Οι σταθερές και οι μεταβλητές ορίζονται στην αρχή του προγράμματος.
Οι μεταβλητές έχουν διάφορα μεγέθη. Είναι σημαντικό να ορίζονται έτσι ώστε να μη δημιουργούνται υπερχειλίσεις κατά την διάρκεια πράξεων. Αλλά είναι εξίσου σημαντικό να αποφεύγονται τύποι μεταβλητών που καταλαμβάνουν μεγαλύτερο χώρο από όσο χρειάζεται να χρησιμοποιούν και γεμίζουν την περιορισμένη μνήμη του Basic Stamp άσκοπα. Ο Basic Stamp 2 έχει 4 τύπους μεταβλητών. Αυτοί είναι το bit, το nibble, το byte και το word. Στον παρακάτω πίνακα φαίνεται τι χώρο καταλαμβάνει ο κάθε τύπος και τι εύρος τιμών έχει. Ο Basic Stamp 2 μπορεί να κρατήσει έως και 13 μεταβλητές τύπου word, ή 26 μεταβλητές τύπου byte, ή 208 μεταβλητές τύπου bit.
|
ΤΥΠΟΣ |
ΜΕΓΕΘΟΣ |
ΕΥΡΟΣ ΤΙΜΩΝ |
|
Bit |
1 bit |
0 ή 1 |
|
Nibble |
4 bits |
0-15 |
|
Byte |
8 bits |
0-255 |
|
Word |
16 bits |
0-65535 |
Η δήλωση των μεταβλητών πρέπει να γίνεται πριν χρησιμοποιηθούν στο πρόγραμμα και ο τρόπος δήλωσης είναι όνομα μεταβλητής VAR τύπος
Παραδείγματα δήλωσης μεταβλητών:
A2 VAR Bit
Count2 VAR Nib
Sum VAR Byte
Result VAR Word
Η εκχώρηση τιμής σε μια μεταβλητή γίνεται με το σύμβολο του ίσον. Στα δεξιά του ίσον γράφεται η τιμή ή η πράξη με την οποία εκχωρείται μια τιμή στην μεταβλητή. Επιπλέον σε συνδυασμό με την εντολή DEBUG μπορούμε και να εκτυπώσουμε τα περιεχόμενα μιας μεταβλητής στην οθόνη Debug του Basic Stamp Εditor.
Το παρακάτω κομμάτι κώδικα βρίσκει το εμβαδόν από δύο τιμές που ορίζουν το μήκος και το πλάτος ενός χώρου.
Παράδειγμα : Υπολογισμός Εμβαδού
Length VAR Byte
Width VAR Byte
Area VAR word
Length=30
Width=10
Area= Length*Width
Debug DEC Area
To DEC δηλώνει έναν μορφοποιητή (formatter). Οι formatters είναι ειδικές παράμετροι που μπαίνουν στην εντολή DEBUG για να δηλώσουν ότι η μεταβλητή είναι ακέραιος αριθμός. Η παράμετρος DEC μπορεί να γραφτεί και ως DEC2 ή DEC3 αν χρειαστεί να εμφανιστεί κάποιος αριθμός με 2 ή με 3 ψηφία. Οι μεταβλητές Length και Width εδώ δεν πρέπει να ξεπεράσουν την τιμή 255 και η μεταβλητή Area την τιμή 65535 γιατί ορίστηκαν ως τύπου Byte και Word αντίστοιχα. Για παράδειγμα αν σε μια μεταβλητή τύπου Byte που έχει αποθηκευμένη την τιμή 255 προσθέσουμε το 1 το αποτέλεσμα αυτής της πράξης θα είναι 0, καθώς γίνεται υπερχείλιση και μετράει ξανά από την αρχή. Αν στην ίδια μεταβλητή (με τιμή 255) προσθέσουμε το 5 το αποτέλεσμα αυτής της πράξης θα είναι 4 κ.ο.κ.
Σαν μεταβλητές μπορούν να οριστούν και πίνακες. Οι πίνακες είναι μια ομάδα μεταβλητών ίδιου μεγέθους που μοιράζονται ένα κοινό όνομα, αλλά είναι διαιρεμένες σε έναν αριθμό κελιών που καλούνται στοιχεία του πίνακα. Ένας πίνακας δηλώνεται με την ακόλουθη σύνταξη: Όνομα Πίνακα VAR τύπος (n)
όπου VAR είναι η οδηγία για να δηλωθεί ως μεταβλητή, τύπος(n) είναι ο τύπος δεδομένων που επιλέγεται και το n είναι ο αριθμός των στοιχείων του πίνακα.
Επίσης με την μορφή πίνακα ορίζονται και οι αλφαριθμητικές μεταβλητές τύπου String. Για παράδειγμα με τη δήλωση Text VAR BYTE(6)ορίζεται μια αλφαριθμητική μεταβλητή με το όνομα Text που κρατάει 6 χαρακτήρες. Τα περιεχόμενα ενός πίνακα μπορούν να προσπελαστούν με τη βοήθεια δείκτη (index). Το πρώτο στοιχείο έχει πάντα index 0. Στο παράδειγμα, το δεύτερο στοιχείο του πίνακα προσπελαύνεται ως Text (1) και το τελευταίο ως Text (5). Ο BASIC Stamp 2 επιτρέπει να ορίσουμε επίσης και πίνακες από bits, nibbles και words.
Οι σταθερές πρέπει επίσης να ορίζονται πριν χρησιμοποιηθούν σε ένα πρόγραμμα κατά τον ίδιο τρόπο που ορίζονται και οι μεταβλητές. Η δήλωση της σταθεράς είναι :Όνομα της Σταθεράς CON τιμή.
Παράδειγμα:
MaxTemp CON 212
Οι σταθερές μπορούν να χρησιμοποιηθούν σε αριθμητικές πράξεις ή να τυπωθούν στην οθόνη με την εντολή DEBUG κατά τον ίδιο τρόπο με τις μεταβλητές. Μια βασική ωστόσο ιδιότητα που έχουν οι σταθερές στον Basic Stamp 2, είναι ότι μπορούμε να δηλώσουμε ως σταθερές τους ακροδέκτες του μικροελεγκτή για να τους καλούμε με κάποιο όνομα στο πρόγραμμα και όχι με τον αντίστοιχο αριθμό τους. Για παράδειγμα αν έχουμε σε μια κατασκευή ένα LED και έναν σερβοκινητήρα συνδεμένα στα Pins 8 και 12 αντίστοιχα θα μπορούσαμε να δηλώσουμε τα εξής:
Led CON 8 ' To LED είναι συνδεδεμένο στο 8
Servo CON 12 ' Ο Servo είναι συνδεδεμένος στo Pin P12
ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ
Ο Basic Stamp 2 χειρίζεται τα αριθμητικά δεδομένα στις μαθηματικές πράξεις σε μορφή 16 bit. Όλα τα δεδομένα των μαθηματικών εκφράσεων ακόμη και αν δηλωθούν ως μεταβλητές bit, nibble ή byte επεκτείνονται σε 16 bit (με πρόσθεση μηδενικών έως ότου συμπληρωθούν τα 16bits) και μετά γίνονται οι υπολογισμοί.
Όλες οι μαθηματικές πράξεις εκτελούνται με τους κανόνες της αριθμητικής των θετικών ακεραίων. Αυτό σημαίνει πως χειρίζεται μόνο ακέραιους αριθμούς. Από τα αποτελέσματα των πράξεων κρατά μόνο το ακέραιο μέρος και «πετά» το δεκαδικό. Υπάρχει όμως η δυνατότητα να χειρισμού και αρνητικών αριθμών χρησιμοποιώντας τους κανόνες του συμπληρώματος ως προς 2. Κατά την εντολή DEBUG και άλλες εντολές για έξοδο (όπως η SEROUT) μπορούν να χρησιμοποιηθούν Formatters όπως το SDEC (Signed Decimal – Προσμοιασμένος Ακέραιος) και ο BASIC Stamp θα διερμηνεύσει ορθά με το συμπλήρωμα ως προς δύο το αποτέλεσμα που εκτυπώνεται.
Οι αριθμητικές πράξεις ορίζονται με τα σύμβολα: +, -, * , / και λειτουργούν μεταξύ δύο τιμών. Οι τιμές που επεξεργάζονται οι αριθμητικοί τελεστές ονομάζονται παράμετροι της έκφρασης ( arguments).
Ο τελεστής πρόσθεσης (+) προσθέτει μεταβλητές, σταθερές, ή αριθμούς μεταξύ τους επιστρέφοντας ένα αποτέλεσμα των 16 bit. Λειτουργεί για μη-προσημασμένους αριθμούς από 0 έως 65535. Αν το αποτέλεσμα της πρόσθεσης είναι μεγαλύτερο από 65535 τότε το bit κρατουμένου θα χαθεί. Αν οι παράμετροι της αριθμητικής έκφρασης είναι προσημασμένοι εύρους 16 bit και προορίζονται προς αποθήκευση σε μια μεταβλητή τύπου Word, τότε το αποτέλεσμα θα είναι σωστό και από άποψη προσήμου αλλά και τιμής.
Οι αρνητικοί αριθμοί πάντα πρέπει να δηλώνονται σε μεταβλητές εύρους word. Στο παρακάτω παράδειγμα φαίνεται ξεκάθαρα το λάθος που γίνεται, αν μια αρνητική τιμή μπει σε μεταβλητή τύπου Byte.
Παράδειγμα:
Value VAR Byte
Value= - 99
DEBUG SDEC? Value
Η εντολή DEBUG θα εμφανίσει την τιμή 157 αντί για -99. Αυτό συμβαίνει γιατί ο Basic Stamp 2 χειρίζεται τους αρνητικούς αριθμούς σε μορφή 16bits για να πάρει το συμπλήρωμα ως προς δύο. Εδώ όμως η μεταβλητή value είναι τύπου byte και το 99 στο δυαδικό σύστημα είναι το 01100011. Για να φτάσει τα 16 bits o Basic Stamp 2 προσθέτει 8 μηδενικά και ο αριθμός γίνεται 0000000001100011. Το συμπλήρωμα ως προς δύο αυτού είναι 1111111110011101 (δηλ το 65437 ή το προσημασμένο -99). Ωστόσο επειδή το αποτέλεσμα πρέπει να αποθηκευτεί σε μεταβλητή των 8 bits τα πιο σημαντικά ψηφία του αριθμού δηλ τα πρώτα 8 bits απαλείφονται και στην μεταβλητή Value θα αποθηκευτεί το 10011101 που αντιστοιχεί στο 157 στο δεκαδικό σύστημα. Έτσι το αποτέλεσμα που θα εμφανιστεί δε θα είναι το σωστό. Γι αυτό, στο χειρισμό αρνητικών αριθμών πρέπει να χρησιμοποιούνται μεταβλητές τύπου Word.
Παράδειγμα:
Value1 VAR Word
Value2 VAR Word
Value1=-1575
Value2=976
Value1=Value1+Value2
DEBUG SDEC? Value1
Το αποτέλεσμα θα είναι -1574+976=-599
Ο τελεστής αφαίρεσης (-) αφαιρεί μεταβλητές, σταθερές, ή αριθμούς μεταξύ τους επιστρέφοντας επίσης ένα αποτέλεσμα των 16 bits. Σε μη προσημασμένους ακεραίους λειτουργεί από 0 έως 65535. Αν το αποτέλεσμα είναι αρνητικό, θα εκφραστεί σωστά μέσα στο εύρος.
Παράδειγμα:
Value1 Var Word
Value2 Var Word
Value1=1000
Value2=1999
Value1=Value1-Value2
DEBUG SDEC? Value1
Το αποτέλεσμα θα είναι -999.
Ο τελεστής πολλαπλασιασμού πολλαπλασιάζει μεταβλητές, σταθερές, ή αριθμούς μεταξύ τους, επιστρέφοντας επίσης ένα αποτέλεσμα των 16 bits. Λειτουργεί ομοίως με τις προηγούμενες πράξεις από 0 έως 65535. Αν το αποτέλεσμα είναι μεγαλύτερο από 65535 τα υπόλοιπα bits θα χαθούν. Τα αποτελέσματα με προσημασμένους αριθμούς θα είναι σωστό, αρκεί το όριο να μην ξεπερνά το εύρος -32767 έως +32767.
Παράδειγμα:
Value1 Var Word
Value2 Var Word
Value1=1000
Value2=-19
Value1=Value1*Value2
DEBUG SDEC? Value1
Το αποτέλεσμα θα είναι -19000.
Υπάρχει ένας ειδικός τελεστής πολλαπλασιασμού για πράξεις που το αποτέλεσμα τους ξεπερνά το όριο των 16 bits και φτάνει τα 32 bits. Αυτός δηλώνεται με τον διπλό αστερίσκο (**) και έχει την δυνατότητα να επιστρέφει τα 16 υψηλότερα bits μιας 32αδας bit. Μια πολύ χρήσιμη εφαρμογή αυτού του τελεστή, είναι για να επιτελούμε πολλαπλασιασμούς μεταξύ δεκαδικών αριθμών μικρότερων της μονάδας και ακεραίων. Θεωρείται λοιπόν μια νέα κλίμακα, όπου η μονάδα είναι το 65536 και η κλασματική μονάδα το 1/65536. Άρα ο δεκαδικός αριθμός για να εκφραστεί σωστά στην κλίμακα αυτή πρέπει να πολλαπλασιαστεί με το 65536. Για παράδειγμα έστω ότι θέλουμε να πολλαπλασιάσουμε τον αριθμό 0.72562 με έναν ακέραιο πχ το 10000. Πρώτα πρέπει να εκφράσουμε τον δεκαδικό στη σωστή κλίμακα. Έτσι πολλαπλασιάζουμε το 0.72562 με το 65536 (0.72562 x 65536). Το αποτέλεσμα 47554 δηλώνεται ως σταθερά και μετά γίνεται η πράξη του πολλαπλασιασμού με τον τελεστή **.
Παράδειγμα:
Frac CON 47554 ‘Αποτέλεσμα πράξης 0.72562*65536
Value VAR Word
Value=10000
Value=Value**Frac
DEBUG ? Value1
Το αποτέλεσμα θα είναι 7256.
Ένας άλλος ειδικός τελεστής πολλαπλασιασμού σε 32 bits αριθμούς, εκφράζεται με τα σύμβολα (*/). Αυτός έχει την δυνατότητα να επιστρέφει τα 16 μεσαία ψηφία από το αποτέλεσμα των 32bits. Χρησιμοποιείται για να επιτελούμε πράξεις με δεκαδικούς αριθμούς μεγαλύτερους της μονάδας. Αντιμετωπίζει τους αριθμούς ως δύο ξεχωριστά στοιχεία. Πρώτα πολλαπλασιάζει με το ακέραιο μέρος του δεκαδικού και μετά με το δεκαδικό. Το ακέραιο μέρος βρίσκεται στο υψηλό byte του αριθμού 32 bits που θέλουμε να πολλαπλασιάσουμε (0-255) και το δεκαδικό στο χαμηλό byte αυτού (0-255 που εκφράζονται σε μονάδες 1/256). Ας υποθέσουμε ότι θέλουμε να πολλαπλασιάσουμε μια τιμή με τον αριθμό 1.5. Το ακέραιο μέρος και κατ’ επέκταση το υψηλό byte του αριθμού είναι 1 και το δεκαδικό κομμάτι -το χαμηλό byte θα είναι 128 (προκύπτει από τον πολλαπλασιασμό του 128 *1/256 = 0.5). Πιο ξεκάθαρα φαίνεται αυτό, αν ορίσουμε τον αριθμό ως δεκαεξαδικό δηλ. $0180 (στην PBASIC οι δεκαεξαδικοί αριθμοί ορίζονται με πρόθεμα το $), όπου το υψηλό byte είναι το 1 και το χαμηλό το 80, που αντιστοιχεί στο 128 στο δεκαδικό σύστημα. Έτσι θα μπορούσαμε να έχουμε τον παρακάτω κώδικα για να υπολογίσουμε τον πολλαπλασιασμό του 1.5 με το 100.
Παράδειγμα:
Value VAR Word
Value=100
Value=value*/$0180 ΄Πολλαπλασιασμός του 1.5 με το 100, όπου 1.5=[1+128/256]
DEBUG ?Value
Το αποτέλεσμα θα είναι 150.
Ο τελεστής της διαίρεσης (/) διαιρεί μεταβλητές, σταθερές, ή αριθμούς μεταξύ τους επιστρέφοντας επίσης ένα αποτέλεσμα των 16 bit. Λειτουργεί σε εύρος 0 έως 65535 και μπορεί να επιτελεί πράξεις μόνο για θετικές τιμές.
Ένας τρόπος για να γίνει διαίρεση με προσημασμένους αριθμούς είναι να διαιρούνται οι απόλυτες τιμές των προσημασμένων αριθμών (με την εντολή ABS) και να μετατρέπεται το αποτέλεσμα σε αρνητικό. Βέβαια αυτό γίνεται μόνο όταν ένας από τους δύο αριθμούς είναι αρνητικός.
Παράδειγμα:
Sing VAR Bit ‘To bit που θα κρατήσει το πρόσημο
Value1 VAR Word
Value2 VAR Word
Value1=100
Value2=-3200
Sign= Value1.BIT15 ^ Value2.BIT15 ‘Λογική Πράξη XOR για να βρεθεί το πρόσημο
Value2= ABS Value2 /ABS Value1
IF (sign=1) THEN Value2= -Value2
DEBUG SDEC? Value2
Το αποτέλεσμα θα είναι -32.
Ο Τελεστής Modulus (//) βρίσκει το υπόλοιπο ακέραιας διαίρεσης, αφού διαιρέσει έναν αριθμό με έναν άλλον. Ωστόσο κάποιες διαιρέσεις δεν έχουν ακέραιο υπόλοιπο, αλλά δεκαδικό. Για παράδειγμα το 1000/6 δίνει κανονικά 166.67, αλλά επειδή στην αριθμητική του Basic Stamp τα δεκαδικά απαλείφονται το αποτέλεσμα εδώ είναι 1000/6=166 και επομένως το υπόλοιπο είναι 4. Οι αριθμοί που διαιρούνται τέλεια δίνουν υπόλοιπο 0, οπότε και το modulo είναι 0.
ΛΟΓΙΚΕΣ ΠΡΑΞΕΙΣ
Οι λογικές πράξεις που υποστηρίζει ο Basic Stamp 2 είναι το λογικό Ή (OR), ΚΑΙ (AND), ΑΠΟΚΛΕΙΣΤΙΚΟ Ή (XOR) και τα αντίθετα αυτών με το λογικό ΟΧΙ (NOT), όπως επίσης και συνδυασμούς αυτών αλλά και πράξεις όπως ολίσθηση και αντιστροφή bits.
To λογικό Ή (OR) εκφράζεται με τον τελεστή (|). Επιστρέφει 1 όταν ένας από τους δύο όρους της πράξης είναι 1.
To λογικό ΚΑΙ (AND) εκφράζεται με τον τελεστή (&). Επιστρέφει 1 όταν και οι δύο όροι της πράξης είναι 1.
To αποκλειστικό Ή (XOR) εκφράζεται με τον τελεστή (^). Επιστρέφει 1 όταν ένας από τους δύο όρους της πράξης είναι 1, αλλά όχι και οι δύο ταυτόχρονα.
Η πράξη Λογικό ΌΧΙ ( NOT) εκφράζεται πάντα σε συνδυασμό με τα παραπάνω με το σύμβολο της διαίρεσης (/) και χρησιμοποιείται για την αντιστροφή των αποτελεσμάτων. Έτσι το λογικό (OR NOT) εκφράζεται με το (|/), το λογικό (AND NOT) εκφράζεται με το (&/) και το ( XOR NOT) εκφράζεται με το (^/).
Υπάρχουν ακόμα και δύο πράξεις ολίσθησης: η πράξη για ολίσθηση των bits προς τα αριστερά (τελεστής << )και η πράξη για ολίσθηση των bits προς τα δεξιά (τελεστής >>).
Τέλος, η πράξη της αντιστροφής γίνεται με την εντολή REV (Reverse Operator). H πράξη αυτή επιστρέφει ως αποτέλεσμα την ανάστροφη μιας δοθείσας ακολουθίας bit. Δηλαδή το LSB (Least significant Bit) θα πάρει την θέση του MSB (Most Significant Bit) και τα υπόλοιπα θα τοποθετηθούν ανάλογα.
LABELS, GOTO ΚΑΙ ΕΠΑΝΑΛΗΨΕΙΣ
Για να αλλάξει η σειρά εκτέλεσης εντολών στη ροή του προγράμματος χρησιμοποιούνται οι ετικέτες (Labels) και η εντολή GOTO.
Η χρήση της GOTO σε μεγάλους κώδικες μπορεί να οδηγήσει στο λεγόμενο φαινόμενο του κώδικα spaghetti και χρησιμοποιείται όσο γίνεται λιγότερο, εκεί που πραγματικά χρειάζεται.
Mε την εντολή GOTO και τις ετικέτες μπορούν να δημιουργηθούν και βρόχοι .
Βρόχος μπορεί να δημιουργηθεί επίσης με την εντολή DO… LOOP ή την εντολή βρόχου με συνθήκη DO While <συνθήκη>… LOOP. Στον Basic Stamp 2 και γενικότερα στους μικροελεγκτές επιθυμούμε ο κώδικας να εκτελείται επ’ άπειρον όσο έχει παροχή τάσης ο μικροελεγκτής. Για παράδειγμα, αν ένας μικροελεγκτής λειτουργεί ως θερμοστάτης, θέλουμε συνεχώς να παίρνει μετρήσεις τις θερμοκρασίας για να δώσει, σε περίπτωση χαμηλής θερμοκρασίας, εντολή στον καυστήρα ή αν ένας μικροελεγκτής μετράει την ταχύτητα σε πύργους παραγωγής αιολικής ενέργειας, θέλουμε να μετράει συνεχώς την ταχύτητα τον πτερυγίων, ώστε αν πέσει κάτω από επιθυμητά επίπεδα να τεθεί σε λειτουργία το σύστημα εκκίνησης
Άλλη δομή επανάληψης μπορεί να υλοποιηθεί με το FΟR… NEXT. Mε αυτή την εντολή ορίζεται από την αρχή το πλήθος των επαναλήψεων με τη βοήθεια ενός μετρητή.
Με τη δομή επιλογής ελέγχονται κάποιες συνθήκες και αλλάζει ανάλογα η ροή του προγράμματος.
Οι τελεστές που μπορούν να χρησιμοποιηθούν για συγκρίσεις φαίνονται στον παρακάτω πίνακα.
|
ΤΕΛΕΣΤΕΣ ΣΥΓΚΡΙΣΗΣ |
|
|
= |
Είναι ίσο με… |
|
< |
Είναι μικρότερο από… |
|
> |
Είναι μεγαλύτερο από… |
|
<> |
Είναι διάφορο από… |
|
<= |
Είναι μικρότερο ή ίσο από… |
|
>= |
Είναι μεγαλύτερο ή ίσο από… |
Η σύγκριση μπορεί να γίνει μεταξύ μιας μεταβλητής και μιας τιμής, μιας τιμής και μιας άλλης τιμής ή ακόμη και μιας μεταβλητής με μια άλλη μεταβλητή. Με την δομή επιλογής και τα Labels θα μπορούσαμε ακόμη να υλοποιήσουμε και τη δομή επανάληψης.
Πολλές φορές χρειάζεται να πάρουμε αποφάσεις σε περιπτώσεις που οι συνθήκες είναι σύνθετες. Η δομή επιλογής της PBASIC μας δίνει την δυνατότητα να εκφράσουμε τέτοιες περιπτώσεις μέσα από τα λογικά OR και AND. Τέλος, η δομή επιλογής επιτρέπει εμφωλιασμό και πολλαπλές επιλογές, τακτικές γνωστές από άλλες γλώσσες προγραμματισμού.
O Basic Stamp 2 υποστηρίζει 36 εντολές. Τα προγράμματα πολλές φορές έχουν μεγάλες απαιτήσεις και χρειάζεται να συνδυαστούν πολλές εντολές μεταξύ τους για την επίλυση συγκεκριμένων προβλημάτων. Υπάρχουν πολλές περιπτώσεις όπου χρειάζεται ομάδες εντολών να εκτελεστούν περισσότερες από μια φορές μέσα στο ίδιο πρόγραμμα. Σε αυτές τις περιπτώσεις χρησιμοποιούνται υπορουτίνες. Η κλήση μιας υπορουτίνας γίνεται με την εντολή GOSUB και η επιστροφή με την εντολή RETURN.
Η GOSUB μοιάζει με τον τρόπο που λειτουργεί η εντολή GOTO. Έχει την δυνατότητα να αλλάζει τη ροή του προγράμματος οδηγώντας το σε άλλο σημείο. Η υπορουτίνα τελειώνει με την εντολή RETURN οπότε γίνεται επιστροφή στο κυρίως πρόγραμμα και ο κώδικας συνεχίζει να εκτελείται από την επόμενη εντολή μετά την εντολή κλήσης της υπορουτίνας.
Ένα πλεονέκτημα που έχουν οι υπορουτίνες αυτές είναι ότι μπορούν να δέχονται και παραμέτρους προς επεξεργασία. Έτσι πλέον το στατικό περιεχόμενο μιας υπορουτίνας μπορεί να τροποποιηθεί δυναμικά κατά την εκτέλεση ενός προγράμματος. Είναι πολύ πιο εύκολο να περνάμε τιμές σε υπορουτίνες σε σχέση με άλλες γλώσσες προγραμματισμού. Το μόνο που χρειάζεται είναι να δηλωθεί μια μεταβλητή πριν κληθεί μια υπορουτίνα και να δοθεί σε αυτήν τιμή. O προγραμματιστής μπορεί να αλλάξει τα περιεχόμενα της μεταβλητής και μέσα από την υπορουτίνα. Αυτό συμβαίνει γιατί στην PBASIC οι μεταβλητές είναι καθολικές και προσπελαύνονται από οποιοδήποτε σημείο του προγράμματος αφότου αυτές δηλωθούν.
ΕΝΤΟΛΕΣ HIGH, LOW ΚΑΙ TOGGLE
Οι ακροδέκτες του Basic Stamp μπορούν να τεθούν σε δύο καταστάσεις εξόδου. Την υψηλή τάση και την χαμηλή. Mε την εντολή HIGH μπορεί ο προγραμματιστής να θέσει έναν ακροδέκτη σε υψηλή τάση τάξης 5 Volt και με την εντολή LOW να το θέσει σε χαμηλή τάση 0 Volt. Η εντολές αυτές συντάσσονται ως
HIGH PIN
LOW PIN
όπου PIN είναι ένας αριθμός 0-15 που αντιστοιχεί σε κάποιον ακροδέκτη Εισόδου/ Εξόδου του Basic Stamp 2.
Παράδειγμα :
ΗΙGH 6
LOW 5
Στο παράδειγμα, το Pin 6 θα τεθεί σε κατάσταση υψηλή και το Pin 5 σε κατάσταση χαμηλή. Το αποτέλεσμα της εντολής HIGH θα μπορούσε να επιτευχθεί και διαφορετικά σε δύο γραμμές χρησιμοποιώντας τους καταχωρητές Εξόδου (OUTS) και Κατεύθυνσης (DIRS).
Παράδειγμα :
OUT6=1
DIR6 =1
Βέβαια, με τη χρήση της εντολή HIGH αυτό γίνεται ταχύτερα. Το ίδιο ισχύει και για την εντολή LOW με μόνη τη διαφορά ότι ο καταχωρητής Εξόδου είναι 0 καθώς έτσι δηλώνεται η χαμηλή κατάσταση.
Παράδειγμα :
OUT5=0
DIR5 =1
Τέλος, η εντολή Toggle, θέτει έναν ακροδέκτη ως Έξοδο και αντιστρέφει την κατάσταση του από 1 σε 0 και από 0 σε 1. Σε μερικές περιπτώσεις, ωστόσο, που ο ακροδέκτης είναι συνδεδεμένος με αντιστάσεις ανύψωσης τάσης (Pull-up resistors) η Toggle δεν επηρεάζει τον ακροδέκτη. Η Toggle συντάσσεται ως TOGGLE PIN, όπου PIN είναι τιμή από 0 έως 15, δηλ o αριθμός του Pin Εισόδου / Εξόδου του μικροελεγκτή.
ΕΝΤΟΛΗ PAUSE
Η εντολή PAUSE είναι μια βασική εντολή που σταματάει την ροή του προγράμματος για τον χρόνο που ορίζει ο προγραμματιστής. Η εντολή αυτή συντάσσεται ως:
PAUSE Duration
όπου Duration είναι η χρονική διάρκεια που εκφράζεται σε milliseconds. Έτσι αν δοθεί για παράδειγμα η εντολή PAUSE 1000, ο Basic Stamp 2 θα σταματήσει την ροή του προγράμματος στο σημείο που βρίσκεται η εντολή, για 1 δευτερόλεπτο. Η καθυστέρηση που παράγεται από την PAUSE είναι τόσο ακριβής όσο ο χρόνος βάσης (time base) του ταλαντωτή στο κύκλωμα του Basic Stamp 2, με απώλεια ±1%. Βέβαια όταν η εντολή χρησιμοποιείται σε συστήματα πραγματικού χρόνου και η ακρίβεια στη μέτρηση του χρόνου είναι κρίσιμη, πρέπει να ληφθούν υπόψη και οι χρόνοι προσπέλασης της EEPROM από τον διερμηνευτή PIC.
ΕΝΤΟΛΗ FREQOUT
Η εντολή FREQOUT δίνει την δυνατότητα στον Basic Stamp 2 να παράγει έναν ή δύο ημιτονικούς παλμούς από τους ακροδέκτες Εισόδου/ Εξόδου. Ωστόσο δεν μπορεί ταυτόχρονα να παράγει αυτούς τους παλμούς σε 2 διαφορετικούς ακροδέκτες παρά μόνο διαδοχικά.
Η εντολή συντάσσεται ως FREQOUT PIN, DURATION, FREQ1{,FREQ2}
όπου το όρισμα Pin είναι ένας αριθμός από το 0 έως το 15 που αναπαριστά κάποιον από τους ακροδέκτες του μικροελεγκτή, το Duration είναι η διάρκεια του παλμού (τιμές από 0 - 65535), εκφράζει την διάρκεια του χρόνου που θα παράγονται παλμοί και ορίζεται σε milliseconds και το FREQ1 (τιμές από 0-32767) είναι το όρισμα που καθορίζει την συχνότητα που θα έχει ο ημιτονικός παλμός. Η μονάδα μέτρησης της συχνότητας είναι το 1Hz (άρα παράγονται συχνότητες 0-32767 Ηz). Επιπλέον, υπάρχει και ένα προαιρετικό όρισμα FREQ2 που αν τεθεί σε λειτουργία, επιτρέπει να παραχθούν ταυτόχρονα δύο διαφορετικές συχνότητες (μίξη συχνοτήτων) στον ακροδέκτη. Η εντολής FREQOUT παράγει ημιτονικό σήμα φιλτράροντας έναν τετραγωνικό παλμό που παράγεται με έναν αλγόριθμο διαμόρφωσης πλάτους παλμών (PWM modulation). Στο παρακάτω σχήμα φαίνεται πώς οδηγείται ένα ηχείο συνδεμένο στον ακροδέκτη 1 (Pin 1 εξόδου) του Basic Stamp 2.

Σχήμα Οδήγηση Ημιτονικού παλμού σε ηχείο
Με την εντολή FREQOUT 1, 1000,3000 αποστέλλουμε στο ηχείο αυτό έναν ήχο συχνότητας 3000Hz για ένα δευτερόλεπτο.
Η εντολή PULSOUT παράγει έναν τετραγωνικό παλμό στον ακροδέκτη που θα ορίσει ο προγραμματιστής με συγκεκριμένη διάρκεια. Η σύνταξή της είναι : PULSOUT Pin, Duration όπου Pin, ένας ακροδέκτης του μικροελεγκτή (0-15) και Duration η διάρκεια (εύρος 0-65535) που εκφράζεται σε μονάδες των 2 μs. Η εντολή αυτή θέτει τον αντίστοιχο ακροδέκτη σε κατάσταση εξόδου και αντιστρέφει την προηγούμενη κατάσταση του. Αφού περάσει η διάρκεια που έχει οριστεί τον επαναφέρει ξανά στην αρχική του κατάσταση. Δηλαδή αν ένας ακροδέκτης ήταν σε κατάσταση LOW γίνεται HIGH, για διάρκεια όσο το Duration και μετά επιστρέφει ξανά στην κατάσταση LOW. Με άλλα λόγια, αλλάζει την πολικότητα ενός Pin για όσο χρόνο ορίσει ο προγραμματιστής. Αυτό φαίνεται και στο παρακάτω σχήμα.

Σχήμα Παλμός PULSOUT με Duration 5
Η εντολή PULSIN έχει τη δυνατότητα να μετρήσει τη διάρκεια ενός παλμού σε έναν ακροδέκτη και να αποθηκεύσει την τιμή αυτή σε μια μεταβλητή. Δηλώνεται ως PULSIN PIN, State, Variable όπου Pin ένας από τους ακροδέκτες του μικροελεγκτή που ορίζεται σε κατάσταση εισόδου, State είναι μια μεταβλητή ενός bit (0 ή 1), που καθορίζει αν ο παλμός που θα μετρηθεί θα είναι ο χαμηλός (0) ή ο υψηλός (1) και Variable είναι η μεταβλητή εύρους Word όπου θα αποθηκευτεί η διάρκεια του παλμού. Πολλά μεγέθη τα οποία είναι αναλογικά, όπως η τάση, η αντίσταση, η χωρητικότητα, η συχνότητα κτλ. μπορούν να μετρηθούν με βάση τη διάρκεια παλμών. Έτσι θα μπορούσαμε να πούμε, ότι η συγκεκριμένη εντολή είναι αρκετά χρήσιμη και για την μετατροπή αναλογικών μεγεθών σε ψηφιακά. Η PULSIN θα περιμένει για έναν παλμό σε έναν ακροδέκτη για χρόνο, όσο η μέγιστη διάρκεια παλμού που μπορεί να μετρήσει. Για τον Basic Stamp 2 η μέγιστη διάρκεια παλμού είναι 131.07 ms. Αν σε αυτό το χρονικό περιθώριο αναγνωρίσει κάποιον εισερχόμενο παλμό, θα μετρήσει την διάρκεια του και θα την αποθηκεύσει στην μεταβλητή. Αν δεν εισέλθει κάποιος παλμός, ή αν το εύρος του παλμού είναι πολύ μεγάλο και ξεπερνά το ανώτατο όριο εύρους παλμού, τότε η PULSIN αποθηκεύει στην μεταβλητή το 0 και εγκαταλείπει την διαδικασία. Η χρονική μονάδα που χρησιμοποιείται στη μεταβλητή Variable είναι 2μs.
ΕΝΤΟΛΗ RCTIME
Η εντολή RCTIME χρησιμοποιείται για να μετρήσει τον χρόνο φόρτισης ή εκφόρτισης σε ένα κύκλωμα RC (Αντίστασης – Πυκνωτή). Αυτό μας επιτρέπει να μετράμε την αντίσταση ή την χωρητικότητα. Μπορεί να χρησιμοποιηθεί σε συνδυασμό με θερμίστορς, φωτοαντιστάσεις, χωρητικούς αισθητήρες μέτρησης υγρασίας ή να αποκρίνεται σε αλλαγές ενός ποτενσιόμετρου. Με μια ευρύτερη έννοια, η εντολή RCTIME λειτουργεί σαν ένα ακριβές χρονόμετρο για γεγονότα πολύ μικρής διάρκειας.
Η εντολή RCTIME συντάσσεται ως εξής: RCTIME Pin, State, Variable
όπου Pin είναι ένας αριθμός από 0 έως 15 που αντιστοιχεί σε κάποιο Pin του Basic Stamp 2, όπου συνδέεται το κύκλωμα RC, State είναι η κατάσταση του πυκνωτή και παίρνει τιμές 1 ή 0 (1 για κατάσταση High, αν ο πυκνωτής είναι φορτισμένος, 0 για κατάσταση Low, αν ο πυκνωτής είναι αφόρτιστος) και Variable είναι μια μεταβλητή, συνήθως τύπου Word, όπου θα αποθηκευτεί ο χρόνος που μετριέται.
Όταν η εντολή εκτελείται, ο ακροδέκτης Pin που όρισε ο προγραμματιστής τίθεται ως είσοδος και ένας μετρητής μετράει το χρόνο εκφόρτισης ή φόρτισης του πυκνωτή σε μονάδες χρόνου των 2μs. Ο μετρητής σταματάει, αμέσως μόλις αλλάξει η κατάσταση του ακροδέκτη που ορίστηκε στη μεταβλητή State (δηλαδή ο μετρητής θα σταματήσει μόλις το 1 γίνει 0 ή το αντίστροφο, δηλ όταν ο πυκνωτής εκφορτιστεί ή φορτιστεί αντίστοιχα).
Τα Σχήματα α και β παρακάτω δείχνουν δύο κυκλώματα τα οποία είναι κατάλληλα για χρήση της εντολής RCTIME. Στην πρώτη περίπτωση, το Pin Εισόδου/Εξόδου βρίσκεται σε κατάσταση HIGH (5Volt, State=1) και η τάση μειώνεται σταδιακά καθώς ο πυκνωτής εκφορτίζεται μέχρι το 1.4 V Στην δεύτερη περίπτωση, το Pin Εισόδου/Εξόδου βρίσκεται σε κατάσταση Low (0 Volt, State=0) και η τάση σταδιακά αυξάνεται από 0 μέχρι 1.4V. Το λογικό κατώφλι αλλαγής κατάστασης για τον μικροελεγκτή Basic Stamp 2 είναι 1.4 Volts.

(α) Κύκλωμα RC για την εντολή RCTIME που χρησιμοποιείται όταν State =1 και (β ) κύκλωμα RC για State =0
Πριν εκτελεστεί η εντολή RCTIME, ο πυκνωτής του κυκλώματος πρέπει να τεθεί στην κατάσταση που ορίζεται στην παράμετρος State. Για παράδειγμα αν το κύκλωμα του Σχήματος 2.4α συνδέεται με τον ακροδέκτη 7 του μικροελεγκτή πρέπει πρώτα ο πυκνωτής να φορτιστεί στα 5 Volts. Η παράμετρος State παίρνει την τιμή 1. Με την εκτέλεση της εντολής, μετριέται ο χρόνος εκφόρτισης του πυκνωτή και αποθηκεύεται στη μεταβλητή (variable). Στο παρακάτω παράδειγμα φαίνεται η χρήση της εντολής RCTIME
Παράδειγμα:
Result Var Word
HIGH 7 ‘Φόρτιση πυκνωτή για
Pause 1 ‘1 ms
RCTIME 7, 1, result ‘Μέτρηση του χρόνου εκφόρτισης
DEBUG DEC ? result ‘Εμφάνιση αποτελέσματος
Οι τιμές που επιστρέφει η εντολή είναι το αποτέλεσμα του γινομένου τ = R C
ΕΝΤΟΛΗ END
Η εντολή End δηλώνει το τέλος του προγράμματος, θέτοντας τον Basic Stamp 2 σε κατάσταση χαμηλής κατανάλωσης. Η End κρατά τον Basic Stamp σε αυτή την κατάσταση μέχρις ότου να ενεργοποιηθεί η γραμμή Reset, ή ο χρήστης ανοίξει και κλείσει τον διακόπτη του κυκλώματος του Basic Stamp 2, ή αν ο Η/Υ στείλει κάποιο πρόγραμμα για την EEPROM του μικροελεγκτή. Η εντολή END είναι προαιρετική.

