Προγραμματισμός avr σε assembler. Πρακτικός προγραμματισμός μικροελεγκτών Atmel AVR σε γλώσσα assembly. (3η έκδοση). Ηλεκτρονικά ελληνικού τύπου


Ελπίζω λοιπόν ο ευσυνείδητος αναγνώστης να έχει ήδη συναρμολογήσει έναν προγραμματιστή, έναν πειραματικό πίνακα και επίσης να έχει εγκαταστήσει και να ρυθμίσει το απαιτούμενο λογισμικό.

Τώρα, έχοντας γράψει το πρώτο άρθρο της σειράς, καταλαβαίνω ότι ενθουσιάστηκα λίγο και έκανα το ίδιο λάθος με τους προκατόχους μου, βάζοντας τη φράση «για αρχάριους». Θα ήταν πιο ακριβές να διατυπωθεί το θέμα "Για αρχάριους στον προγραμματισμό γλώσσας συναρμολόγησης", δηλαδή, υποθέτω ότι ο αναγνώστης έχει ήδη μια τουλάχιστον επιφανειακή κατανόηση του τι είναι ένας μικροελεγκτής, διαφορετικά θα μας πάρει πολύ χρόνο για να εξοικειωθείτε με αυτό το θέμα. Για όσους δεν είναι καθόλου εξοικειωμένοι με αυτά, μπορώ να προτείνω μια σειρά άρθρων του S. Ryumik, «AVR Microcontrollers», που είναι απολύτως υπέροχο κατά τη γνώμη μου, δημοσιευμένο στο περιοδικό Radioamator (Nos. 1-11 για το 2005) . Σε αυτόν τον κύκλο, το ATmega8 επιλέχθηκε ως βασικός ελεγκτής, ωστόσο, οι γενικές λειτουργικές μονάδες του προαναφερθέντος ελεγκτή και του ATtiny13 είναι πρακτικά οι ίδιες.

Για να εξοικειωθείτε άμεσα με τον μικροελεγκτή ATtiny13, προτείνω το βιβλίο της A.V. Evstifeeva "Μικροελεγκτές" Οικογένεια AVRμικροσκοπικός. Οδηγός χρήσης» (Μ.: Εκδοτικός Οίκος «Δώδεκα-ΧΧΙ», 2007. - 432 σελ.). Περιέχει μεταφρασμένα και συστηματοποιημένα φύλλα δεδομένων για όλη τη γκάμα ελεγκτών της μικροσκοπικής οικογένειας και, κατά τη γνώμη μου, θα έπρεπε να είναι επιτραπέζιος υπολογιστής διαβάστε για όσους ασχολούνται με τον προγραμματισμό μικροελεγκτών.

Ωστόσο, καθώς προχωρά η ιστορία, θα δώσω κάποιες πληροφορίες σχετικά με τους κόμβους και τις μονάδες του ελεγκτή που θα χρησιμοποιηθούν στα γραπτά προγράμματα.

Όλα αυτά όμως είναι μια λυρική παρέκβαση. Ας επιστρέψουμε κατευθείαν στην ιστορία.

Το χειριστήριο ATtiny13, παρά το μικρό του μέγεθος, έχει πολύ καλά λειτουργικά χαρακτηριστικά. Και ο μικρός αριθμός ακίδων αντισταθμίζεται περισσότερο από τον αριθμό των λειτουργιών που εκτελεί το καθένα από αυτά. Το pinout και η περιγραφή των pins παρουσιάζονται παρακάτω:

Ο πίνακας προέρχεται από το προαναφερθέν βιβλίο του A.V. Evstifeeva.

Όπως μπορείτε να δείτε, κάθε pin μπορεί να εκτελέσει τουλάχιστον τρεις λειτουργίες ή ακόμα και πολλές περισσότερες. Αρχικά δεν θα εξετάσουμε εναλλακτικές λειτουργίες, αλλά μόνο τη βασική - ψηφιακή είσοδο/έξοδο.

Όπως φαίνεται από το σχήμα και τον πίνακα, όλοι οι ακροδέκτες, με εξαίρεση τους ακροδέκτες ισχύος, έχουν το όνομα PB ακολουθούμενο από έναν σειριακό αριθμό. Τι σημαίνει αυτό? Όλες οι ακίδες του ελεγκτή συνδυάζονται σε 8 κομμάτια για ευκολία στην εργασία μαζί τους και σε κάθε ομάδα 8 ακίδων εκχωρούνται τρεις ειδικοί καταχωρητές I/O. Γενικά, η έννοια των καταχωρητών είναι βασική όταν εργάζεστε με ελεγκτές, ειδικά σε assembler. Ας ρίξουμε μια πιο προσεκτική ματιά σε καθένα από τα τρία προαναφερθέντα μητρώα. Όλα είναι κελιά ενός byte στη μνήμη του ελεγκτή. Κάθε bit αντιστοιχεί σε μία από τις εξόδους του ελεγκτή και ο αριθμός bit στον καταχωρητή συμπίπτει με τον αριθμό εξόδου (για παράδειγμα, το 0ο bit είναι υπεύθυνο για την έξοδο PB0, το 1ο bit είναι υπεύθυνο για την έξοδο PB1, κ.λπ.). Όλοι οι καταχωρητές έχουν το δικό τους όνομα, με το οποίο γίνεται πρόσβαση κατά τη σύνταξη προγραμμάτων. Τι είδους ονόματα είναι αυτά;

1. Ο καταχωρητής DDRB είναι υπεύθυνος για την κατεύθυνση μετάδοσης πληροφοριών κάθε ακίδας ελεγκτή. Εάν οποιοδήποτε bit αυτού του καταχωρητή είναι "0", τότε η αντίστοιχη έξοδος θα είναι είσοδος και εάν "1", τότε η έξοδος. Επιπλέον, κάθε έξοδος διαμορφώνεται μεμονωμένα και οπουδήποτε στο πρόγραμμα. Αυτό σημαίνει ότι κάτω από διαφορετικές συνθήκες ή σε διαφορετικούς χρόνους, η ίδια ακίδα μπορεί να διαμορφωθεί ως είσοδος ή ως έξοδος, ανεξάρτητα από τις άλλες ακίδες.

2. Ο καταχωρητής PINB περιέχει την τρέχουσα κατάσταση όλων των ακίδων: εάν εφαρμόζεται τάση στον ακροδέκτη, τότε γράφεται ένα λογικό "1" στο αντίστοιχο bit, εάν δεν υπάρχει τάση, γράφεται ένα λογικό "0". Αυτός ο καταχωρητής χρησιμοποιείται κυρίως για την ανάγνωση της κατάστασης μιας ακίδας που βρίσκεται σε λειτουργία εισαγωγής.

3. Ο καταχωρητής PORTB εκτελεί διπλή λειτουργία ανάλογα με την κατεύθυνση μεταφοράς πληροφοριών. Εάν ο ακροδέκτης λειτουργεί ως ψηφιακή έξοδος, τότε η εγγραφή ενός «1» σε οποιοδήποτε bit του καταχωρητή PORTB προκαλεί την εμφάνιση τάσης στον αντίστοιχο ακροδέκτη και η γραφή «0» προκαλεί την εξαφάνιση της τάσης. Έτσι, στη λειτουργία εξόδου, αυτός ο καταχωρητής είναι που καθορίζει την κατάσταση κάθε ακίδας. Στη λειτουργία ψηφιακής εισόδου, η εγγραφή ενός λογικού "1" σε οποιοδήποτε bit προκαλεί τη σύνδεση της ενσωματωμένης αντίστασης έλξης στην αντίστοιχη ακίδα και γράφοντας ένα "0" για να την απενεργοποιήσει. Τι είδους είναι αυτή η "αντίσταση έλξης" και για ποιο σκοπό προορίζεται; Εάν η ακίδα λειτουργεί ως ψηφιακή είσοδος, τότε η αντίσταση του buffer εισόδου είναι αρκετά υψηλή και το ρεύμα εισόδου είναι αρκετά μικρό. Επομένως, οποιαδήποτε ηλεκτρική παρεμβολή μπορεί να οδηγήσει σε αυθόρμητη αλλαγή της εξόδου σε αυθαίρετη κατάσταση. Για να αποφευχθεί αυτό, μια αντίσταση με αντίσταση πολλών δεκάδων kilo-ohms συνδέεται μεταξύ της εισόδου και της πηγής ρεύματος, «ανεβάζοντας» το δυναμικό εισόδου στην τάση τροφοδοσίας (εξ ου και το όνομα). Το ρεύμα που ρέει μέσω αυτής της αντίστασης είναι αρκετά μικρό ώστε να μην παρεμβαίνει στο υπόλοιπο κύκλωμα, αλλά αρκετά μεγάλο για να αποτρέπει την τυχαία εναλλαγή πείρων. Συχνά θα χρησιμοποιούμε αντιστάσεις έλξης όταν εργαζόμαστε με κουμπιά, γιατί όταν δεν πιέζονται, οι ακίδες με τις οποίες συνδέονται ουσιαστικά «κρέμονται» στον αέρα και υπόκεινται σε παρεμβολές.

Πρέπει να αναφερθεί ότι κατά την ενεργοποίηση όλοι οι καταχωρητές επαναφέρονται στο 0 και κάθε ακροδέκτης λειτουργεί ως ψηφιακή είσοδος χωρίς αντίσταση έλξης.

Τώρα που έχουμε τουλάχιστον κάποια ιδέα για το ΤΙ χρειάζεται για να δουλέψουμε με εισόδους ελεγκτή, ήρθε η ώρα να μάθουμε ΠΩΣ να δουλέψουμε μαζί τους.

Ας γράψουμε το πρώτο μας πρόγραμμα εργασίαςσε συναρμολογητή. Αρχικά, θα δώσω έναν πλήρη αλγόριθμο για τη δημιουργία ενός νέου έργου, αλλά στο μέλλον θα τον παραλείψω, εστιάζοντας μόνο στο κείμενο του ίδιου του προγράμματος.

1. Μεταβείτε στο φάκελο asm και δημιουργήστε έναν νέο φάκελο σε αυτόν. Μετονομάστε το σε ένα όνομα που μας ταιριάζει. Για να γίνω συγκεκριμένος, θα αναφερθώ σε αυτά με τον αριθμό του βήματος μας. Σε αυτή την περίπτωση "βήμα 2".

2. Κάντε δεξί κλικ στο αρχείο build.bat και αλλάξτε τη διαδρομή προς το αρχείο προέλευσης, δείχνοντας τον φάκελο που δημιουργήθηκε πρόσφατα (βήμα 2). Μετά από αυτό το περιεχόμενό μου μοιάζει με αυτό:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
παύση"

Μπορεί να διαφέρει για εσάς ανάλογα με το πού αποσυσκευάσατε το αρχείο.

3. Μεταβείτε στο φάκελο Asmedit και εκτελέστε το πρόγραμμα ASM_Ed.exe

4. Στο παράθυρο που ανοίγει, γράψτε το κείμενο του προγράμματος. Θα σταθώ σε αυτό το σημείο πιο αναλυτικά, αφού είναι το κύριο στο σημερινό μας μάθημα, καθώς και στα επόμενα.

Τι είναι το κείμενο ενός προγράμματος assembler; Μπορεί να περιλαμβάνει πολλά στοιχεία γραμμένα σύμφωνα με ορισμένους κανόνες:

Οδηγίες συναρμολόγησης με ή χωρίς τελεστές ανάλογα με τη σύνταξη των εντολών. Ανάμεσα στο όνομα της εντολής και στον πρώτο τελεστή πρέπει να υπάρχει είτε ένα κενό, ένα tab ή οποιοσδήποτε αριθμός και των δύο. Οι τελεστές χωρίζονται με κόμμα, το οποίο μπορεί επίσης να προηγείται ή να ακολουθείται από έναν αυθαίρετο αριθμό διαστημάτων ή καρτελών.

Οδηγίες, καθεμία από τις οποίες αρχίζει με ".".

Ετικέτες, οι οποίες είναι θέσεις στο πρόγραμμα που ονομάζονται αυθαίρετα από τον χρήστη και στις οποίες μπορεί να χρειαστεί να πλοηγηθεί. Κάθε ετικέτα τελειώνει με έναν χαρακτήρα ":";

Σχόλια που ξεκινούν με τον χαρακτήρα ";" Όλο το κείμενο από την αρχή του σχολίου μέχρι το τέλος της γραμμής αγνοείται κατά τη δημιουργία του αρχείου hex και μπορεί να είναι εντελώς αυθαίρετο.

Κενές γραμμές για καλύτερη δομή και αναγνωσιμότητα του προγράμματος.

Δεν μπορεί να υπάρχουν περισσότερες από μία εντολές σε κάθε γραμμή. Ωστόσο, επιτρέπεται η ταυτόχρονη παρουσία μιας ετικέτας σε μια γραμμή ακολουθούμενη από μια εντολή και ένα σχόλιο.

Χρησιμοποιώντας αυτούς τους κανόνες, θα γράψουμε ένα πρόγραμμα που θα ανάψει το LED2 ενώ το κουμπί SB1 είναι πατημένο και θα το απενεργοποιήσουμε αν αφεθεί το κουμπί. Το κείμενο του προγράμματος παρουσιάζεται παρακάτω:

.συμπεριλάβετε "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - έξοδος (LED2)
sbi PORTB, 2 Ενεργοποιήστε την αντίσταση έλξης στο PB2 (κουμπί SB1)
sbic PINB, 2 ;Εάν PB2=0 (πατήθηκε το κουμπί), παραλείψτε το επόμενο. γραμμή
sbi PORTB, 4 ;Εγκατάσταση PB4 σε 1 (σβήσιμο του LED)
sbis PINB, 2 ;Εάν PB2=1 (το κουμπί ελευθερώθηκε), παραλείψτε το επόμενο. γραμμή
cbi PORTB, 4 ;Ρύθμιση PB4 σε 0 (LED αναμμένη)

Ας το δούμε πιο αναλυτικά. Η πρώτη γραμμή περιέχει την οδηγία "συμπεριλάβετε", γραμμένη σύμφωνα με τους παραπάνω κανόνες με μια τελεία στην αρχή. Σκοπός του είναι να συμπεριλάβει το αρχείο που καθορίζεται πίσω από αυτό στο κείμενο του προγράμματος. Όπως είπα στο πρώτο βήμα, θα χρειαστούμε το αρχείο "tn13def.inc". Σε αυτή τη γραμμή, θα χρειαστεί να αλλάξετε τη διαδρομή προς τη θέση του φακέλου Appnotes στον υπολογιστή σας. Γιατί πρέπει να συμπεριλάβουμε αυτό το αρχείο; Ένας περίεργος αναγνώστης μπορεί να το ψάξει και να διαβάσει το περιεχόμενό του, αλλά πιθανότατα θα καταλάβει ελάχιστα από αυτό στην αρχή. Προς το παρόν, θα πω ότι περιέχει μια αντιστοιχία μεταξύ των ονομάτων των καταχωρητών, τα οποία ο assembler δεν γνωρίζει από προεπιλογή, με τις φυσικές τους διευθύνσεις στον ελεγκτή.

Οι ακόλουθες γραμμές είναι εντολές assembler. Ο προσεκτικός αναγνώστης θα παρατηρήσει ότι χρησιμοποιούνται συνολικά τέσσερις διαφορετικές εντολές. Ας δούμε τον σκοπό του καθενός.

