Μέθοδοι διευθυνσιοδότησης – μέρος 2ο

Χρησιμοποιούμε direct ή register indirect addressing mode για να έχουμε πρόσβαση σε δεδομένα που βρίσκονται αποθηκευμένα στη μνήμη δεδομένων. Σε προηγούμενη ενότητα δείξαμε πώς να χρησιμοποιούμε direct addressing mode (άμεση μέθοδος διευθυνσιοδότησης). Η register indirect addressing mode (η έμμεση με καταχωρητή μέθοδος διευθυνσιοδότησης) είναι μια σημαντική μέθοδος διευθυνσιοδότησης για τους AVRs. Στην register indirect addressing […]

Μέθοδοι διευθυνσιοδότησης – μέρος 1ο

H CPU μπορεί να έχει πρόσβαση σε δεδομένα με διαφορετικούς τρόπους. Τα δεδομένα μπορεί να βρίσκονται σε ένα καταχωρητή ή στη μνήμη ή να παρέχονται με σταθερές τιμές. Οι διάφοροι τρόποι για την πρόσβαση δεδομένων ονομάζονται μέθοδοι διευθυνσιοδότησης (addressing modes) Single – register (immediate) addressing mode Σ αυτή την μέθοδο διευθυνσιοδότησης ο τελεστέος είναι ένας […]

Εντολές περιστροφής και μετατόπισης byte

Οι μικροελεγκτές AVR με τις εντολές ROL και ROR εκτελούν περιστροφή ή μετατόπιση κατά ένα bit διαμέσου της σημαίας κρατουμένου. Παρακάτω θα εξετάσουμε αυτές τις εντολές διότι χρησιμοποιούνται ευρέως στον προγραμματισμό. Περιστροφή διαμέσου του κρατουμένου: Υπάρχουν δυο εντολές περιστροφής στους AVR που εμπλέκουν τη σημαία κρατουμένου, αυτές είναι οι ROR και ROL. Η εντολή περιστροφής […]

Εντολές διακλάδωσης υπό συνθήκη

Εντολές  σύγκρισης Οι μικροελεγκτές AVR έχουν την εντολή CP για να συγκρίνουν τελεστέους. Η εντολή σύγκρισης στην ουσία είναι μια αφαίρεση, όπου οι τιμές των τελεστέων δεν αλλάζουν. Υπάρχει επίσης και η εντολή “CPI  Rd, k” στην οποία ο δεξιός τελεστέος είναι μια σταθερή τιμή. Ο AVR έχει μερικές εντολές διακλάδωσης που μπορούν να χρησιμοποιηθούν […]

Εντολές δημιουργίας λογικών εκφράσεων

Εκτός από τις Ι/Ο και τις αριθμητικές εντολές, οι λογικές εντολές είναι μερικές από τις πιο ευρέα χρησιμοποιούμενες εντολές. Σε αυτή την ενότητα καλύπτουμε τις Boolean λογικές εντολές όπως οι AND, OR, Exclusive – OR (XOR) και το συμπλήρωμα. Η λογική εντολή AND Αυτή η εντολή εκτελεί το λογικό AND πάνω σε δυο τελεστέους (GPRs) […]

Πράξεις με προσημασμένους αριθμούς

Μέχρι στιγμής τα αριθμητικά δεδομένα που χρησιμοποιούσαμε παρίσταναν αριθμούς χωρίς πρόσημο. Όμως στη καθημερινή ζωή χρησιμοποιούμε θετικούς αλλά και αρνητικούς αριθμούς. Για παράδειγμα όταν αναφερόμαστε σε θερμοκρασία 5 βαθμούς Κελσίου κάτω από το μηδέν, αυτή παριστάνεται με την αρνητική τιμή -5, ενώ η θερμοκρασία 20 βαθμούς πάνω από το μηδέν με +20. Οι ηλεκτρονικοί υπολογιστές […]

Πράξεις με μη προσημασμένους αριθμούς

Πρόσθεση μη προσημασμένων αριθμών Για την πρόσθεση δυο 8-bit προσημασμένων αριθμών, χρησιμοποιούμε την εντολή ADD, που έχει σαν όρισμα δυο γενικού σκοπού καταχωρητών GPRs, στους οποίους έχουμε από πριν φορτώσει τις τιμές που θέλουμε να προσθέσουμε Η εντολή προσθέτει τα περιεχόμενα του καταχωρητή Rr σε εκείνα του καταχωρητή Rd. Αυτή η εντολή μπορεί να αλλάξει […]

Προγραμματισμός Ι/Ο θυρών και χειρισμός bit των I/O καταχωρητών

