Υπάρχουν εφαρμογές στον προγραμματισμό σε γλώσσα Assembly στις οποίες μια ομάδα εντολών εκτελεί μια εργασία η οποία επαναλαμβάνεται στο ίδιο πρόγραμμα. Είναι βαρετό να γράφουμε ξανά και ξανά αυτήν την ομάδα εντολών όποτε χρειάζεται. Επομένως για να μειώσουμε το χρόνο εγγραφής του κώδικα και να μειώσουμε την πιθανότητα λαθών χρησιμοποιούμε την έννοια των macros. Τα […]
18. Πρόσβαση στην μνήμη EEPROM των AVR
Κάθε μέλος της οικογένειας μικροελεγκτών AVR έχει κάποιο ποσό μνήμης EEPROM στο σώμα του. Όπως έχουμε αναφέρει σε προηγούμενη ενότητα τα δεδομένα της μνήμης SRAM χάνονται με την διακοπή της τροφοδοσίας τάσης. Έτσι χρειαζόμαστε ένα μέρος να αποθηκεύουμε τα δεδομένα μας έτσι ώστε να διατηρούνται με την διακοπή τάσης. Αυτό το πετυχαίνουμε με τον τύπο […]
17. Διαμόρφωση των bits των καταχωρητών GPR και Ι/Ο
Θέτοντας σε 1 τα bits των GPR Η εντολή SBR (Set Bits in Register) θέτει σε 1 καθορισμένα bits των καταχωρητών γενικού σκοπού. Έχει την ακόλουθη σύνταξη: Όπου Κ είναι μια 8-bit τιμή που μπορεί να είναι μεταξύ 0x00 έως 0xFF και ο καταχωρητής Rd ένας από τους R16 – R31 καταχωρητές GPR. Η εντολή […]
16. Εγγραφή και διάβασμα δεδομένων στη μνήμη ROM
Σε προηγούμενη ενότητα είδαμε ότι ο AVR μπορεί να έχει το πολύ 8ΜΒ μνήμης προγράμματος και το πολύ 64ΚΒ μνήμης δεδομένων. Μπορούμε να χρησιμοποιήσουμε την μνήμη προγράμματος για την αποθήκευση σταθερών δεδομένων. Σε αυτή την ενότητα θα μάθουμε πώς να έχουμε πρόσβαση στα σταθερά δεδομένα που έχουν εκχωρηθεί στη μνήμη προγράμματος ROM. Πρώτα εξετάζουμε πώς […]
15. Μέθοδοι διευθυνσιοδότησης – μέρος 2ο
Χρησιμοποιούμε direct ή register indirect addressing mode για να έχουμε πρόσβαση σε δεδομένα που βρίσκονται αποθηκευμένα στη μνήμη δεδομένων. Σε προηγούμενη ενότητα δείξαμε πώς να χρησιμοποιούμε direct addressing mode (άμεση μέθοδος διευθυνσιοδότησης). Η register indirect addressing mode (η έμμεση με καταχωρητή μέθοδος διευθυνσιοδότησης) είναι μια σημαντική μέθοδος διευθυνσιοδότησης για τους AVRs. Στην register indirect addressing […]
14. Μέθοδοι διευθυνσιοδότησης – μέρος 1ο
H CPU μπορεί να έχει πρόσβαση σε δεδομένα με διαφορετικούς τρόπους. Τα δεδομένα μπορεί να βρίσκονται σε ένα καταχωρητή ή στη μνήμη ή να παρέχονται με σταθερές τιμές. Οι διάφοροι τρόποι για την πρόσβαση δεδομένων ονομάζονται μέθοδοι διευθυνσιοδότησης (addressing modes) Single – register (immediate) addressing mode Σ αυτή την μέθοδο διευθυνσιοδότησης ο τελεστέος είναι ένας […]
13. Εντολές περιστροφής και μετατόπισης byte
Οι μικροελεγκτές AVR με τις εντολές ROL και ROR εκτελούν περιστροφή ή μετατόπιση κατά ένα bit διαμέσου της σημαίας κρατουμένου. Παρακάτω θα εξετάσουμε αυτές τις εντολές διότι χρησιμοποιούνται ευρέως στον προγραμματισμό. Περιστροφή διαμέσου του κρατουμένου: Υπάρχουν δυο εντολές περιστροφής στους AVR που εμπλέκουν τη σημαία κρατουμένου, αυτές είναι οι ROR και ROL. Η εντολή περιστροφής […]
12. Εντολές διακλάδωσης υπό συνθήκη
Εντολές σύγκρισης Οι μικροελεγκτές AVR έχουν την εντολή CP για να συγκρίνουν τελεστέους. Η εντολή σύγκρισης στην ουσία είναι μια αφαίρεση, όπου οι τιμές των τελεστέων δεν αλλάζουν. Υπάρχει επίσης και η εντολή “CPI Rd, k” στην οποία ο δεξιός τελεστέος είναι μια σταθερή τιμή. Ο AVR έχει μερικές εντολές διακλάδωσης που μπορούν να χρησιμοποιηθούν […]
11. Εντολές δημιουργίας λογικών εκφράσεων
Εκτός από τις Ι/Ο και τις αριθμητικές εντολές, οι λογικές εντολές είναι μερικές από τις πιο ευρέα χρησιμοποιούμενες εντολές. Σε αυτή την ενότητα καλύπτουμε τις Boolean λογικές εντολές όπως οι AND, OR, Exclusive – OR (XOR) και το συμπλήρωμα. Αυτές οι εντολές εφαρμόζονται στα bits των αντίστοιχων θέσεων των δυο καταχωρητών. Η λογική εντολή AND […]
10. Πράξεις με προσημασμένους αριθμούς
Μέχρι στιγμής τα αριθμητικά δεδομένα που χρησιμοποιούσαμε παρίσταναν αριθμούς χωρίς πρόσημο. Όμως στη καθημερινή ζωή χρησιμοποιούμε θετικούς αλλά και αρνητικούς αριθμούς. Για παράδειγμα όταν αναφερόμαστε σε θερμοκρασία 5 βαθμούς Κελσίου κάτω από το μηδέν, αυτή παριστάνεται με την αρνητική τιμή -5, ενώ η θερμοκρασία 20 βαθμούς πάνω από το μηδέν με +20. Οι ηλεκτρονικοί υπολογιστές […]
9. Πράξεις με μη προσημασμένους αριθμούς
Πρόσθεση μη προσημασμένων αριθμών Για την πρόσθεση δυο 8-bit αριθμών, χρησιμοποιούμε την εντολή ADD, που έχει σαν όρισμα δυο γενικού σκοπού καταχωρητών GPRs, στους οποίους έχουμε από πριν φορτώσει τις τιμές που θέλουμε να προσθέσουμε Η εντολή προσθέτει τα περιεχόμενα του καταχωρητή Rr σε εκείνα του καταχωρητή Rd. Αυτή η εντολή μπορεί να αλλάξει τις […]
8. Προγραμματισμός Ι/Ο θυρών και χειρισμός bit των I/O καταχωρητών
Στην οικογένεια των μικροελεγκτών AVR υπάρχει ένας αριθμός θυρών για Ι/Ο λειτουργίες που είναι διαφορετικός για κάθε μέλος της οικογένειας AVR. Στον 28-pin μικροελεγκτή ATmega 328 υπάρχουν συνολικά 23 πινς για τις τρεις θύρες PORTB, PORTC και PORTD. Τα υπόλοιπα πινς χρησιμοποιούνται σαν VCC, GND, RESET, AREF, AGND και AVCC. Ο αριθμός των θυρών που […]
7. Η εντολή CALL και ο σωρός
Η εντολή CALL και ο σωρός Μια άλλη εντολή διακλάδωσης είναι η CALL, η οποία χρησιμοποιείται για να καλέσουμε μια υπορουτίνα. Οι υπορουτίνες χρησιμοποιούνται συχνά για να καλέσουμε κομμάτια κώδικα που εκτελούνται συχνά. Αυτό κάνει το πρόγραμμα περισσότερο δομημένο και έχουμε εξοικονόμηση μνήμης προγράμματος. Στους μικροελεγκτές AVR έχουμε τέσσερις εντολές για να καλούμε υπορουτίνες: CALL […]
6. Διακλαδώσεις και βρόγχοι
Πολλές φορές θέλουμε να πάμε τη ροή της εκτέλεσης ενός προγράμματος Assembly σε άλλη εντολή. Αυτό μπορούμε να το κάνουμε με την υπό συνθήκη ή χωρίς συνθήκη διακλάδωση. Με την υπό συνθήκη διακλάδωση είναι οι εντολές: π.χ. BRNE ή BRSH ή με χωρίς συνθήκη είναι: οι JMP ή RJMP Χρησιμοποιώντας την εντολή BRNE για την […]
5. Εισαγωγή στον προγραμματισμό AVR σε γλώσσα assembly
Η CPU ενός μικροελεγκτή δέχεται εντολές και δεδομένα σε δυαδική μορφή δηλαδή αριθμούς αποτελούμενοι από 0 και 1. Το σύνολο των εντολών που γράφουμε εκφρασμένο σε δυαδικό ή δεκαεξαδικό κώδικα ονομάζεται γλώσσα μηχανής (machine code). Για να διευκολυνθούμε στην ανάπτυξη κώδικα μηχανής χρησιμοποιούμε τον assembler, ο οποίος είναι μια εφαρμογή που δέχεται μνημονικά ονόματα για […]
4. Assembler directives
Assembler directives Ενώ οι εντολές λένε τι η CPU θα κάνει οι directives (αλλιώς ψευδοεντολές) δίνουν κατευθύνσεις στον assembler. Για παράδειγμα οι εντολές LDI και ADD είναι εντολές στην CPU ενώ οι .EQU , .DEVICE και .ORG είναι directives στον assembler. Στις επόμενες ενότητες παρουσιάζουμε τις πιο συνηθισμένες directives του AVR μικροελεγκτή και πως χρησιμοποιούνται. […]
3. AVR status register
Όπως όλοι οι άλλοι μικροελεγκτές, έτσι και ο AVR έχει ένα καταχωρητή κατάστασης (stature register) που στην ουσία είναι μια ομάδα 8-bits που λειτουργούν σαν σημαίες. Ο καταχωρητής κατάστασης του AVR αποτελείται από ένα σύνολο σημαιών για το χειρισμό αριθμητικών συνθηκών, όπως το carry bit. Σε αυτή την ενότητα θα αναφερθούμε στα bits αυτού του […]
2. Data memory and I/O registers
AVR Data Memory Σε ένα μικροελεγκτή AVR υπάρχουν δυο τύποι μνήμης: Η μνήμη κώδικα (code memory space) και η μνήμη δεδομένων (data memory space). Ο κώδικας που γράφουμε αποθηκεύεται στην μνήμη κώδικα ενώ τα δεδομένα στην μνήμη δεδομένων. Η μνήμη δεδομένων αποτελείται από τρία είδη μνήμης: GPRs (καταχωρητές γενικού σκοπού), τη μνήμη Ι/Ο και την […]
1. Καταχωρητές GPRs
Η CPU ενός μικροελεγκτή χρησιμοποιεί μερικούς καταχωρητές για την προσωρινή αποθήκευση δεδομένων τα οποία χρησιμοποιούνται για αριθμητικές καθώς και για λογικές πράξεις. Σε αυτή την ενότητα θα εξετάσουμε μεταξύ άλλων τους καταχωρητές γενικού σκοπού GPRs του μικροελεγκτή AVR και θα επιδείξουμε τη χρήση των GPRs με τις απλές εντολές LDI και ADD. Ένας τυπικός μικροελεγκτής […]