Η εντολή sbi έχει δύο τελεστές: ο πρώτος είναι το όνομα καταχωρητή και ο δεύτερος ο αριθμός bit. Ως αποτέλεσμα της εκτέλεσής του, το καθορισμένο bit στον καθορισμένο καταχωρητή ορίζεται σε "1".

Η εντολή cbi είναι παρόμοια σε σύνταξη με την παραπάνω και εκτελεί την ακριβώς αντίθετη λειτουργία - επαναφέρει το καθορισμένο bit στον καθορισμένο καταχωρητή στο "0".

Η εντολή sbis είναι επίσης παρόμοια στη σύνταξη με την παραπάνω. Ωστόσο, σε αντίθεση με αυτούς, δεν εκτελεί καμία λειτουργία με καταχωρητές, αλλά ελέγχει μόνο την κατάσταση του καθορισμένου bit στον καθορισμένο καταχωρητή και εάν είναι ίσο με "1", παρακάμπτει τη γραμμή που ακολουθεί την εντολή. Διαφορετικά, εκτελείται η γραμμή που ακολουθεί, όπως και όλες οι άλλες μετά από αυτήν.

Η εντολή sbiс είναι το αντίθετο της εντολής sbis. Παραλείπει την επόμενη γραμμή εάν το καθορισμένο bit καταχωρητή είναι "0".

Τώρα, συνοψίζοντας όλα τα παραπάνω, ας προσπαθήσουμε να κατανοήσουμε τον αλγόριθμο του προγράμματος. Για να ξεκινήσω, θα το κάνω αυτό κυριολεκτικά γραμμή προς γραμμή.

1 γραμμή. Η οδηγία περιλαμβάνει το αρχείο tn13def.inc, το οποίο περιέχει ορισμούς καταχωρητών.

2η γραμμή. Η εντολή sbi θέτει το "1" στο bit 4 του καταχωρητή DDRB, μεταβάλλοντας έτσι τον ακροδέκτη PB4 στην έξοδο. Αν κοιτάξετε το διάγραμμα της πλακέτας (Εικ. 1 του προηγούμενου βήματος), μπορείτε να δείτε ότι το LED2 είναι συνδεδεμένο σε αυτόν τον ακροδέκτη. Μετά την εντολή και το σύμβολο ";" έχει γραφτεί ένα σχόλιο που εξηγεί εν συντομία το νόημα των ενεργειών που εκτελούνται στη γραμμή.

3 γραμμή. Η ίδια εντολή sbi θέτει το "1" στο bit 2 του καταχωρητή PORTB, συνδέοντας την εσωτερική αντίσταση έλξης με τον ακροδέκτη PB2, στον οποίο είναι συνδεδεμένο το κουμπί SB1. Εφόσον δεν αλλάξαμε την κατάσταση του bit 2 του καταχωρητή DDRB, αυτό το pin θα παραμείνει ως είσοδος, το οποίο είναι ακριβώς αυτό που χρειαζόμαστε.

4 γραμμή. Η εντολή sbic ελέγχει την παρουσία ενός λογικού "0" στην είσοδο PB2 χρησιμοποιώντας τον καταχωρητή PINB. Αν κοιτάξετε προσεκτικά το διάγραμμα, μπορείτε να δείτε ότι τα κουμπιά, όταν πατηθούν, κλείνουν τον αντίστοιχο ακροδέκτη με το κοινό καλώδιο. Αυτή είναι μια τυπική τεχνική, καθώς όταν απελευθερώνεται το κουμπί, υπάρχει ένα λογικό "1" στην έξοδο λόγω της αντίστασης έλξης και όταν πατηθεί το κουμπί, εμφανίζεται ένα λογικό "0" λόγω της σύνδεσης του έξοδο στο κοινό καλώδιο. Έτσι, εάν υπάρχει ένα λογικό «0» στον ακροδέκτη PB2, δηλαδή πατηθεί το κουμπί, παραλείπουμε την επόμενη γραμμή και εάν το κουμπί απελευθερωθεί, τότε το εκτελούμε.

5 γραμμή. Σε αυτό, η εντολή sbi ορίζει ένα λογικό "1" στο bit 4 του καταχωρητή PORTB, απενεργοποιώντας έτσι το LED2. Ένας οξυδερκής αναγνώστης μπορεί να αναρωτηθεί γιατί το LED σβήνει αν εφαρμόσουμε τάση στην έξοδο. Η απάντηση βρίσκεται στο σχέδιο. Το LED συνδέεται με την άνοδο στο καλώδιο τροφοδοσίας και η κάθοδος στην έξοδο του ελεγκτή. Επομένως, εάν εφαρμόσετε τάση στην έξοδο, τα δυναμικά της ανόδου και της καθόδου θα είναι ίσα και το LED θα σβήσει. Εάν ένα λογικό "0" εξέρχεται στην έξοδο, τότε θα εφαρμοστεί τάση στο LED και θα ανάψει. Έτσι, ένα ζεύγος γραμμών 4 και 5 σβήνει το LED2 όταν απελευθερωθεί το κουμπί.

6 γραμμή. Το νόημα είναι αντίθετο με το 4ο. Η εντολή sbis ελέγχει την παρουσία ενός λογικού «1» στην είσοδο PB2, δηλαδή ελέγχει εάν το κουμπί έχει απελευθερωθεί. Εάν το κουμπί απελευθερωθεί, η επόμενη γραμμή παραλείπεται και η επόμενη γραμμή πηγαίνει στην επόμενη. Επειδή όμως η 7η γραμμή είναι η τελευταία, υπάρχει μετάβαση στη 2η γραμμή. Εάν πατηθεί το κουμπί, τότε εκτελείται η γραμμή 7.

7 γραμμή. Απέναντι από το 5ο. Η εντολή cbi επαναφέρει το bit 4 του καταχωρητή PORTB στο "0", ενεργοποιώντας έτσι το LED2. Έτσι, ένα ζεύγος γραμμών 6 και 7 ανάβει το LED2 όταν πατηθεί το κουμπί SB1.

Όπως μπορείτε να δείτε, δεν κάναμε κάτι ιδιαίτερα δύσκολο. Χρησιμοποιώντας γνώση μόνο 3 καταχωρητών και 4 οδηγιών, γράψαμε το πρώτο μας πρόγραμμα. Τι να την κάνεις μετά; Αν δεν το έχετε ξεχάσει ακόμα, συνεχίζουμε να γράφουμε τον αλγόριθμο δημιουργίας προγράμματος.

5. Έχοντας γράψει το κείμενο του προγράμματος στο παράθυρο του προγράμματος επεξεργασίας, επιλέξτε το στοιχείο μενού «Αρχείο» και στη λίστα που ανοίγει, κάντε κλικ στο «Αποθήκευση ως...». Στο παράθυρο αποθήκευσης αρχείων, επιλέξτε τον φάκελο step2 που δημιουργήσαμε και καθορίστε το όνομα αρχείου "main", καθώς αυτό είναι το όνομα που καθορίσαμε στο αρχείο "build.bat".

Μετά την αποθήκευση, το παράθυρο του προγράμματος θα πρέπει να μοιάζει με αυτό:

6. Δημιουργήστε ένα αρχείο hex. Για να το κάνετε αυτό, κάντε κλικ στο κουμπί "II" στη γραμμή εργαλείων. Θα πρέπει να εμφανιστεί το ακόλουθο παράθυρο:

Μας ειδοποιεί ότι η συναρμολόγηση ολοκληρώθηκε χωρίς σφάλματα και δημιουργήθηκε το αρχείο firmware “main.hex” με όγκο 6 λέξεων, δηλαδή 12 byte. το σημειώνω παρόμοιο πρόγραμμαστη γλώσσα C θα είχε τουλάχιστον 5 φορές μεγαλύτερο όγκο.

7. Έχοντας μεταβεί στο φάκελο step2, βρίσκουμε μια προσθήκη σε αυτόν με τη μορφή ενός νέου αρχείου main.hex, το οποίο μπορεί τώρα να ραφτεί στον ελεγκτή με οποιονδήποτε προγραμματιστή, κάτι που πρέπει να γίνει για να δείτε τα αποτελέσματα του το πρόγραμμα που γράψαμε. Αφού αναβοσβήνει ο ελεγκτής, εάν το κύκλωμα έχει συναρμολογηθεί σωστά, όλα θα πρέπει να λειτουργούν σύμφωνα με τον αλγόριθμο που αναπτύξαμε: όταν απελευθερωθούν τα κουμπιά, το LED2 θα πρέπει να είναι απενεργοποιημένο και ενώ το κουμπί SB1 είναι πατημένο, θα πρέπει να είναι αναμμένο.

Πριν από το επόμενο βήμα, σας προτείνω να κάνετε τις ακόλουθες εργασίες:

1. Προσθέστε στο πρόγραμμα την επεξεργασία του πατήματος του κουμπιού SB2 με τον αντίθετο αλγόριθμο: όταν απελευθερωθεί το κουμπί SB2, το LED1 θα πρέπει να ανάβει και όταν πατηθεί, θα πρέπει να είναι σβηστό.

2. Γράψτε ένα πρόγραμμα για τον έλεγχο του LED2 χρησιμοποιώντας και τα δύο κουμπιά. Όταν πατηθεί το κουμπί SB1, το LED θα πρέπει να ανάβει και να παραμένει αναμμένο μέχρι να πατηθεί το κουμπί SB2, το οποίο το απενεργοποιεί μέχρι το επόμενο πάτημα του SB1.

Ο μεταγλωττιστής μεταφράζει πηγαίους κώδικεςαπό τη γλώσσα assembly στον κώδικα αντικειμένου. Ο κωδικός αντικειμένου που προκύπτει μπορεί να χρησιμοποιηθεί στον προσομοιωτή ATMEL AVR Studio, ή στον εξομοιωτή In-Circuit ATMEL AVR. Ο μεταγλωττιστής δημιουργεί επίσης κώδικα που μπορεί να προγραμματιστεί απευθείας σε μικροελεγκτές AVR.

Ο μεταγλωττιστής δημιουργεί κώδικα που δεν απαιτεί σύνδεση.

Ο μεταγλωττιστής εκτελείται κάτω από Microsoft Windows 3.11, Microsoft Windows95 και Microsoft Windows NT. Επιπλέον, υπάρχει μια έκδοση κονσόλας για MS-DOS.

Σετ οικογενειακών οδηγιών Μικροελεγκτές AVRπεριγράφεται εν συντομία σε αυτό το έγγραφο, για πιο ολοκληρωμένες οδηγίες, ανατρέξτε στις πλήρεις οδηγίες και την τεκμηρίωση για τον συγκεκριμένο μικροελεγκτή σας.

Πηγαίοι κώδικες

Ο μεταγλωττιστής λειτουργεί με αρχεία προέλευσης που περιέχουν οδηγίες, ετικέτες και οδηγίες. Οι οδηγίες και οι οδηγίες έχουν συνήθως έναν ή περισσότερους τελεστές.

Η γραμμή κώδικα δεν πρέπει να είναι μεγαλύτερη από 120 χαρακτήρες.

Οποιαδήποτε γραμμή μπορεί να ξεκινά με μια ετικέτα, η οποία είναι μια σειρά χαρακτήρων που τελειώνει με άνω και κάτω τελεία. Οι ετικέτες χρησιμοποιούνται για να υποδείξουν το μέρος στο οποίο μεταφέρεται ο έλεγχος κατά τις μεταβάσεις, καθώς και για να καθορίσουν ονόματα μεταβλητών.

Η συμβολοσειρά εισόδου μπορεί να πάρει μία από τις τέσσερις μορφές:

[ετικέτα:] οδηγία [τελεστές] [Σχόλιο][ετικέτα:] οδηγία [τελεστές] [Σχόλιο]Ενα σχόλιοΚενή γραμμή

Το σχόλιο έχει την εξής μορφή:

; [Κείμενο]

Οι θέσεις σε αγκύλες είναι προαιρετικές. Το κείμενο μετά το ερωτηματικό (;) και μέχρι το τέλος της γραμμής αγνοείται από τον μεταγλωττιστή. Οι ετικέτες, οι οδηγίες και οι οδηγίες περιγράφονται λεπτομερέστερα παρακάτω.

Παραδείγματα:

ετικέτα: .EQU var1=100 ; Ορίζει το var1 σε 100 (Αυτή είναι οδηγία) .EQU var2=200 ; Ορίζει var2 έως 200

δοκιμή: rjmp test ; Ατελείωτος βρόχος (Αυτή είναι μια οδηγία) ; Γραμμή με ένα μόνο σχόλιο

; Άλλη μια γραμμή με σχόλιο

Ο μεταγλωττιστής δεν απαιτεί ετικέτες, οδηγίες, σχόλια ή οδηγίες να βρίσκονται σε μια συγκεκριμένη στήλη μιας γραμμής.

Οδηγίες επεξεργαστή avr

Παρακάτω είναι ένα σύνολο εντολών για επεξεργαστές AVR. Μπορείτε να βρείτε μια πιο λεπτομερή περιγραφή τους στο Βιβλίο δεδομένων AVR.

Αριθμητική και λογικές οδηγίες

Βελτίωση της μνήμης

τελεστές

Περιγραφή

Λειτουργία

Σημαίες

Κύκλοι

Rd,Rr

Άθροιση χωρίς μεταφορά

Rd,Rr

Άθροιση με μεταφορά

Rd = Rd + Rr + C

Rd,Rr

Αφαίρεση χωρίς μεταφορά

Rd,Κ8

Αφαίρεση σταθεράς

Rd,Rr

Αφαίρεση με μεταφορά

Rd = Rd - Rr - C

Rd,Κ8

Αφαίρεση σταθεράς με μεταφορά

Rd = Rd - K8 - C

Rd,Rr

Λογικό ΚΑΙ

Rd,Κ8

Λογικό ΚΑΙ με σταθερά

Rd,Rr

Λογικό Ή

Rd,Κ8

Λογικό Ή με σταθερά

Rd,Rr

Λογικό αποκλειστικό Ή

Αντιστροφή Bit

Αλλαγή πινακίδας (Επιπλέον κωδικός)

Rd,Κ8

Ορισμός bit(s) σε έναν καταχωρητή

Rd,Κ8

Εκκαθάριση bit(ων) σε καταχωρητή

Rd = Rd ($FF - K8)

Αύξηση τιμής μητρώου

Μείωση τιμής καταχωρητή

Έλεγχος για μηδέν ή αρνητικότητα

Εκκαθάριση εγγραφής

Ορισμός μητρώου

Rdl,Κ6

Προσθέστε μια σταθερά και μια λέξη

Rdh:Rdl = Rdh:Rdl + K6

Rdl,Κ6

Αφαιρέστε μια σταθερά από μια λέξη

Rdh:Rdl = Rdh:Rdl - K 6

Rd,Rr

Πολλαπλασιασμός ανυπόγραφων αριθμών

R1:R0 = Rd * Rr

Rd,Rr

Πολλαπλασιασμός υπογεγραμμένων αριθμών

R1:R0 = Rd * Rr

Rd,Rr

Πολλαπλασιασμός ενός υπογεγραμμένου αριθμού με έναν ανυπόγραφο αριθμό

R1:R0 = Rd * Rr

Rd,Rr

Πολλαπλασιασμός ανυπόγραφων κλασμάτων

R1:R0 = (Rd * Rr)<< 1

Rd,Rr

Πολλαπλασιασμός υπογεγραμμένων κλασμάτων

R1:R0 = (Rd *Rr)<< 1

Rd,Rr

Πολλαπλασιασμός ενός υπογεγραμμένου κλάσματος με έναν ανυπόγραφο αριθμό