Στην οικογένεια των μικροελεγκτών AVR υπάρχει ένας αριθμός θυρών για Ι/Ο λειτουργίες που είναι διαφορετικός για κάθε μέλος της οικογένειας AVR. Στον 28-pin μικροελεγκτή ATmega 328 υπάρχουν συνολικά 23 πινς για τις τρεις θύρες PORTB, PORTC και PORTD. Τα υπόλοιπα πινς χρησιμοποιούνται σαν VCC, GND, RESET, AREF, AGND και AVCC. Ο αριθμός των θυρών που […]

Η εντολή CALL και ο σωρός

Η εντολή CALL και ο σωρός Μια άλλη εντολή διακλάδωσης είναι η CALL, η οποία χρησιμοποιείται για να καλέσουμε μια υπορουτίνα. Οι υπορουτίνες χρησιμοποιούνται συχνά για να καλέσουμε κομμάτια κώδικα που εκτελούνται συχνά. Αυτό κάνει το πρόγραμμα περισσότερο δομημένο και έχουμε εξοικονόμηση  μνήμης προγράμματος. Στους μικροελεγκτές AVR έχουμε τέσσερις εντολές για να καλούμε υπορουτίνες: CALL […]

Διακλαδώσεις και βρόγχοι

Πολλές φορές θέλουμε να πάμε τη ροή της εκτέλεσης ενός προγράμματος Assembly σε άλλη εντολή. Αυτό μπορούμε να το κάνουμε  με την υπό συνθήκη ή χωρίς συνθήκη διακλάδωση. Με την υπό συνθήκη διακλάδωση είναι οι εντολές: π.χ. BRNE  ή  BRSH ή με χωρίς συνθήκη είναι: οι JMP ή RJMP Χρησιμοποιώντας την εντολή BRNE για την […]

Data memory and I/O registers

AVR Data Memory Σε ένα μικροελεγκτή AVR υπάρχουν δυο τύποι μνήμης: Η μνήμη κώδικα (code memory space) και η μνήμη δεδομένων (data memory space). Ο κώδικας που γράφουμε αποθηκεύεται στην μνήμη κώδικα ενώ τα δεδομένα στην μνήμη δεδομένων. Η μνήμη δεδομένων αποτελείται από τρία είδη μνήμης: GPRs (καταχωρητές γενικού σκοπού), τη μνήμη Ι/Ο και την […]

Εισαγωγή στον προγραμματισμό AVR σε γλώσσα assembly

Η CPU ενός μικροελεγκτή δέχεται εντολές και δεδομένα σε δυαδική μορφή δηλαδή αριθμούς αποτελούμενοι από 0 και 1. Το σύνολο των εντολών που γράφουμε εκφρασμένο σε δυαδικό ή δεκαεξαδικό κώδικα ονομάζεται γλώσσα μηχανής (machine code). Για να διευκολυνθούμε στην ανάπτυξη κώδικα μηχανής χρησιμοποιούμε τον assembler, ο οποίος είναι μια εφαρμογή που δέχεται μνημονικά ονόματα για […]

Assembler directives

Assembler directives Ενώ οι εντολές λένε τι η CPU θα κάνει οι directives (αλλιώς ψευδοεντολές) δίνουν κατευθύνσεις στον assembler. Για παράδειγμα οι εντολές LDI και ADD είναι εντολές στην CPU ενώ οι .EQU , .DEVICE και .ORG είναι directives στον assembler. Στις επόμενες ενότητες παρουσιάζουμε τις πιο συνηθισμένες directives του AVR μικροελεγκτή και πως χρησιμοποιούνται. […]

AVR status register

Όπως όλοι οι άλλοι μικροελεγκτές, έτσι και ο AVR έχει ένα καταχωρητή κατάστασης (stature register) που στην ουσία είναι μια ομάδα 8-bits που λειτουργούν σαν σημαίες. Ο καταχωρητής κατάστασης του AVR αποτελείται από ένα σύνολο σημαιών για το χειρισμό αριθμητικών συνθηκών, όπως το carry bit. Σε αυτή την ενότητα θα αναφερθούμε στα bits αυτού του […]

Καταχωρητές GPRs

Η CPU ενός μικροελεγκτή χρησιμοποιεί κάμποσους καταχωρητές για την προσωρινή αποθήκευση δεδομένων τα οποία χρησιμοποιούνται για αριθμητικές καθώς και για λογικές πράξεις.  Σε αυτή την ενότητα θα εξετάσουμε μεταξύ άλλων τους καταχωρητές γενικού σκοπού GPRs του μικροελεγκτή AVR και θα επιδείξουμε τη χρήση των GPRs με τις απλές εντολές LDI και ADD. Ένας τυπικός μικροελεγκτής […]