R1:R0 = (Rd * Rr)<< 1

Οδηγίες υποκαταστήματος

Βελτίωση της μνήμης

τελεστές

Περιγραφή

Λειτουργία

Σημαίες

Κύκλοι

Σχετική μετάβαση

Έμμεση μετάβαση σε ( Ζ)

Εκτεταμένη έμμεση μετάβαση σε ( Ζ)

STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND

Σχετική κλήση υπορουτίνας

STACK = PC+1, PC = PC + k + 1

Έμμεση κλήση ( Ζ)

STACK = PC+1, PC = Z

Εκτεταμένη έμμεση κλήση ( Ζ)

STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND

Κλήση υπορουτίνας

STACK = PC+2, PC = k

Επιστροφή από την υπορουτίνα

Επιστροφή από διακοπή

Rd,Rr

Συγκρίνετε, παραλείψτε αν είναι ίσο

εάν (Rd ==Rr) PC = PC 2 ή 3

Rd,Rr

Συγκρίνω

Rd,Rr

Σύγκριση με μεταφορά

Rd,Κ8

Σύγκριση με σταθερά

Rr,σι

Παράλειψη εάν το bit στο μητρώο έχει διαγραφεί

if(Rr(b)==0) PC = PC + 2 ή 3

Rr,σι

Παράλειψη εάν έχει οριστεί bit στο μητρώο

if(Rr(b)==1) PC = PC + 2 ή 3

Π,σι

Παράλειψη εάν το bit in port έχει διαγραφεί

if(I/O(P,b)==0) PC = PC + 2 ή 3

Π,σι

Παράλειψη εάν έχει οριστεί bit θύρας

if(I/O(P,b)==1) PC = PC + 2 ή 3

μικρό,κ

Μετάβαση εάν η σημαία στο SREG έχει διαγραφεί

if(SREG(s)==0) PC = PC + k + 1

μικρό,κ

Πηγαίνετε εάν η σημαία στο SREG έχει οριστεί

if(SREG(s)==1) PC = PC + k + 1

Πήγαινε αν είναι ίσο

αν(Ζ==1) Η/Υ = Η/Υ + κ + 1

Παράλειψη αν δεν είναι ίσο

αν(Ζ==0) Η/Υ = Η/Υ + κ + 1

Πηγαίνετε εάν έχει εγκατασταθεί η μεταφορά

if(C==1) PC = PC + k + 1

Πηγαίνετε αν διαγραφεί η μεταφορά

if(C==0) PC = PC + k + 1

Πήδα αν είναι ίσο ή μεγαλύτερο

if(C==0) PC = PC + k + 1

Παράλειψη αν είναι λιγότερο

if(C==1) PC = PC + k + 1

Πήγαινε αν μείον

αν(N==1) PC = PC + k + 1

Πήγαινε αν συν

if(N==0) PC = PC + k + 1

Άλμα αν είναι μεγαλύτερο ή ίσο (υπογραφή)

if(S==0) PC = PC + k + 1

Πήδα αν λιγότερο (με πρόσημο)

if(S==1) PC = PC + k + 1

Μετάβαση εάν έχει οριστεί η εσωτερική σημαία μεταφοράς

αν(Η==1) PC = PC + k + 1

Μετάβαση εάν η εσωτερική σημαία μεταφοράς έχει διαγραφεί

if(H==0) PC = PC + k + 1

Μετάβαση εάν έχει οριστεί η σημαία T

αν(Τ==1) Η/Υ = Η/Υ + κ + 1

Μεταβείτε εάν η σημαία T έχει διαγραφεί

αν(T==0) PC = PC + k + 1

Μετάβαση εάν έχει οριστεί η σημαία υπερχείλισης

if(V==1) PC = PC + k + 1

Μετάβαση εάν η σημαία υπερχείλισης έχει διαγραφεί

if(V==0) PC = PC + k + 1

Μεταβείτε εάν είναι ενεργοποιημένες οι διακοπές

αν(I==1) Η/Υ = Η/Υ + κ + 1

Πηγαίνετε εάν οι διακοπές είναι απενεργοποιημένες

αν(I==0) PC = PC + k + 1

* Για λειτουργίες πρόσβασης δεδομένων, ο αριθμός των κύκλων υποδεικνύεται βάσει της πρόσβασης στην εσωτερική μνήμη δεδομένων και δεν είναι σωστός όταν εργάζεστε με εξωτερική μνήμη RAM. Για τις οδηγίες CALL, ICALL, EICALL, RCALL, RET και RETI, είναι απαραίτητο να προσθέσετε τρεις κύκλους συν δύο κύκλους για κάθε αναμονή σε ελεγκτές με υπολογιστή μικρότερο από 16 bit (128 KB μνήμη προγράμματος). Για συσκευές με μνήμη προγράμματος μεγαλύτερη από 128 KB, προσθέστε πέντε κύκλους συν τρεις κύκλους για κάθε αναμονή.

Οδηγίες μεταφοράς δεδομένων

Βελτίωση της μνήμης

τελεστές

Περιγραφή

Λειτουργία

Σημαίες

Κύκλοι

Rd,Rr

Αντιγραφή μητρώου

Rd,Rr

Αντιγράψτε μερικά μητρώα

Rd+1:Rd = Rr+1:Rr, r,d ζυγός

Rd,Κ8

Σταθερό φορτίο

Rd,κ

Rd,Χ

Rd,X+

Rd = (X), X=X+1

Rd,

X=X-1, Rd = (X)

Rd,Υ

Rd,Υ+

Rd = (Υ), Υ=Υ+1

Rd,

Y=Y-1, Rd = (Y)

Rd,Υ+q

Rd,Ζ

Rd,Ζ+

Rd = (Ζ), Ζ=Ζ+1

Rd,

Z=Z-1, Rd = (Z)

Rd,Ζ+q

Άμεση εξοικονόμηση

Χ,Rr

Έμμεση διατήρηση

X+,Rr

(Χ) = Rr, X=X+1

,Rr

Υ,Rr

Έμμεση διατήρηση

Υ+,Rr

Έμμεση εξοικονόμηση με μετα-αύξηση

(Υ) = Rr, Υ=Υ+1

,Rr

Έμμεση διατήρηση με προμείωση

Υ=Υ-1, (Υ) = Rr

Υ+q,Rr

Ζ,Rr

Έμμεση διατήρηση

Ζ+,Rr

Έμμεση εξοικονόμηση με μετα-αύξηση

(Ζ) = Rr, Ζ=Ζ+1

,Rr

Έμμεση διατήρηση με προμείωση

Z=Z-1, (Z) = Rr

Ζ+q,Rr

Έμμεση αποθήκευση με αντικατάσταση

R0 = ( Ζ)

Rd,Ζ

Rd = ( Ζ)

Rd,Ζ+

Rd = ( Ζ), Ζ=Ζ+1

R0 = (RAMPZ: Ζ)

Rd,Ζ

Rd = (RAMPZ: Ζ)

Rd,Ζ+

Rd = (RAMPZ: Ζ), Ζ = Ζ+1

Αποθήκευση στη μνήμη προγράμματος

(Ζ) = R1:R0

Εκτεταμένη αποθήκευση στη μνήμη προγράμματος

(RAMPZ: Ζ) = R1:R0

Rd,Π

Ανάγνωση θύρας

Π,Rr

Γράψτε στη θύρα

Ωθώντας έναν καταχωρητή στη στοίβα

Βγάζοντας ένα μητρώο από τη στοίβα

* Για λειτουργίες πρόσβασης δεδομένων, ο αριθμός των κύκλων υποδεικνύεται κατά την πρόσβαση στην εσωτερική μνήμη δεδομένων και δεν είναι σωστός όταν εργάζεστε με εξωτερική μνήμη RAM. Για τις οδηγίες LD, ST, LDD, STD, LDS, STS, PUSH και POP, πρέπει να προσθέσετε έναν κύκλο συν έναν κύκλο για κάθε αναμονή.

Οδηγίες για την εργασία με bits

Βελτίωση της μνήμης

τελεστές

Περιγραφή

Λειτουργία

Σημαίες

Κύκλοι

Λογική μετατόπιση προς τα αριστερά

Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7)

Λογική μετατόπιση δεξιά

Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0)

Περιστρέψτε αριστερά μέσω C

Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7)

Περιστρέψτε δεξιά μέσω C

Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0)

Αριθμητική μετατόπιση δεξιά

Rd(n)=Rd(n+1), n=0,...,6

Αναδιάταξη σημειωματάριων

Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0)

Ρύθμιση της σημαίας

Καθαρίζοντας τη σημαία

Π,σι

Ρύθμιση bit στη θύρα

Π,σι

Clear bit στη θύρα

Rr,σι

Rd,σι

Φόρτωση bit από το T στον καταχωρητή

Ορίστε τη σημαία μεταφοράς

Clear Carry Flag

Ορισμός αρνητικού αριθμού σημαίας

Διαγραφή σημαίας αρνητικού αριθμού

Ορίστε μηδενική σημαία

Διαγραφή μηδενικής σημαίας

Ορισμός σημαίας διακοπής

Διαγραφή σημαίας διακοπής

Ορισμός υπογεγραμμένου αριθμού σημαίας

Εκκαθάριση υπογεγραμμένου αριθμού σημαίας

Ορισμός σημαίας υπερχείλισης

Καθαρή σημαία υπερχείλισης

Ορισμός σημαίας Τ

Καθαρή σημαία Τ

Ορισμός εσωτερικής σημαίας μεταφοράς

Σαφής εσωτερική σημαία μεταφοράς

Καμία επέμβαση

Ύπνος (μείωση κατανάλωσης ενέργειας)

Δείτε την περιγραφή των οδηγιών

Επαναφορά του φύλακα

Δείτε την περιγραφή των οδηγιών

Ο συναρμολογητής δεν κάνει διάκριση πεζών-κεφαλαίων.

Οι τελεστές μπορούν να είναι αυτού του τύπου.

Καλησπέρα σε όλους! Εκπέμπω από έναν φιλόξενο κόσμο που ονομάζεται "assembler". Θα διευκρινίσω αμέσως ότι το θέμα αφορά τους μικροελεγκτές AVR - και δεν ξέρω ακόμα αν αυτή η ανάρτηση θα είναι χρήσιμη σε όσους θέλουν να χρησιμοποιήσουν το assembler για οποιαδήποτε άλλη εργασία. Το γεγονός είναι ότι κυριολεκτικά πριν από λίγες μέρες άρχισα να μαθαίνω assembler από την αρχή - πρέπει να φτιάξω μια συσκευή - και αποφάσισα να κάνω τα πάντα σε αυτό μόνος μου. Έτσι, μια ωραία μέρα το κατάλαβα Η εκμάθηση του assembler είναι απολύτως άχρηστη!Η γλώσσα συναρμολόγησης γίνεται μόνο κατανοητή! Δηλαδή, σε όλους όσους θέλουν να προγραμματίσουν σε γλώσσα assembly, συνιστώ ανεπιφύλακτα να εμβαθύνετε λεπτομερώς στο πώς λειτουργεί ΦΥΣΙΚΑ ο μικροελεγκτής και στη συνέχεια να μελετήσετε τις περιπλοκές των εντολών.
Λοιπόν, μάλλον θα ξεκινήσω μια μικρή σειρά άρθρων στην οποία θα σας πω από την αρχή πώς ακριβώςΚατάλαβα ορισμένα πράγματα στον προγραμματισμό της γλώσσας συναρμολόγησης - νομίζω ότι για όσους δεν καταλαβαίνουν καθόλου τι είναι το ASM, θα είμαι ακριβώς ένας τέτοιος "μεταφραστής" από τη γλώσσα όσων είναι πολύ καλοί σε αυτό το θέμα.

Θα πω αμέσως ότι λίγο-πολύ μπήκα σε αυτό το θέμα με την προτροπή του DIHALT - επομένως αυτά τα άρθρα θα είναι ένα είδος μετάφρασης από μια γλώσσα συναρμολόγησης-μικροελεγκτή super-duper σε μια γλώσσα κατανοητή στους περισσότερους ανθρώπους. Λοιπόν, ελπίζω οι γκουρού να με διορθώσουν καθώς προχωράει το έργο και αν ξαφνικά εξηγήσω κάτι λάθος, θα με διορθώσουν.
Έτσι, τα πρώτα συμπεράσματα για το assembler που έβγαλα πριν από μερικές μέρες με συγκλόνισαν -και κάθισα να διαβάζω άρθρα του DI DALT από τις 23:00 έως τις 5 το πρωί - μετά από τα οποία πήγα για ύπνο ικανοποιημένος και χαρούμενος Προγραμματισμός γλώσσας assembly για μικροελεγκτές.
Πώς μπορεί να εξηγηθεί αυτό ακόμα πιο απλά; Νομίζω ότι πρέπει να ξεκινήσουμε από την ίδια την ουσία.
***
Αρχικά, δεν θα μπούμε σε τεχνικές λεπτομέρειες (θα μιλήσουμε για αυτές στο επόμενο άρθρο) - απλώς φανταστείτε ότι υπάρχουν 3 χαρακτήρες:
1. Μικροελεγκτής -Αυτός είναι ο Άγγλος Στιβ, που ήρθε στο Ρώσο. Γνωρίζει τέλεια αγγλικά, αλλά δεν καταλαβαίνει καθόλου ρωσικά - ούτε μια λέξη. Μόνο αγγλικά. Έχασε το επιχείρημα και δεσμεύτηκε να κάνει ό,τι του ζητούσε ο Ρώσος χωρίς αμφιβολία.
2. Συναρμολογητής -Πρόκειται για τη μεταφράστρια Vasya, της οποίας η μητέρα είναι Αγγλίδα και ο πατέρας της Ρώσος. Γνωρίζει άριστα και αγγλικά και ρωσικά.
3. Εμείς -Αυτός είναι ένας Ρώσος στον οποίο έχει έρθει ένας Άγγλος. Λοιπόν, δηλαδή, είμαστε εμείς =) Ταυτόχρονα, ξέρουμε άριστα ρωσικά και (!!!) λίγα αγγλικά - λίγο, με λεξικό.
***
Φανταστείτε αυτή την κατάσταση - ένας Άγγλος κάθεται σε μια καρέκλα στο δωμάτιό σας. Και κάθεσαι στον υπολογιστή σου και διαβάζεις αυτή την ανάρτηση, όταν ξαφνικά άνοιξε το παράθυρό σου! Αυτό είναι κακή τύχη! Ο αέρας φυσάει, η κουρτίνα έχει γίνει πανί... Καλό θα ήταν να το κλείσουμε! Αλλά είναι πολύ τεμπέλης να σηκωθείς από την καρέκλα, να σηκώσεις τα πόδια σου από τη μονάδα συστήματος, να τα βάλεις σε παντόφλες, να αφήσεις κάτω την κούπα του καφέ σου (μπύρα) και να πας να πολεμήσεις τα στοιχεία. Και τότε ξαφνικά συνειδητοποιείς ότι έχουμε έναν Άγγλο στο δωμάτιο που έχει χάσει το στοίχημά του και ήρθε η ώρα να τον κυνηγήσουμε! Και του λες τόσο γλυκά: «Φίλε! Σε παρακαλώ, κλείσε το παράθυρο και μετά μπορείς να καθίσεις ξανά στην καρέκλα!». και κάθεται, σε κοιτάει απορημένος και δεν κάνει τίποτα! Μπορείτε, φυσικά, να χτυπήσετε τη λαχανόσουπα - αλλά και πάλι δεν θα σας καταλάβει! Τότε καλείς τον φίλο σου μεταφραστή Βασίλι - έρχεται και κάθεται δίπλα στον Άγγλο σε μια καρέκλα. Και λες - Μετάφρασε: "Στιβ, πήγαινε και κλείσε το παράθυρο και μετά κάτσε στην καρέκλα!" Ο μεταφραστής μεταφράζει στα αγγλικά - ο Άγγλος καταλαβαίνει και πηγαίνει και κλείνει το παράθυρο και μετά έρχεται και κάθεται σε μια καρέκλα.
Σε αυτό το σημείο, πρέπει απλώς να κατανοήσετε τον ρόλο του assembler σε αυτήν την αλυσίδα "We-Assembler-Controller"
Δηλαδή πώς θα καταλάβαινε ο καθένας τι είναι assembler; Στη συνέχεια, διαβάστε.
***

Ας φανταστούμε λοιπόν αυτή την κατάσταση. Λέτε στη Βάσια - "Άκου, εν ολίγοις, αυτό είναι η περίπτωση - ξέχασα την αριθμομηχανή στο σπίτι, διαίρεσε το 56983 με το 2 και πες στον Στιβ να κάνει τόσα push-ups με τις γροθιές σου" και η Βάσια υπολογίζει στην αριθμομηχανή και λέει ο Steve στα αγγλικά «Κάνε push-ups με τις γροθιές σου 28491 φορές» Λέγεται "ΔΙΕΥΘΥΝΤΙΚΟΣ"- με άλλα λόγια, μια οδηγία είναι ένα καθήκον για τη Vasya, το αποτέλεσμα της οποίας είναι η δράση του Steve.

Υπάρχει μια άλλη κατάσταση - λέτε στον Vasya "Πες στον Steve να κάνει 28491 push-ups" και ο Vasya απλώς μεταφράζει τα λόγια σου στα αγγλικά. Ονομάζεται ΧΕΙΡΙΣΤΗΣ

Είναι απλό - υπάρχει οδηγία και υπάρχει χειριστής. Ο χειριστής είναι η άμεση οδηγία σας στον Steve τι να κάνει - η Vasya εδώ μεταφράζει το αίτημά σας μόνο στα αγγλικά. Και η Οδηγία είναι έργο για τον ίδιο τον Βάσια - και ο Βάσια κάνει πρώτα αυτό που του είπατε και μετά, ανάλογα με το αποτέλεσμα, λέει στον Στιβ κάτι.

Τώρα θα βασανίζουμε τακτικά τον Άγγλο! Πρώτα όμως πρέπει να γνωρίσουμε καλύτερα τον μεταφραστή μας Βάσια. Πρέπει να γνωρίζετε τα εξής - η Βάσια πάντα σας υπακούει αδιαμφισβήτητα - αυτό που του είπαν, το κάνει. Η αριθμομηχανή του Vasya δεν έχει δεκαδικά ψηφία - αν κοιτάξετε το παράδειγμα με push-ups, τότε 56983 \ 2 = 28491,5 - αλλά τα πάντα του Vasya μετά την αποκοπή της υποδιαστολής - και βλέπει μόνο έναν ακέραιο - και δεν πειράζει είτε θα υπάρχουν 28491.000001 είτε θα υπάρχουν 28491.9999999 - για τον Vasya αυτό είναι ένα μεγάλο θέμα θα είναι 28491 και στις δύο περιπτώσεις. Τίποτα δεν είναι στρογγυλεμένο. Πιο σημαντικές πληροφορίες για τη Βάσια. Ο Βάσια είναι σκληρός - δεν τον νοιάζει το γεγονός ότι ο Στιβ γαμιέται να κάνει push-up είκοσι οκτώ χιλιάδες φορές. Του είπαν ότι η Βάσια μετέφρασε. Και όχι μόνο μετέφρασε, αλλά και με ανάγκασε να κάνω αυτό που ζητήσατε. Έτσι, αν ο Steve πεθάνει στο εικοσιτρείς χιλιάδες πεντακόσια δέκατα τρία push-up, θα είναι αποκλειστικά δικό σου λάθος.

Στην πραγματικότητα, αυτό είναι όλο προς το παρόν. Στην επόμενη ανάρτηση θα εμβαθύνουμε - προς το παρόν αρκεί να το καταλάβουμε. Απλώς φανταστείτε αυτήν την κατάσταση και καταλάβετε τι είναι τι, ποιος παίζει τι ρόλο και πώς διαφέρει η οδηγία από τον χειριστή.
Και μετά θα προσπαθήσουμε να ονομάσουμε τα πάντα με το σωστό τους όνομα και να υπολογίσουμε χονδρικά πώς λειτουργεί ο assembler με έναν μικροελεγκτή όπως ένας ενήλικας.

Τι χρειάζεται για να γίνετε επαγγελματίας προγραμματιστής προγραμμάτων για μικροελεγκτές και να φτάσετε σε ένα επίπεδο δεξιοτήτων που θα σας επιτρέψει να βρείτε εύκολα και να βρείτε δουλειά με υψηλό μισθό (ο μέσος μισθός ενός προγραμματιστή μικροελεγκτών στη Ρωσία στις αρχές του 2015 είναι
80.000 ρούβλια).

ΠΡΟΣΘΗΚΗ

Σύνταξη: ADD reg1, reg2 Αυτή η εντολή προσθέτει τα περιεχόμενα των καταχωρητών reg1 και reg2, αποθηκεύοντας το αποτέλεσμα στον καταχωρητή reg1. Αλλάζει την κατάσταση των σημαιών H, S, V, N, Z, C.

ΚΑΙ

Σύνταξη: AND reg1, reg2 Αυτή η εντολή εκτελεί μια λειτουργία Logical AND μεταξύ των καταχωρητών reg1 και reg2, αποθηκεύοντας το αποτέλεσμα στον καταχωρητή reg1. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

ΚΑΙ ΕΓΩ

Σύνταξη: ANDI hreg, αριθμός Αυτή η εντολή εκτελεί μια λειτουργία Logical AND μεταξύ των περιεχομένων του high καταχωρητή hreg και του σταθερού αριθμού (0...255), αποθηκεύοντας το αποτέλεσμα στον καταχωρητή. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

BRBC

Σύνταξη: BRBC bit, label Αυτή η εντολή ελέγχει την κατάσταση του bit καταχωρητή SREG ($3F) και μεταβαίνει στην ετικέτα εάν το bit είναι καθαρό. Η ετικέτα πρέπει να βρίσκεται εντός 63 εντολών από την εντολή brbc.

BRBS

Σύνταξη: bit BRBS, ετικέτα Αυτή η εντολή ελέγχει την κατάσταση του bit καταχωρητή SREG ($3F) και μεταβαίνει στην ετικέτα εάν το bit έχει οριστεί. Η ετικέτα πρέπει να βρίσκεται εντός 63 εντολών από την εντολή brbs.

BRCC

Σύνταξη: bit BRCC, ετικέτα Αυτή η εντολή ελέγχει τη σημαία μεταφοράς (C) και μεταβαίνει στην ετικέτα εάν είναι καθαρή.

BRCS

Σύνταξη: bit BRCS, ετικέτα Αυτή η εντολή ελέγχει τη σημαία μεταφοράς (C) και μεταβαίνει στην ετικέτα εάν έχει οριστεί.

BREQ

Σύνταξη: BREQ bit, label Αυτή η εντολή ελέγχει τη σημαία μηδέν (Z) και μεταβαίνει στην ετικέτα εάν έχει οριστεί.

BRNE

Σύνταξη: bit BRNE, ετικέτα Αυτή η εντολή ελέγχει τη σημαία μηδέν (Z) και μεταβαίνει στην ετικέτα εάν είναι καθαρή.

C.B.I.

Σύνταξη: CBI ioreg, bit Αυτή η εντολή επαναφέρει το bit του καταχωρητή I/O ioreg ($00...$1F) στο 0. Ο αριθμός bit καθορίζει τον τελεστή bit.

CLR

Σύνταξη: CLR reg Αυτή η εντολή επαναφέρει όλα τα bit του καταχωρητή reg στο 0. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

C.P.

Σύνταξη: CP reg1, reg2 Αυτή η εντολή συγκρίνει τα περιεχόμενα των καταχωρητών reg1 και reg2 αφαιρώντας τον reg2 από τον reg1. Τα περιεχόμενα των μητρώων δεν αλλάζουν. Αλλάζει την κατάσταση των σημαιών H, S, V, N, Z, C.

ΔΤΚ

Σύνταξη: CPI hreg, αριθμός Αυτή η εντολή συγκρίνει τα περιεχόμενα του καταχωρητή hreg με την αριθμητική σταθερά αφαιρώντας τη σταθερά από τον καταχωρητή. Τα περιεχόμενα των μητρώων δεν αλλάζουν. Αλλάζει την κατάσταση των σημαιών H, S, V, N, Z, C. Η εντολή λειτουργεί μόνο με καταχωρητές R16…R31.

ΔΕΚ

Σύνταξη: DEC reg Αυτή η εντολή μειώνει τα περιεχόμενα του καταχωρητή reg κατά ένα, γράφοντας το αποτέλεσμα πίσω στον καταχωρητή. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

ΣΕ

Σύνταξη: IN reg, ioreg Αυτή η εντολή μεταφέρει τα περιεχόμενα του καταχωρητή I/O ioreg στο RON reg.

INC

Σύνταξη: INC reg Αυτή η εντολή αυξάνει τα περιεχόμενα του καταχωρητή reg κατά ένα, γράφοντας το αποτέλεσμα πίσω στον καταχωρητή. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

LD

Σύνταξη: LD reg, longreg Αυτή η εντολή φορτώνει ένα byte από τη μνήμη δεδομένων (διεύθυνση μνήμης που περιέχεται στον μεγαλύτερο καταχωρητή) στον καταχωρητή reg (για το μοντέλο 1200).

LDI

Σύνταξη: LDI hreg, number Αυτή η εντολή φορτώνει την άμεση τιμή του αριθμού στον υψηλό καταχωρητή hreg (η εντολή μπορεί να λειτουργήσει μόνο με καταχωρητές R16...R31). Ο αριθμός πρέπει να είναι στην περιοχή 0…255.

LSR

Σύνταξη: LSR reg Αυτή η εντολή εκτελεί μια λογική μετατόπιση προς τα δεξιά των περιεχομένων του καταχωρητή reg. Σε αυτήν την περίπτωση, το 0ο bit αντιγράφεται στη σημαία C, το 7ο bit επαναφέρεται στο 0. Αλλάζει την κατάσταση των σημαιών S, V, N, Z, C.

ORI

Σύνταξη: ORI hreg, αριθμός Αυτή η εντολή εκτελεί μια λειτουργία Logical OR μεταξύ των περιεχομένων του high καταχωρητή hreg και της σταθεράς αριθμού (0...255), αποθηκεύοντας το αποτέλεσμα στον καταχωρητή. Αλλάζει την κατάσταση των σημαιών S, V, N, Z.

ΕΞΩ

Σύνταξη: OUT ioreg, reg Αυτή η εντολή μεταφέρει τα περιεχόμενα του καταχωρητή γενικού σκοπού reg στον καταχωρητή I/O ioreg.

RCALL

Σύνταξη: Ετικέτα RCALL Αυτή η εντολή καλεί μια υπορουτίνα που προσδιορίζεται από ετικέτα, η οποία πρέπει να είναι εντός 2048 εντολών μιας εντολής κλήσης (σχετική κλήση).

ΜΟΥΣΚΕΥΩ

Σύνταξη: RET Αυτή η εντολή επιστρέφει από μια υπορουτίνα μεταβαίνοντας στην εντολή που ακολουθεί την αρχική εντολή κλήσης.

ΡΕΤΙ

Σύνταξη: RETI Αυτή η εντολή επιστρέφει από μια υπορουτίνα και ορίζει τη σημαία ενεργοποίησης γενικής διακοπής.

RJMP

Σύνταξη: Ετικέτα RJMP Σχετικό άλμα. Μεταβαίνει στην ενότητα του προγράμματος που υποδεικνύεται από την ετικέτα, η οποία πρέπει να είναι εντός του 2048 της εντολής RJMP.

SBI

Σύνταξη: SBI ioreg, bit Αυτή η εντολή ορίζει το bit καταχωρητή I/O ioreg ($00...$1F) σε 1. Ο αριθμός bit καθορίζει τον τελεστή bit.

SBIC

Σύνταξη: SBIC ioreg, bit Αυτή η εντολή ελέγχει το bit καταχωρητή I/O ioreg ($00...$1F) και παραλείπει την επόμενη εντολή εάν αυτό το bit είναι καθαρό. Ο αριθμός bit καθορίζει τον τελεστή bit.

SBIS

Σύνταξη: SBIS ioreg, bit Αυτή η εντολή ελέγχει το bit καταχωρητή I/O ioreg ($00...$1F) και παραλείπει την επόμενη εντολή εάν έχει οριστεί αυτό το bit. Ο αριθμός bit καθορίζει τον τελεστή bit.

SEI

Σύνταξη: SEI Αυτή η εντολή ορίζει τη σημαία ενεργοποίησης γενικής διακοπής.

SER

Σύνταξη: SER reg Αυτή η εντολή ορίζει όλα τα bit του καταχωρητή reg σε 1. Αλλάζει την κατάσταση των σημαιών S, V, N, Z. Η εντολή μπορεί να λειτουργήσει μόνο με καταχωρητές R16...R31.

ST

Σύνταξη: ST reg, longreg Για το μοντέλο 1200, αυτή η εντολή αποθηκεύει τα περιεχόμενα του καταχωρητή reg στη μνήμη δεδομένων (η διεύθυνση μνήμης περιέχεται στον μεγαλύτερο καταχωρητή), π.χ. προωθεί έμμεσα τα περιεχόμενα του PON reg στη διεύθυνση που είναι αποθηκευμένη στον μεγαλύτερο καταχωρητή.

SUBI

Σύνταξη: SUBI hreg, αριθμός Αφαιρεί τον σταθερό αριθμό από τον υψηλό καταχωρητή του hreg. Το αποτέλεσμα αποθηκεύεται στον ίδιο καταχωρητή. Αλλάζει την κατάσταση των σημαιών H, S, V, N, Z, C. Η εντολή μπορεί να λειτουργήσει μόνο με καταχωρητές R16…R31.

Ρέβιτς Γιού.

Πρακτικός προγραμματισμός μικροελεγκτών Atmel AVR στη γλώσσα
συμβολομεταφράστης - 2η έκδ., αναθ. -

Περιγράφονται οι αρχές λειτουργίας, τα αρχιτεκτονικά χαρακτηριστικά και οι τεχνικές

προγραμματισμός μικροελεγκτών Atmel AVR. Παρέχονται έτοιμες συνταγές
για τον προγραμματισμό των βασικών λειτουργιών του σύγχρονου μικροηλεκτρονικού εξοπλισμού
rature: από την αντίδραση μέχρι το πάτημα ενός κουμπιού ή την κατασκευή μιας δυναμικής οθόνης
σε πολύπλοκα πρωτόκολλα για την εγγραφή δεδομένων σε εξωτερική μνήμη ή δυνατότητες
σύνδεση ρολογιού σε πραγματικό χρόνο. Ιδιαίτερη προσοχή δίνεται στην ανταλλαγή δεδομένων
δίνονται αριθμητικές μικροηλεκτρονικές συσκευές με προσωπικό υπολογιστή
παραδείγματα προγραμμάτων. Το βιβλίο λαμβάνει υπόψη τα χαρακτηριστικά των σύγχρονων μοντέλων AVR και
ταξιδιωτικά μικροκυκλώματα από τα τελευταία χρόνια παραγωγής. Οι εφαρμογές περιέχουν βασικές
παραμέτρους των μικροελεγκτών AVR, λίστα εντολών και κείμενα προγράμματος για αυτούς,
καθώς και μια λίστα όρων και συντμήσεων που χρησιμοποιούνται.

Για φοιτητές, μηχανικούς και ραδιοερασιτέχνες

Ομάδα προετοιμασίας δημοσίευσης:

Αρχισυντάκτης

Ekaterina Kondukova

Αναπληρωτής αρχισυντάκτης

Ιγκόρ Σισίγκιν

Κεφάλι από τους συντάκτες

Γκριγκόρι Ντόμπιν

Συντάκτης

Γιούρι Ρόζκο

Διάταξη υπολογιστή

Όλγα Σεργιένκο

Διορθωτής

Zinaida Dmitrieva

Σχέδιο εξωφύλλου

Έλενα Μπελιάεβα

Κεφάλι παραγωγή

Νικολάι Τβέρσκιχ

Μικροελεγκτές, προέλευση και εφαρμογή τους................................................ ......... 7

Ιστορικό μικροελεγκτών................................................ ................................................................ ................. 8

Ηλεκτρονικά σε ελληνικό στυλ................................................ .......................................................... ............. 10

Γιατί AVR; ................................................ .......................................................... .......................................... 12

ΜΕΡΟΣ Ι. ΓΕΝΙΚΕΣ ΑΡΧΕΣ ΤΗΣ ΣΥΣΚΕΥΗΣ
ΚΑΙ ΛΕΙΤΟΥΡΓΙΑ ΤΗΣ ATMEL AVR ...................................... ......... ................. 17

Κεφάλαιο 1. Επισκόπηση των μικροελεγκτών AVR της Atmel .......................................... ......... 19

Οικογένειες AVR ................................................ .................................................... .......................................... 21

Χαρακτηριστικά πρακτικής χρήσης του AVR MK .......................................... .......................... 23

Σχετικά με την κατανάλωση................................................ ................................................... ......... ................... 23

Μερικά χαρακτηριστικά της χρήσης AVR σε κυκλώματα.......................................... ........ ............. 25

Κεφάλαιο 2. Γενική δομή, οργάνωση μνήμης, χρονομέτρηση, επαναφορά.......... 27

Μνήμη προγράμματος ..................................................... .......................................................... .......................... 27

Μνήμη δεδομένων (RAM, SRAM) .......................................... .................................................... .......................... 29

Μη πτητική μνήμη δεδομένων (EEPROM) .......................................... .......................................... 31

Μέθοδοι ρολογιού................................................ .......................................................... .............. ................. 32

Επαναφορά...................................................... ................................................ .......................................... 34

Κεφάλαιο 3: Εισαγωγή στα περιφερειακά................................................ ........ 37

Θύρες I/O................................................ .......................................................... ................................. 38

Χρονόμετρα-μετρητές...................................................... ................................................................ .......................................... 39

Μετατροπέας αναλογικού σε ψηφιακό.......................................... .......................................................... 41

Σειριακές θύρες................................................ ................................................... ......... .......... 42

UART................................................. ................................................ .......................................... 43

Διεπαφή SPI ..................................................... ................................................... ................................... 46

Διεπαφή TWI (I

Γ) ...................................................... ...................................................... ..... 50

Γενική σειριακή διεπαφή USI ................................................ .......................... 50

Κεφάλαιο 4. Διακοπές και λειτουργίες εξοικονόμησης ενέργειας.......................................... .......... 53

Διακόπτει................................................ .......................................................... .......................................... 53

Τύποι διακοπών................................................ ................................................. ...................... 57

Λειτουργίες εξοικονόμησης ενέργειας................................................ ................................................. ...................... 58

ΜΕΡΟΣ II. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΙΚΡΟΕΛΕΓΚΤΩΝ
ATMEL AVR ..................................................... ................................................... ......... ................ 61

Κεφάλαιο 5. Γενικές αρχές προγραμματισμού MCU της οικογένειας AVR ................................... 63

Συναρμολόγηση ή Γ; ................................................ .......................................................... ........................... 63

Μέθοδοι και εργαλεία προγραμματισμού AVR .............................................. .......................... 67

Επεξεργαστής κώδικα................................................ ................................................... ......... ................................ 67

Σχετικά με το AVR Studio ..................................................... .......................................................... ........................... 68

Διάταξη του συναρμολογητή................................................ .......................................................... ................ ... 70

Προγραμματιστές................................................ .......................................................... .............. ............... 71

Σχετικά με τα hex αρχεία................................................ ...................................................... ................................. 75

Εντολές, οδηγίες και σημειογραφία της μονάδας συναρμολόγησης AVR................................ ........................... 78

Αριθμοί και εκφράσεις ..................................................... .......................................................... ................................ 79

Οδηγίες και λειτουργίες ..................................................... .......................................................... ................................ 80

Γενική δομή του προγράμματος AVR.......................................... .......................................................... ......... 84

Χειρισμός διακοπής................................................ ................................................................ ...................... 85

ΕΠΑΝΑΦΟΡΑ ................................................... .................................................... .......................................... 89

Το απλούστερο πρόγραμμα ..................................................... .................................................... .......................... 90

Καθυστέρηση................................................. ................................................ ........................... 92

Αντιπρόγραμμα ...................................................... .......................................................... .............. 94

Χρήση διακοπών................................................ ...................................................... ...................... .. 96

Καθυστέρηση χρονοδιακόπτη................................................ .......................................................... .............. ............ 97

Πρόγραμμα μετρητή με χρήση διακοπών................................................ ................................ 98

Σχετικά με τα bit διαμόρφωσης................................................ ................................................................ .......................... 101

Κεφάλαιο 6. Σύστημα εντολών AVR ............................................ ................................................... 105

Έλεγχος Οδηγιών μεταφοράς και εγγραφή SREG ...................................................................... 105

εντολές check-pass................................................ ................................................................ ..................... 111

Εντολές λογικών λειτουργιών................................................ .......................................................... ................ 113

Οδηγίες Shift και λειτουργίες bit................................................ .......................................................... 114

Οδηγίες αριθμητικών πράξεων................................................ .......................................... 116

Εντολές μεταφοράς δεδομένων ..................................................... ................................................................ .......................... 118

Εντολές ελέγχου συστήματος...................................................... .......................................................... ................ 122

Εκτέλεση τυπικών διαδικασιών στο assembler................................................ ................................................. 123

Σχετικά με τη στοίβα, τις τοπικές και τις καθολικές μεταβλητές.......................................... .......................................... 125

Κεφάλαιο 7. Αριθμητικές πράξεις................................................. ....................................... 127

Τυπικές αριθμητικές πράξεις ..................................................... ................................................................ ..... 128

Πολλαπλασιασμός πολυψήφιων αριθμών................................................ ................................................................ ...... 129

Διαίρεση πολυψήφιων αριθμών................................................ ................................................................ .............. 131

Πράξεις με κλασματικούς αριθμούς................................................ .......................................... 134

Γεννήτρια τυχαίων αριθμών ..................................................... ................................................ ......... 136

Λειτουργίες με αριθμούς σε μορφή BCD .............................................. .......................................................... ..... 138

Αρνητικοί αριθμοί σε MK................................................ .......................................................... ............ 143

Κεφάλαιο 8. Προγραμματισμός χρονομέτρων................................................ ....... ................. 147

Χρονοδιακόπτες 8 και 16 bit.......................................... ...................................................... .............. .......... 147

Σχηματισμός μιας δεδομένης τιμής συχνότητας................................................ ................................ 149

αντίστροφη μέτρηση................................................ ...................................................... ................................................ 153

Ακριβής διόρθωση χρόνου ..................................................... ................................................................ ..................... 158

Συχνόμετρο και μετρητής περιόδου................................................ .......................................................... ............. 160

Συχνόμετρο ..................................................... ................................................... ......... ...................... 160

Μετρητής περιόδου................................................ .......................................................... .............. ................................ 164

Δυναμικός έλεγχος οθόνης.......................................... ................................................................ ...... 167

Ενδείξεις LED και η σύνδεσή τους .............................................. .......................................... 168

Προγραμματισμός δυναμικής οθόνης................................................ ................. ................. 171

Χρονοδιακόπτες σε λειτουργία PWM ................................................... .......................................................... ............. ............ 174

Κεφάλαιο 9. Χρήση του EEPROM ...................................... ...................................... 179

Για άλλη μια φορά σχετικά με την ασφάλεια των δεδομένων στην EEPROM ...................................... .......................................... 179

Γράψιμο και ανάγνωση EEPROM .............................................. .......................................................... ............. .......... 181

Αποθήκευση σταθερών στο EEPROM .............................................. ...................................................... ..................... 183

Κεφάλαιο 10. Αναλογικός συγκριτής και ADC.......................................... ......... .................... 187

Αναλογικές-ψηφιακές λειτουργίες και τα λάθη τους................................ ......... .......................... 187

Εργασία με αναλογικό συγκριτή................................................ ................................................................ ............. 190

Ενσωμάτωση ADC στον συγκριτή................................................ ...................................... 193

Αρχή λειτουργίας και τύποι υπολογισμού.............................................. ....................................... 194

Ενσωμάτωση προγράμματος ADC................................................ ................................................................ ...... 198

Ενσωματωμένο ADC................................................ .......................................................... ........................... 201

Παράδειγμα χρήσης ADC................................................ ...................................................... ...................... 204

Πρόγραμμα................................................. ................................................ .......................... 206

Κεφάλαιο 11. Προγραμματισμός SPI ............................................ ....................................... 215

Βασικές λειτουργίες μέσω SPI .............................................. ................................................................ .......................... ... 215

Επιλογή υλικού ................................................... ................................................... ......... ......... 216

Επιλογή λογισμικού ...................................................... ................................................... ......... ...... 218

Σχετικά με τους τύπους μη πτητικής μνήμης................................................ .......................................... 219

Εγγραφή και ανάγνωση μνήμης flash μέσω SPI .......................................... ...................................................... .. 221

Πρόγραμμα ανταλλαγής με μνήμη 45DB011B μέσω SPI .......................................... .... ............... 224

Γράψιμο και ανάγνωση καρτών flash.............................................. .......................................................... ............. ............ 225

Σύνδεση καρτών MMS ..................................................... .................................................... .......... ... 225

Υποβολή εντολών και αρχικοποίηση MMC................................................ ......... .......................... 228

Εγγραφή και ανάγνωση MMS................................................ .......................................................... ........... ......... 232

Κεφάλαιο 12. Διεπαφή TWI (I

Γ) και η πρακτική του χρήση................ 237

Βασικό Πρωτόκολλο Ι

Γ ...................................................... ...................................................... ......... 237

Εξομοίωση λογισμικού του Πρωτοκόλλου Ι

Γ ...................................................... ........................ 240

Εγγραφή δεδομένων σε εξωτερική μη πτητική μνήμη.......................................... .......... .......... 241

Ανταλλαγή τρόπων λειτουργίας με μνήμη AT24 ...................................... .......................................................... 241

Πρόγραμμα................................................. ................................................ .......................... 243

Ρολόι με διεπαφή Ι

Γ ...................................................... ...................................................... .... 247

Δεδομένα καταγραφής................................................ .......................................................... .............. ................... 255

Ανάγνωση δεδομένων................................................ .......................................................... .............. ................... 259

Κεφάλαιο 13. Προγραμματισμός UART/USART .......................................... .... ............. 261

Αρχικοποίηση UART ................................................ ................................................... ......... ................. 262

Διαβίβαση και λήψη δεδομένων ..................................................... .......................................................... ........... .......... 263

Παράδειγμα ρύθμισης του ρολογιού DS1307 χρησιμοποιώντας UART .......................................... ..... ................... 266

Τεχνικές προστασίας από αστοχίες επικοινωνίας................................................ ........ .......................... 271

Έλεγχος ισοτιμίας................................................ ................................................................ ................................... 271

Πώς να οργανώσετε μια σωστή ανταλλαγή................................................ ................................................................. ........ 273

Πρόσθετες λειτουργίες USART ..................................................... ...................................... 274

Υλοποίηση διεπαφών RS-232 και RS-485 .......................................... .......................................................... ..... 276

Μετατροπείς στάθμης για RS-232 ............................................ ........ ................................... 280

RS-485 ..................................................... .......................................................... .......................................... 283

Κεφάλαιο 14. Λειτουργίες εξοικονόμησης ενέργειας και χρονοδιακόπτης παρακολούθησης................................... 285

Προγραμματισμός της λειτουργίας εξοικονόμησης ενέργειας...................................... ................................................. 286

Παράδειγμα συσκευής που τροφοδοτείται από μπαταρίες.......................................... ................................................................ ........ 287

Ολοκλήρωση του προγράμματος ................................................ .......................................................... ................................ 289

Χρήση του χρονοδιακόπτη παρακολούθησης................................................ ................................................................ ........... 293

ΕΦΑΡΜΟΓΕΣ ..................................................... .......................................................... ............. ....... 299

Παράρτημα 1. Βασικές παράμετροι μικροελεγκτών Atmel AVR .......... 301

Παράρτημα 2. Εντολές Atmel AVR ............................................ ........................... 309

Αριθμητικές και λογικές εντολές................................................ .......................................... 310

Οδηγίες λειτουργίας bit..................................................... ................................................................ .......................... 311

Εντολές σύγκρισης................................................ ................................................... ......... ................. 312

Έλεγχος εντολών μεταφοράς...................................................... ...................................................... .............. .313

Εντολές για άνευ όρων άλμα και κλήση υπορουτίνων.......................................... .......... ... 313

Οδηγίες ελέγχου-παράλειψης και οδηγίες άλματος υπό όρους.......................................... ................. 314

Εντολές μεταφοράς δεδομένων ..................................................... ................................................................ .......................................... 315

Εντολές ελέγχου συστήματος...................................................... .......................................................... ................ 316

Παράρτημα 3. Κείμενα προγράμματος.......................................... ........................... 317

Πρόγραμμα επίδειξης επικοινωνίας Flash 45DB011B
μέσω διασύνδεσης SPI................................................ ...................................................... ................................. 317

Διαδικασίες ανταλλαγής διεπαφής I

Γ ...................................................... ........................ 321

Παράρτημα 4. Ανταλλαγή δεδομένων με προσωπικό υπολογιστή
και προγράμματα εντοπισμού σφαλμάτων μέσω UART ...................................... ...................................... 329

Εργασία με θύρα COM στους Δελφούς .............................................. ................................................... ......... 329

Εγκατάσταση γραμμής RTS σε DOS και Windows .......................................... .......................................... 335

Πρόγραμμα COM2000 ..................................................... ................................................... ......... ................. 337

Προγράμματα εντοπισμού σφαλμάτων με χρήση εξομοιωτή τερματικού.......................................... ........ ................. 339

Παράρτημα 5. Λεξικό συχνά χρησιμοποιούμενων συντομογραφιών και όρων....... 341

Βιβλιογραφία................................................. ................................................ .......... 347

Ευρετήριο θεμάτων................................................ ................................................ 349

ΕΙΣΑΓΩΓΗ

μικροελεγκτές,
προέλευση και εφαρμογή τους

Λένε ότι στη δεκαετία του 1960, παρακολουθώντας τους συμμετέχοντες στις φοιτητικές διαδηλώσεις
διαμαρτυρία, ο Γκόρντον Μουρ παρατήρησε: «Είμαστε οι αληθινοί επαναστάτες». Φοιτητές
ένας υπάλληλος ενός από τους εφευρέτες του τρανζίστορ, του W. Shockley, μεταξύ άλλων,
κρυφός ιδρυτής της περίφημης Silicon Valley, με τη σειρά του ιδρύθηκε
τηλ και επικεφαλής εταιρειών που προορίζονταν να παίξουν πρωταγωνιστικό ρόλο στην ανάπτυξη
μικροηλεκτρονική, ο Μουρ ήξερε τι μιλούσε. Παραδόξως, είναι
οι εφευρέσεις του Μουρ και των υπαλλήλων του έμελλε να γίνουν η βάση αυτού του κόσμου
στην οποία συγκεντρώθηκαν στη συνέχεια οι δραστηριότητες της «επαναστατικής νεολαίας».
δεκαετία του 1960 Σύγχρονοι χάκερ (όχι χούλιγκαν υπολογιστών από εφημερίδες, αλλά πραγματικοί)
επιστήμονες υπολογιστών παθιασμένοι με τη δουλειά τους) - άμεσοι ιδεολογικοί κληρονόμοι
Μαθητές της Σορβόννης και Αμερικανοί διαδηλωτές, που άλλαξαν το σύνθημα «Make
αγάπη όχι πόλεμος"

στο "Μην γράφετε συνθήματα - γράψτε κώδικα." Δεν είναι τυχαίο ότι πολλοί διάσημοι

εξέχουσες προσωπικότητες στον κλάδο των ηλεκτρονικών υπολογιστών, συγγραφείς εφευρέσεων, ιδρυτές
που έχουν διαμορφώσει το πρόσωπο του σύγχρονου κόσμου - προέρχονται από ένα περιβάλλον κοντά σε αυτό ακριβώς το «κουλούρι-
μαραζωτά νιάτα».
Η ιστορία μας για τους μικροελεγκτές ξεκίνησε με το γεγονός ότι το 1957 ο Gordon Moore συν-
μαζί με τον Robert Noyce, ο οποίος αργότερα έγινε ένας από τους εφευρέτες του μικροφώνου
roschemy, και έξι ακόμη υπάλληλοι της Shockley Semiconductor Labs (ο Shockley τηλεφώνησε
τους «προδοτικούς οκτώ» τους), ίδρυσαν την εταιρεία Fairchild Semiconductor. Σε αυτήν εμείς
οφείλονται όχι μόνο στην ανάπτυξη της αγοράς ημιαγωγών και στην εισαγωγή μικροκυκλωμάτων
στην πρακτική της μηχανικής, αλλά και επειδή έχει γίνει ένα είδος σφυρηλάτησης προσωπικού και
γεννήτρια ιδεών για μια νέα βιομηχανία.
Εδώ είναι μερικά μόνο από τα ιστορικά γεγονότα. Ο ίδιος ο Μουρ με τον Νόις στα τέλη της δεκαετίας του 1960
δημιούργησε την εταιρεία Integrated Electronics, η οποία με τη συντομογραφία Intel
γνωστό πλέον σε κάθε μαθητή. Jeremy Sanders, ιδρυτής ενός άλλου διάσημου
μεγαλύτερη εταιρεία - AMD, έφυγε επίσης από την Fairchild, όπου διακρίθηκε ανοίγοντας μια συν-
προσωρινό οικονομικό μοντέλο για την παραγωγή και τις πωλήσεις ημιαγωγών
εξαρτήματα, στα οποία το κόστος του προϊόντος τείνει στο μηδέν καθώς αυξάνεται

«Κάνε έρωτα, όχι πόλεμο» ήταν το σύνθημα των χίπις της δεκαετίας του 1960 που διαμαρτύρονταν για τον πόλεμο του Βιετνάμ.

Εισαγωγή

αλλάξτε τον όγκο της παρτίδας. Ο Charlie Spork, ένας από τους βασικούς μάνατζερ της Fairchild, το 1967
έγινε διευθυντής της National Semiconductor, της οποίας ηγήθηκε αργότερα για ένα τρίμηνο
αιώνας. Οι μισοί από τους «προδοτικούς οκτώ» - Gene Hoerney, Evgeniy Kleiner,
Ο Jay Last και ο Sheldon Roberts - ίδρυσαν την Amelco το 1961, από την οποία
στη συνέχεια μεγάλωσαν τα γνωστά πλέον Intersil, Maxim και Ixys. Υπάλληλος
Οφείλουμε στην Fairchild στον Robert Widlar την εφεύρεση των λειτουργικών ενισχυτών -
ποικιλίες μικροκυκλωμάτων, και μέχρι σήμερα δεύτερο μόνο σε δημοτικότητα
μικροεπεξεργαστές. Επιπλέον, η ιστορία του Fairchild συνδέεται με την εμφάνιση του διάσημου
νέο μοντέλο χρηματοδότησης venture (δηλαδή «επικίνδυνο»), το οποίο έπαιξε καθοριστικό ρόλο
σημαντικό ρόλο στην ανάπτυξη όλων των βιομηχανιών που σχετίζονται με τα ηλεκτρονικά, τους υπολογιστές και
τηλεπικοινωνιών. Δεν είναι καθόλου τυχαίο που ο Fairchild αποκαλείται συχνά «η μητέρα του ηλεκτρισμού».
tronics».

Υπόβαθρο μικροελεγκτών

Από όλον αυτόν τον τυφώνα γεγονότων, αυτό που είναι σημαντικό για την αφήγησή μας είναι ότι μεταξύ
άλλες καινοτομίες, οι υπάλληλοι της Fairchild ήταν οι πρώτοι που προώθησαν τους ημιαγωγούς
σφυρηλατημένη μνήμη. Τώρα, στην εποχή των CD και DVD, των σκληρών δίσκων και των καρτών flash, εμείς
Είναι δύσκολο να φανταστεί κανείς ότι στις αρχές της δεκαετίας του 1960, τα προγράμματα υπολογιστών
αποθηκεύονταν κυρίως σε φύλλα από χαρτόνι (τρυπημένες κάρτες), σκραπ κατασκευαστές
αν το κεφάλι σας είναι πάνω από ακριβές μονάδες RAM σε γραμμές καθυστέρησης υδραργύρου, παλμογράφος
γραφικούς σωλήνες και δακτυλίους φερρίτη, όπου κάθε κομμάτι «ράβονταν» με το χέρι
όχι. Η πιο συμπαγής ηλεκτρονική συσκευή εκείνων των χρόνων για την αποθήκευση δεδομένων
Οι μαγνητικοί δίσκοι που ονομάζονταν RAMAC 305 με χωρητικότητα 5 MB είχαν το μέγεθος
με βιομηχανικό ψυγείο και νοικιαζόταν για 5 χιλιάδες δολάρια το μήνα.
Η μόνη «ακτίνα φωτός» στο σκοτεινό βασίλειο αυτών των τεράτων ήταν η εφεύρεση
Υπάλληλος της αμερικανικής Bosch Arma Corporation Yen Chow, ο οποίος το 1956 έλαβε
δίπλωμα ευρεσιτεχνίας για μια συσκευή που τώρα είναι γνωστή ως "εφάπαξ προγραμματιζόμενη ROM"
(OTP ROM

). Σε αυτό το δίπλωμα ευρεσιτεχνίας, παρεμπιπτόντως, ο όρος χρησιμοποιήθηκε για πρώτη φορά

"κάψιμο" - η μικρομονάδα αποτελούνταν από μια μήτρα με εύτηκτους βραχυκυκλωτήρες, οι οποίοι
τα οποία κάηκαν κατά τον προγραμματισμό με την εφαρμογή υψηλής τάσης σε αυτά.
Οι OTP ROM για μεγάλο χρονικό διάστημα παρέμειναν οι μόνες συσκευές για συμπαγή
αποθήκευση δεδομένων και δεν έχασαν το νόημά τους μέχρι πολύ πρόσφατα -
τουλάχιστον το ένα τέταρτο των μικροελεγκτών στον κόσμο, ειδικά εκείνοι που είναι απλούστεροι, μέχρι
εξακολουθεί να παράγεται με ένα τέτοιο προγραμματιζόμενο ενσωματωμένο πρόγραμμα μίας χρήσης
ζαρωμένο, λόγω της εξαιρετικής φτηνότητάς του. Και μόνο τα τελευταία χρόνια το «καμένο» πά-
η μνήμη άρχισε να αντικαθίσταται σταδιακά από πιο βολική μνήμη flash, όταν η τελευταία
έχει πέσει τόσο πολύ στην τιμή που δεν έχει σχεδόν κανένα νόημα να χρησιμοποιήσεις OTP ROM.
Ας πάμε όμως πίσω στη δεκαετία του 1960. Η συμπαγής μνήμη ημιαγωγών χρειαζόταν απολύτως
όλοι το λατρεύουν - από τον στρατό και τη NASA μέχρι τους κατασκευαστές οικιακών συσκευών. Αρχικά
Ο Fairchild εισήγαγε αυτό που σήμερα ονομάζεται DRAM, ιδιαίτερα σε τέτοια μικρο-
Ρωσικά κυκλώματα (32.768 μάρκες με χωρητικότητα 256 bit το καθένα) δημιουργήθηκε μια μνήμη του πανό

Για μια επεξήγηση ορισμένων συντομογραφιών, βλ Παράρτημα 5.

fiament υπερυπολογιστής ILLIAC-IV, ανταγωνιστής του εγχώριου BESM-6. Έχοντας αισθανθεί
πώς φυσάει ο άνεμος, το 1968 ο Moore και ο Noyce εγκατέλειψαν την Fairchild και ίδρυσαν την Intel, καθώς
εξειδικευμένη εταιρεία για την ανάπτυξη και παραγωγή μνήμης. Δεν έχουν ακόμη
ήξερε ότι το πιο δημοφιλές προϊόν της Intel δεν θα ήταν καθόλου η μνήμη, αλλά μια μικρή
συσκευή (Εικ. Β1), που ονομάζεται μικροεπεξεργαστής, η ανάπτυξη του οποίου ήταν πρώτη
αρχικά επινοήθηκε ως ένα βοηθητικό στάδιο στο σχεδιασμό ενός συμβατικού λογισμού
Τορά.

Ρύζι. ΣΕ 1.Μικροεπεξεργαστής

ΚΑΙ

Η ΕΦΕΥΡΕΣΗ ΤΟΥ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΗ

Το 1969, αρκετά άτομα από την Busicom, μια νεαρή ιαπωνική εταιρεία, εμφανίστηκαν στην Intel.
ερευνητικό ινστιτούτο που ασχολείται με την παραγωγή αριθμομηχανών. Χρειάζονταν ένα σετ 12
Τα σχέδια gral ως το κύριο στοιχείο της νέας φθηνής επιτραπέζιας αριθμομηχανής -
Τορά. Το έργο αναπτύχθηκε από τον Masatoshi Shima, ο οποίος εκπροσωπούσε την ιαπωνική εταιρεία
Ρον. Ted Hoff (Marcian E. Ted Hoff, γεν. 1937), επικεφαλής του τμήματος που εμπλέκεται σε
αναπτύσσοντας εφαρμογές για προϊόντα Intel, έχοντας εξοικειωθεί με το έργο, το συνειδητοποίησα
αντί να δημιουργήσετε μια αριθμομηχανή με κάποιες δυνατότητες προγραμματισμού
προγραμματισμού, μπορείτε να κάνετε το αντίθετο, ένας υπολογιστής προγραμματισμένος να λειτουργεί ως
αριθμομηχανή. Αναπτύσσοντας την ιδέα, το φθινόπωρο του 1969, ο Hoff αποφάσισε να ασχοληθεί με την τέχνη
αρχιτεκτονική του μελλοντικού μικροεπεξεργαστή. Την άνοιξη, ο Χόφα ήρθε στο τμήμα (όλοι από το ίδιο
Fairchild, ήδη γνωστός σε εμάς), νέος υπάλληλος Frederico Faggin, ο οποίος
ry και βρήκε ένα όνομα για ολόκληρο το σύστημα: "family 4000". Η οικογένεια αποτελούνταν
από τέσσερα τσιπ 16 ακίδων: 4001 περιείχαν 2 KB ROM. 4002 - RAM με
4-

θύρα εξόδου bit για λήψη προγραμμάτων. Το 4003 ήταν 10-bit

Επέκταση I/O με σειριακή είσοδο και παράλληλη έξοδο
σπίτι για επικοινωνία με το πληκτρολόγιο, την ένδειξη και άλλες εξωτερικές συσκευές. ωστόσο-
Το 4004 ήταν μια CPU 4-bit (κεντρική μονάδα επεξεργασίας). Αυτή είναι η CPU
περιείχε 2300 τρανζίστορ και λειτουργούσε σε συχνότητα ρολογιού 108 kHz. 15 Νοεμβρίου
1971

Ανακοινώθηκε η δημιουργία του πρώτου μικροεπεξεργαστή. Η Busicom απέκτησε

ανάπτυξη, πληρώνοντας 60.000 $ στην Intel, αλλά η Intel αποφάσισε να επιστρέψει αυτά τα χρήματα στην Busicom,
να ανακτήσει τα δικαιώματα του μικροεπεξεργαστή.
Το i4004 είχε επεξεργαστική ισχύ συγκρίσιμη με τον πρώτο ηλεκτρονικό υπολογιστή.
Yuter ENIAC (1946). Το 4004 βρήκε την πρώτη του πρακτική εφαρμογή στο σύστημα
έλεγχος φωτεινών σηματοδοτών και αναλυτών αίματος. Αυτή η μικροδιεργασία
sor χρησιμοποιήθηκε στον εποχούμενο εξοπλισμό του διαπλανητικού καθετήρα Pioneer-10, το οποίο
Το ry σημείωσε ρεκόρ μακροζωίας μεταξύ παρόμοιων συσκευών: κυκλοφόρησε το
1972

, και μέχρι τον Σεπτέμβριο του 2001, το Pioneer-10 είχε απομακρυνθεί 11,78 δισεκατομμύρια χιλιόμετρα από τη Γη και ήταν ακόμα

λειτούργησε και, πολύ πιθανό, εξακολουθεί να λειτουργεί μέχρι σήμερα, αν και τον Φεβρουάριο του 2003 η NASA επίσημα
κοινωνικά τον αποχαιρέτησε.

Εισαγωγή

Έτσι ξεκίνησε η νικηφόρα πορεία των μικροεπεξεργαστών, που αργότερα διασπάστηκαν
σε διάφορες ποικιλίες, που ανήκουν κυρίως σε δύο κύριες ομάδες:
μικροεπεξεργαστές (MP) και μικροελεγκτές (MC). Ο πρώτος
προορίζονται για χρήση ως μέρος συστημάτων υπολογιστών, τα πιο κοινά
οι σημαντικότεροι από τους οποίους είναι οι προσωπικοί υπολογιστές (PC), επομένως εξακολουθούν να χρησιμοποιούνται συχνά
ονομάζονται «επεξεργαστές Η/Υ» (αν και αυτή η ομάδα συνήθως περιλαμβάνει επίσης κατασκευασμένους
πρόγραμμα οδήγησης MP για διακομιστές και μερικούς άλλους). Το MK διαφέρει από το MP σε αυτό
ότι έχουν σχεδιαστεί κυρίως για τον έλεγχο διαφόρων συστημάτων,
ως εκ τούτου, με έναν σχετικά ασθενέστερο υπολογιστικό πυρήνα, περιλαμβάνουν
υπάρχουν πολλοί επιπλέον κόμβοι. Το γεγονός ότι για έναν συμβατικό βουλευτή υποτίθεται ότι είναι
εφεδρικό σε εξωτερικά chipset ή πρόσθετες μονάδες (μνήμη, θύρες εισόδου)
έξοδος, χρονόμετρα, ελεγκτές διακοπής, κόμβοι για επεξεργασία αναλογικού σήματος
ψάρεμα κ.λπ.), στο ΜΚ βρίσκεται απευθείας στο τσιπ, γι' αυτό κάποτε ήταν της μόδας
ονομάστε το "μικροϋπολογιστή".
Πράγματι, στην απλούστερη περίπτωση, για να οικοδομήσουμε ένα πλήρως λειτουργικό
για υπολογιστή, ένα μόνο τσιπ MK με συνδεδεμένο
συσκευές εισόδου/εξόδου που συνδέονται σε αυτό. Μοντέρνα μοντέλα από συνηθισμένα μονοκρυστάλλινα
χάλυβα MK υπερβαίνουν τις υπολογιστικές δυνατότητες του IBM PC AT στο 286ο προ-
επεξεργαστή του δεύτερου μισού της δεκαετίας του 1980. Υπάρχουν περιοχές όπου τα σύνορα μεταξύ MP και
Το MK είναι δύσκολο να πραγματοποιηθεί: τέτοιοι, για παράδειγμα, είναι επεξεργαστές για κινητές συσκευές, από
τηλέφωνα και υπολογιστές τσέπης σε ψηφιακές φωτογραφικές μηχανές στις οποίες ο επεξεργαστής
ο κόμβος πρέπει να έχει προηγμένες υπολογιστικές συναρτήσεις και να διαχειρίζεται πολλαπλές
πολλά εξωτερικά εξαρτήματα.

Ηλεκτρονικά ελληνικού τύπου

Το 1962 γεννήθηκε η οικογένεια Περλέγκου, Έλληνες μετανάστες
κατοίκους της πόλης της Τρίπολης. Οι γονείς ασχολήθηκαν με την αμπελουργία, όπως στην πατρίδα τους, και οι γιοι
Οι Novya, George και Gust Perlegos, επέλεξαν τη μοδάτη ειδικότητα της μηχανικής
ηλεκτρονικός μηχανικός: και οι δύο αποφοίτησαν πρώτα από το Πανεπιστήμιο του Σαν Χοσέ και μετά από το Στάνφορντ
πανεπιστήμιο. Το 1974, σε ηλικία 24 ετών, ο μικρότερος από τα αδέρφια, ο Γιώργος Περλέγκος,
Άρχισε να εργάζεται στην Intel, όπου βρέθηκε σε έναν από τους πιο προηγμένους τομείς:
ανάπτυξη ηλεκτρικά διαγραφόμενης μνήμης για την αντικατάσταση του burn-in OTP ROM.
Ακόμη και πριν από τον Περλέγκο, σχεδόν ταυτόχρονα με την εφεύρεση του μικροεπεξεργαστή το 1971,
Ο υπάλληλος της Intel, Don Frohman, εφηύρε το αιωρούμενο κλείστρο και δημιούργησε το πρώτο UV
EPROM με δυνατότητα διαγραφής 2K (256 8).

Ζ

ΣΗΜΕΙΩΣΕΙΣ ΣΤΟ ΠΕΡΙΘΩΡΙΟ

Στη «συνηθισμένη» ζωή, χρησιμοποιήστε συντομογραφίες για μονάδες πληροφοριών που αποτελούνται από ένα γράμμα
Το "K" (όπως και το "M") δεν συνιστάται: μερικές φορές είναι πολύ δύσκολο να καταλάβουμε αν είναι
περίπου kilobits, kilobyte, "kilowords" ή γενικά kilobits ανά δευτερόλεπτο. παρ 'όλα αυτά
Τέτοιες συντομογραφίες βρίσκονται συχνά, συμπεριλαμβανομένης της τεχνικής τεκμηρίωσης, και θα έρθουμε
Μερικές φορές προσπαθώ να ακολουθήσω αυτό το παράδειγμα. Για λόγους βεβαιότητας, δεχόμαστε τους ακόλουθους κανόνες:
la: ένα κεφαλαίο γράμμα "K" σημαίνει δυαδικά kilobits (1024 bit), "M" σημαίνει δυαδικά kilobits
δυαδικά megabit (1024 kbits). Αν και στη βιβλιογραφία είναι συχνά αποδεκτό ότι τα kilobytes είναι
συντομογραφία ως "KB" και kilobits ως "KB", θα προσπαθήσουμε να αποφύγουμε αυτή τη σύγχυση, και σε

Μικροελεγκτές, προέλευση και εφαρμογή τους

Σε όλες τις άλλες περιπτώσεις, γράψτε πλήρως: kbyte και MB, kbit/s, MB/s. Εκτός-
θα είναι ο προσδιορισμός της ποσότητας της μνήμης των προγραμμάτων μικροελεγκτή εάν παράγεται
μετριέται σε λέξεις δύο byte: για παράδειγμα, οι λέξεις 4K θα σημαίνουν 4096 κελιά -
λέξεις (8 kbyte).

Ο Γιώργος Περλέγκος συμμετείχε ενεργά σε αυτή τη διαδικασία, πρώτα με τη συμμετοχή του, και
στη συνέχεια, και υπό την άμεση ηγεσία του, δημιουργήθηκαν δύο τεχνολογίες,
που έχουν γίνει σημείο ανάπτυξης για ολόκληρη τη βιομηχανία μνήμης flash - ένα από τα
τους βασικούς πυλώνες της σύγχρονης «ψηφιακής επανάστασης». Εφευρέθηκε για πρώτη φορά
chip 2716 - 16K (2048 8) EPROM με μία τάση τροφοδοσίας +5 V και μετά
2816 - η πρώτη EEPROM, ηλεκτρικά διαγραφόμενη ROM, η οποία έγινε το πρωτότυπο
μνήμη flash.
Το 1981, ο Περλέγκος έφυγε από την Intel και με αρκετούς υπαλλήλους (συμπεριλαμβανομένων
ήταν ο Gordon Campbell, ο μελλοντικός δημιουργός μιας άλλης διάσημης εταιρείας Chips &
Technologies) δημιουργεί την εταιρεία Seeq. Ήταν μια εποχή παρακμής στην ηλεκτρονική βιομηχανία.
εκβιομηχάνιση και τρία χρόνια αργότερα η εταιρεία αναγκάστηκε να αποχωρήσει λόγω απαίτησης
οι επενδυτές μου. Χωρίς να τους εμπιστεύονται πια, ο George και ο αδερφός του Gust και αρκετοί άλλοι
Το 1984, οι υπάλληλοι του Seeq δημιούργησαν μια εταιρεία με τα προσωπικά τους κεφάλαια,
του οποίου το πλήρες όνομα μοιάζει με Advanced Technology Memory and Logic ή
συντομογραφία ως Atmel.
Αρχικά, τα προϊόντα της Atmel ήταν μη πτητικά τσιπ μνήμης όλων των τύπων.
νέα χαρακτηριστικά - όπως OTP EPROM και EEPROM με σειριακή και παράλληλη
πρόσβαση και Flash. Το 1985, η Atmel κυκλοφόρησε την πρώτη οικιακή EEPROM στον κόσμο.
η σημερινή αναδυόμενη τεχνολογία CMOS και το 1989 η πρώτη τροφοδοτούμενη μνήμη flash
από μία τάση +5 V. Στα τέλη της δεκαετίας του 1980, η Intel ξεκίνησε να τιμωρεί ορισμένες εταιρείες
Κατασκευαστικές εταιρείες EPROM, συμπεριλαμβανομένης της Atmel, για φερόμενη παραβίαση διπλωμάτων ευρεσιτεχνίας,
αλλά τελικά κατέστη δυνατή η συμφωνία για ανταλλαγή αδειών. Και στο τέλος-
Στο τέλος, η Atmel έλαβε άδεια παραγωγής κλασικών μικροελεγκτών.
Το ler 8051, το οποίο η Intel απομακρυνόταν ήδη σταδιακά από την υποστήριξη εκείνη την εποχή, επικεντρώθηκε
ακονίζοντας τους επεξεργαστές PC.

Π

ΛΕΠΤΟΜΕΡΙΕΣ

Ας θυμηθούμε ότι η EEPROM διαφέρει από τη μνήμη flash στο ότι η πρώτη επιτρέπει
ξεχωριστή πρόσβαση σε οποιοδήποτε αυθαίρετο κελί και το δεύτερο - μόνο σε ολόκληρα μπλοκ. Με-
αυτό το EEPROM είναι μικρότερο σε όγκο (ο τυπικός όγκος εξειδικευμένων μικρο-
Κυκλώματα EEPROM - από μονάδες kilobit σε μονάδες megabit) και πιο ακριβά, επί του παρόντος
χρησιμοποιείται κυρίως για αποθήκευση δεδομένων, συμπεριλαμβανομένων των μικροελεγκτών
Λέροφ. Η μνήμη flash είναι απλούστερη και φθηνότερη και προσφέρει επίσης σημαντικό κέρδος στην ταχύτητα.
ανάπτυξη με μεγάλο όγκο πληροφοριών, ειδικά κατά τη διάρκεια ροής ανάγνωσης/γραφής,
τυπικό για συσκευές πολυμέσων (όπως ψηφιακές φωτογραφικές μηχανές ή συσκευές αναπαραγωγής MP3). Περιλαμβάνεται
Η μνήμη flash των μικροελεγκτών χρησιμοποιείται για την αποθήκευση προγραμμάτων. Μερικές λεπτομέρειες
Για περισσότερες πληροφορίες σχετικά με τους διαφορετικούς τύπους μνήμης και τη λειτουργία τους, βλ Κεφάλαιο 11.

Έτσι η Atmel βρέθηκε «παρασυρμένη» στον αριθμό των κατασκευαστών μικροελεγκτών, στους οποίους
Το ρούμι βρέθηκε πολύ γρήγορα στις πρώτες θέσεις: η παραγωγή ξεκίνησε το 1993
το πρώτο MCU AT89C51 της βιομηχανίας με ενσωματωμένη μνήμη προγράμματος flash. Αυτό σημαίνει
ξεκίνησε μια επανάσταση σε όλη τη μηχανική πρακτική, επειδή η υπάρχουσα
Προηγουμένως, τα MK είχαν είτε μια εφάπαξ προγραμματιζόμενη μνήμη OTP είτε

Εισαγωγή

Πλένεται με υπεριώδη ακτινοβολία, το οποίο είναι πολύ πιο ακριβό στην παραγωγή και η εργασία με αυτό οδηγεί σε
οδηγεί σε μεγάλη απώλεια χρόνου προγραμματιστή. Αριθμός κύκλων επανεγγραφής για την υπεριώδη ακτινοβολία
Το PROM δεν υπερβαίνει τις αρκετές δεκάδες και το άμεσο φως της ημέρας πέφτει
ένας τέτοιος κρύσταλλος μπορεί να οδηγήσει σε διαγραφή πληροφοριών. Ως εκ τούτου, ακόμη και μικρό
Οι συσκευές ry έπρεπε να κατασκευάζονται κυρίως με χρήση
Τρώμε OTP ROM, το οποίο είναι πολύ πιο ριψοκίνδυνο: αλλαγή έστω και στο παραμικρό
σφάλματα στο εγγεγραμμένο πρόγραμμα δεν ήταν πλέον δυνατά. Η εμφάνιση της μνήμης flash από
άλλαξε ολόκληρο το «τοπίο» σε αυτόν τον τομέα: ήταν αποτέλεσμα της εισαγωγής του ότι ο χάλυβας
πιθανά πράγματα όπως το λογισμικό που ενημερώνει το BIOS του υπολογιστή ή "εκ νέου
επίλυσης» προγραμμάτων ελέγχου καταναλωτικών ηλεκτρονικών συσκευών.
Το 1995, δύο φοιτητές από το Νορβηγικό Πανεπιστήμιο Επιστήμης και Τεχνολογίας στο Tron-
Οι Heime, Alf Bogen και Vegard Wollen, σκέφτηκαν την ιδέα ενός πυρήνα RISC 8-bit, ο οποίος
που προτάθηκε στη διοίκηση της Atmel. Τα ονόματα των προγραμματιστών περιλαμβάνονται στο όνομα της τέχνης.
Αρχιτεκτονικές AVR: Alf + Vergard + RISC. Μου άρεσε τόσο πολύ η ιδέα που το 1996
Το ερευνητικό κέντρο Atmel ιδρύθηκε στο Τρόντχαϊμ και ήδη στο τέλος του ίδιου
Ο πρώτος πειραματικός μικροελεγκτής της νέας σειράς AVR ονομάζεται
AT90S1200. Το δεύτερο εξάμηνο του 1997, η Atmel Corporation ξεκίνησε τη σειρά
παραγωγή της οικογένειας AVR.

Γιατί AVR;

Οι ελεγκτές AVR "από τη γέννηση" έχουν δύο χαρακτηριστικά που τους ξεχωρίζουν
οικογένεια από την υπόλοιπη ΜΚ. Πρώτον, το σύνολο εντολών και η αρχιτεκτονική του πυρήνα του AVR
αναπτύχθηκαν από κοινού με μια εταιρεία που αναπτύσσει μεταγλωττιστές για προ-γλώσσες
Προγραμματισμός υψηλού επιπέδου Συστήματα IAR. Ως αποτέλεσμα, έγινε δυνατό
γράψτε προγράμματα AVR σε C χωρίς μεγάλη απώλεια απόδοσης
σε σύγκριση με προγράμματα γραμμένα σε γλώσσα assembly. Περισσότερες λεπτομέρειες σχετικά με αυτό
θα το συζητήσουμε κεφάλαιο 5.
Δεύτερον, ένα από τα σημαντικά πλεονεκτήματα του AVR ήταν η χρήση του μεταφορέα
ra. Ως αποτέλεσμα, δεν υπάρχει η έννοια του κύκλου μηχανής για τα AVR: τα περισσότερα
οι εντολές εκτελούνται σε έναν κύκλο ρολογιού. Για σύγκριση, σημειώνουμε ότι όσοι χρησιμοποιούν
Οι MCU της οικογένειας PIC είναι πολύ δημοφιλείς, εκτελούν μια εντολή σε 4 κύκλους ρολογιού και την κλάση
sical 8051 - γενικά σε 12 κύκλους (αν και υπάρχουν και σύγχρονα μοντέλα Χ 51 με μα-
κύκλος λεωφορείου σε έναν κύκλο).
Είναι αλήθεια ότι την ίδια στιγμή έπρεπε να θυσιάσουμε λίγο την απλότητα του συστήματος εντολών,
ιδιαίτερα αισθητή σε σύγκριση με Χ 51, όπου, για παράδειγμα, τυχόν εργασίες προώθησης
Τα δεδομένα μέσα στον ελεγκτή, ανεξάρτητα από τη μέθοδο διευθυνσιοδότησης, εκτελούνται με τον ίδιο τρόπο
Εθνική ομάδα

σε διάφορες παραλλαγές, ενώ σε AVR σχεδόν για

Κάθε μέθοδος έχει τη δική της εντολή, και μερικές φορές με περιορισμένο εύρος δράσης.
viya. Υπάρχουν κάποιες δυσκολίες στον τομέα των λειτουργιών με bits. Ωστόσο, αυτό δεν είναι
οδηγεί σε αισθητές δυσκολίες κατά την εκμάθηση AVR assembler: αντίθετα, κείμενα
Τα προγράμματα είναι πιο σύντομα και θυμίζουν περισσότερο πρόγραμμα σε γλώσσα υψηλής ποιότητας
επίπεδο. Θα πρέπει επίσης να ληφθεί υπόψη ότι από το σύνολο των ομάδων από 90 έως 130, ανάλογα
Ανάλογα με το μοντέλο, μόνο 50–60 είναι μοναδικά, τα υπόλοιπα είναι εναλλάξιμα.

Μικροελεγκτές, προέλευση και εφαρμογή τους

Και τέλος, αυτό το μειονέκτημα εξαλείφεται εντελώς κατά τη χρήση της γλώσσας C,
στην πραγματικότητα εξισώνοντας διαφορετικές αρχιτεκτονικές όσον αφορά την
προγραμματισμός
Ένα τεράστιο πλεονέκτημα της αρχιτεκτονικής AVR είναι η παρουσία 32 λειτουργικών μητρώων,
όχι εντελώς ίσα, αλλά επιτρέποντας σε ορισμένες περιπτώσεις να μην στραφούν σε
RAM και να μην χρησιμοποιήσετε τη στοίβα (κάτι που είναι βασικά αδύνατο στο ίδιο
οικογένεια Χ 51), επιπλέον, στα χαμηλότερα μοντέλα AVR η στοίβα δεν είναι γενικά διαθέσιμη
προγραμματιστής Ως εκ τούτου, η δομή των προγραμμάτων assembler για AVR έγινε ύποπτη.
μοιάζουν πολύ με γλωσσικά προγράμματα υψηλού επιπέδου όπου λειτουργούν οι δηλώσεις
όχι με κελιά μνήμης και καταχωρητές, αλλά με αφηρημένες μεταβλητές και σταθερές.
Ένα άλλο χαρακτηριστικό του AVR από την άποψη του κυκλώματος είναι ότι όλες οι ακίδες είναι μέσα
μπορούν να είναι σε τρεις καταστάσεις (είσοδος - απενεργοποίηση - έξοδος) και ηλεκτρικά
τα σκι είναι δομές CMOS (δηλαδή, υπάρχει συμμετρία στην έξοδο
σήματα και υψηλή αντίσταση για είσοδο). Σε γενικές γραμμές, αυτό είναι σημαντικό
πιο βολικό από τα λιμάνια Χ 51 (δισταθερό και συμβατό με TTL) και προτείνει καλύτερα
θόρυβος (τουλάχιστον από παρεμβολές στο επίγειο λεωφορείο).
Έχοντας συνοψίσει απόψεις από διάφορες πηγές και με βάση τη δική μου εμπειρία,
ο συγγραφέας κατέληξε περίπου στην ακόλουθη διαίρεση των περιοχών εφαρμογής των τριών περισσότερων
κοινές οικογένειες ελεγκτών.

Ελεγκτές κλασικής αρχιτεκτονικής Χ 51 (τα πρώτα μικροκυκλώματα της οικογένειας
Τα 8051 κυκλοφόρησαν στις αρχές της δεκαετίας του 1980) είναι τα καλύτερα για γενικούς
μελετώντας το θέμα. Σημειώστε ότι εκτός από την Atmel, Χ 51 συμβατά προϊόντα εσείς-
περίπου δώδεκα ακόμη εταιρείες ξεκινούν, συμπεριλαμβανομένων τέτοιων κολοσσών όπως η Philips και
Siemens, υπάρχουν και εγχώρια ανάλογα (σειρά 1816, 1830, κ.λπ.), που το κάνει αυτό
η αρχιτεκτονική είναι η πιο καθολική.

Η οικογένεια AVR συνιστάται για αρχάριους επαγγελματίες ηλεκτρονικών,
λόγω της απλότητας και της ευελιξίας της συσκευής, η συνέχεια της δομής για
διάφοροι τύποι ελεγκτών, απλότητα σχεδιασμού και προγραμματισμού κυκλωμάτων
(στην περίπτωση αυτή, «προγραμματισμός» σημαίνει τη διαδικασία εγγραφής ενός προγράμματος
γραμμάριο ανά τσιπ).

Τα PIC μικροτσίπ είναι ιδανικά για το σχεδιασμό απλών συσκευών.
σμήνη, ειδικά εκείνα που προορίζονται για αναπαραγωγή.

Αυτή η ταξινόμηση είναι σε μεγάλο βαθμό υποκειμενική και ο συγγραφέας δεν θα αμφισβητήσει άλλους
άποψη: διάφορες οικογένειες MKs πλησιάζουν σταδιακά σε παραμέτρους,
γίνονται εντελώς εναλλάξιμα και, όπως σε όλα τα σύγχρονα ηλεκτρικά
Νικ, η επιλογή της μιας ή της άλλης οικογένειας έχει συχνά «θρησκευτικό» χαρακτήρα.
Επιπλέον, οι τρεις αναφερόμενες οικογένειες ΜΚ είναι μόνο οι πιο κοινές
μεταξύ των καθολικών ελεγκτών, αλλά απέχει πολύ από τους πιο δημοφιλείς γενικά. Γενικός
Ο αριθμός των υπαρχουσών οικογενειών μικροελεγκτών εκτιμάται ότι είναι περίπου.
Στην πραγματικότητα περισσότερα από 100, με όλο και περισσότερα να εμφανίζονται κάθε χρόνο. Καθένα από
αυτές οι οικογένειες μπορούν να περιλαμβάνουν δεκάδες διαφορετικά μοντέλα. Ταυτόχρονα, η πρώτη θέση
μεταξύ των κατασκευαστών MK 8-bit ανήκει παραδοσιακά στη Motorola,
κυρίως λόγω των ελεγκτών για κινητές συσκευές. Εταιρεία μικροτσίπ

Εισαγωγή

Με την οικογένεια PIC, κατατάσσεται στην τρίτη θέση και η Atmel είναι μόλις έκτης. Εν,
Εκτός από τα 8-bit AVR MCU, η Atmel παράγει πολλούς άλλους τύπους MCU,
που περιλαμβάνουν όχι μόνο τους αναφερόμενους διαδόχους του 8051, αλλά και την ARM-
επεξεργαστές και εξειδικευμένους μικροελεγκτές για διάφορες εφαρμογές. παρ 'όλα αυτά
Αυτά τα επίσημα στατιστικά στοιχεία δεν σημαίνουν τίποτα ακόμα - για παράδειγμα, μεταξύ των MK με ενσωματωμένο
Η μνήμη flash Atmel κατέχει ήδη το ένα τρίτο της παγκόσμιας αγοράς.
Πίσω το 2002–2003, παράγονταν 3,2 δισεκατομμύρια μικροδοχεία ετησίως στον κόσμο.
τρολερ. Σημειώστε ότι ο όγκος παραγωγής των επεξεργαστών Η/Υ μπορεί να εκτιμηθεί σε
200 εκατομμύρια μονάδες ετησίως, δηλαδή είναι μόνο το 6% περίπου της αγοράς (σε χρηματοοικονομικούς όρους)
Με όρους κουκουβάγιας, ωστόσο, η αναλογία είναι διαφορετική, επειδή η τυπική τιμή ενός συνηθισμένου MK
είναι 2–5 δολάρια και ένας επεξεργαστής υπολογιστή είναι τουλάχιστον μια τάξη μεγέθους υψηλότερος, και
μερικές φορές φτάνει τα εκατοντάδες δολάρια). Επομένως, δεν θα ήταν υπερβολή να πούμε
ότι η ειδικότητα ενός ηλεκτρονικού μηχανικού με ειδίκευση στη μικρο-
ελεγκτές, δεν είναι λιγότερο σημαντικό και σπάνιο από έναν προγραμματιστή υπολογιστών -
μηχανικός συστημάτων ή δημιουργός προσαρμοσμένων εφαρμογών.

Αυτό το βιβλίο απευθύνεται στον αναγνώστη που θέλει να μελετήσει τη δομή και τον σχεδιασμό του κυκλώματος
ειδικά χαρακτηριστικά του AVR MK και μάθετε πώς να χρησιμοποιείτε σωστά τις κύριες λειτουργίες τους
δυνατότητες. Επομένως, ο συγγραφέας περιορίζεται στη γλώσσα assembly (διαβάστε περισσότερα ερώτηση
Θα εξετάσουμε την επιλογή ενός περιβάλλοντος προγραμματισμού σε κεφάλαιο 5). Η έμφαση στο βιβλίο είναι
να δώσει στον αναγνώστη πρακτικές συμβουλές, να περιγράψει έτοιμους αλγόριθμους για
τυπικές εργασίες που προκύπτουν για τους προγραμματιστές κατά την εφαρμογή ορισμένων
Λειτουργίες MK. Ο συγγραφέας μαζί με τους αναγνώστες εξετάζει διεξοδικά μια σειρά από ζητήματα που
ry συνήθως υπερβαίνει το πεδίο εφαρμογής των εγχειριδίων προγραμματισμού MK: εργασία με μετά-
πρακτικές διεπαφές, αριθμητικές πράξεις, διασύνδεση με υπολογιστή, πρακτική
τεχνική εφαρμογή τρόπων εξοικονόμησης ενέργειας.
Ταυτόχρονα, ο συγγραφέας δεν σχεδίασε να αναλύσει λεπτομερώς απολύτως ό,τι ήταν δυνατό -
sti MK AVR: αρκετοί τόμοι δεν θα ήταν αρκετοί για αυτό. Είμαστε αναγκασμένοι να κυκλοφορούμε
ζητήματα όπως ο εντοπισμός σφαλμάτων και ο προγραμματισμός με τη χρήση της διεπαφής JTAG είναι πολλά υποσχόμενα
εσείς, που ανακαλύπτετε τον αυτοπρογραμματισμό των ελεγκτών, μόνο επιπόλαια
Ανυπομονούμε για το πιο ενδιαφέρον πρόβλημα της σύνθεσης ήχου και άλλων εφαρμογών των λειτουργιών PWM
χρονόμετρα.
Σε αυτό το βιβλίο, τα περισσότερα από τα παραδείγματα επικεντρώνονται στη χρήση ελάσσονος σημασίας
(με χωρητικότητα μνήμης 8 MB) μοντέλα της υποοικογένειας Mega, αφού είναι τα περισσότερα
Πιο ευέλικτο και κατάλληλο για ένα ευρύ φάσμα εργασιών χωρίς περιττή πολυπλοκότητα
σχέδιο. Σε απλούστερες περιπτώσεις, ο συγγραφέας εστίασε στο πιο καθολικό
από τα νεότερα μοντέλα ATtiny2313 (σχετικά με τη συμβατότητά του με την "κλασική" έκδοση
AT90S2313 cm. Ενότητα Κεφάλαιο «Πρόγραμμα μετρητή με χρήση διακοπών».
εσύ 5
). Τα περισσότερα από τα παραδείγματα που δίνονται μπορούν να γίνουν χωρίς σχεδόν καμία τροποποίηση.
προσαρμοσμένο σε άλλα μοντέλα AVR με την κατάλληλη διαμόρφωση
tion.

ΜΕΡΟΣ

Γενικές αρχές της συσκευής

και λειτουργία του Atmel AVR

Κεφάλαιο 1.Ανασκόπηση μικροελεγκτών Atmel AVR

Κεφάλαιο 2.Γενική δομή, οργάνωση μνήμης,

ρολόι, επαναφορά

Κεφάλαιο 3.Εισαγωγή στα περιφερειακά

Κεφάλαιο 4.Διακοπές και λειτουργίες εξοικονόμησης ενέργειας

C H A P T E R

Αναθεώρηση μικροελεγκτή
Atmel AVR

Το Atmel AVR είναι μια οικογένεια ευέλικτων μικροσυσκευών 8-bit.
trollers που βασίζονται σε κοινό πυρήνα με διάφορα ενσωματωμένα περιφερειακά
σμήνη. Οι δυνατότητες του AVR MK σας επιτρέπουν να λύσετε πολλά τυπικά προβλήματα,
που προκύπτουν ενώπιον των προγραμματιστών ραδιοηλεκτρονικού εξοπλισμού.
Χαρακτηριστικά των μικροελεγκτών Atmel AVR.

Η απόδοση είναι περίπου 1 MIPS/MHz. MIPS (Εκατομμύρια οδηγίες ανά
Δεύτερον, εκατομμύρια εντολές ανά δευτερόλεπτο) είναι μια από τις παλαιότερες και από πολλές απόψεις
κακό χαρακτηριστικό της απόδοσης του επεξεργαστή, επειδή σύνολα εντολών
για διαφορετικούς επεξεργαστές είναι διαφορετικοί και, κατά συνέπεια, ο ίδιος αριθμός
οδηγίες για διαφορετικά συστήματα θα δώσουν διαφορετικά χρήσιμα αποτελέσματα. παρ 'όλα αυτά
για απλά υπολογιστικά συστήματα 8-bit που δεν περιέχουν οδηγίες, λειτουργούν
ασχολείται με μεγάλους αριθμούς, αριθμούς κινητής υποδιαστολής και πίνακες
δεδομένα, αυτός είναι ένας καλός δείκτης για τη σύγκριση της απόδοσής τους. Υπολογίζω
Ο πυρήνας απόδοσης του AVR σε έναν αριθμό εργασιών υπερβαίνει τις 16 φορές
εν σειρά επεξεργαστής 80286.

Προηγμένη αρχιτεκτονική RISC.Έννοια RISC (Μειωμένη).
Προτιμάται το σύνολο εντολών Υπολογισμός, υπολογισμοί με μειωμένο σύνολο εντολών
απαιτεί την παρουσία ενός συνόλου εντολών που αποτελούνται από ένα ελάχιστο συμπαγές και γρήγορο
εκτέλεση εντολών· Ταυτόχρονα, τέτοιες πιο δύσκαμπτες λειτουργίες όπως
υπολογισμοί κινητής υποδιαστολής ή αριθμητική πολλών bit
σε πραγματικούς αριθμούς, υποτίθεται ότι υλοποιείται σε επίπεδο υπορουτίνας. Εννοια
Το RISC απλοποιεί τη σχεδίαση του πυρήνα (ένας τυπικός πυρήνας AVR περιέχει μόνο 32 χιλιάδες μονάδες).
τρανζίστορ, σε αντίθεση με δεκάδες εκατομμύρια σε επεξεργαστές Η/Υ) και επιταχύνθηκαν
δείχνει τη λειτουργία του: μια τυπική εντολή εκτελείται σε έναν κύκλο ρολογιού (εκτός από εντολές
διακλάδωση προγράμματος, πρόσβαση στη μνήμη και κάποια άλλα που λειτουργούν με
μεγάλα δεδομένα). Το AVR έχει μια απλή σύνδεση δύο σταδίων
Weir, όταν μια εντολή εκτελείται σε έναν κύκλο ρολογιού ενώ λαμβάνεται η επόμενη.
Σε αντίθεση με τις αρχιτεκτονικές της Intel, το «κλασικό» AVR δεν διαθέτει πολλαπλασιαστή υλικού
διαίρεση/διαίρεση, ωστόσο, η υποοικογένεια Mega περιέχει πράξεις πολλαπλασιασμού.

Ξεχωριστοί δίαυλοι εντολών και μνήμης δεδομένων. AVR (όπως τα περισσότερα άλλα
μικροελεγκτές) έχει το λεγόμενο. Αρχιτεκτονική του Χάρβαρντ, όπου περιοχές μνήμης