Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

Σχετικά έγγραφα
12. Διακοπές Interrupts (IRQ)

10. Πληκτρολόγιο matrix 4x4

10. Πληκτρολόγιο matrix 4x4

15. Seven Segment Display. Πολυπλεγμένη λειτουργία

Σπύρος Καζαρλής, Χειμώνας

ΣΥΣΤΗΜΑ ΣΥΛΛΟΓΗΣ ΔΕΔΟΜΕΝΩΝ ΓΙΑ ΙΔΕΑΤΟ ΜΟΥΣΕΙΟ ΒΑΣΙΣΜΕΝΟ ΣΕ ΜΙΚΡΟΕΛΕΓΚΤΗ

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

WDT και Power Up timer

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

14. Timers/Counters prescaler Timer/Counter0 2 Timer/Counter0 Timer/Counter2 Timer/Counter1 Timer/Counter0 Timer/Counter1 Timer/Counter2

Σύγχρονη και Ασύγχρονη Σειριακή Επικοινωνία

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή


ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Ενότητα 8.1. Σειριακή και παράλληλη μετάδοση δεδομένων

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Έλεγχος της Σειριακής Θύρας

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

Αρχιτεκτονική υπολογιστών

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΕΡΓΑΣΤΗΡΙΑΚΟΥ ΜΑΘΗΜΑΤΟΣ «ΣΥΣΤΗΜΑΤΑ ΨΗΦΙΑΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ» ή ΠΡΟΓΡΑΜΜΑΤΙΖΟΝΤΑΣ ΤΟΝ ΜΙΚΡΟΕΛΕΓΚΤΉ PIC16F877 ΤΗΣ MICROCHIP TECHNOLOGY INC

; Οι HL δείχνουν την επόµενη θέση µνήµης MVI A, 38H CMP H JNZ DO_FLMEM ; POP B. ; Ανάκτηση καταχωρητών απο το σωρό.

1. Περιβάλλον εργασίας παραδείγματα σύνταξης

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ΚΕΦΑΛΑΙΟ 2ο ΚΑΤΑΧΩΡΗΤΕΣ. (c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ17

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

Ενσωματωμένα Συστήματα

Συστήματα Μικροϋπολογιστών

FHL Wind Data Logger By FURUNO Hellas SA

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

Καθολική Σειριακή Διεπιφάνεια (Universal Serial Interface)

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΑΠΑΝΤΗΣΕΙΣ

ΜΕΡΟΣ 1. Διακοπές (Interrupts)

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Προγραμματισμός Ι (ΗΥ120)

ΕΝΟΤΗΤΑ 12 ΣΕΙΡΙΑΚΗ ΔΙΕΠΑΦΗ

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑ ΝΙΚΗΣ ΠΛ ΗΡΟΦΟΡΙΚΗΣ

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

Βασικές τεχνικές εισόδου/εξόδου δεδοµένων

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Ενσωµατωµένα Συστήµατα

Electronics μαζί με τα συνοδευτικά καλώδια και το αισθητήριο θερμοκρασίας LM335 που περιέχονται

Keyboard. Ασσιούρας Ιωάννης 5593 Βούκας Ιωάννης 5001 Πρωτονοτάριος Ιωάννης 6072

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

Electronics μαζί με τα συνοδευτικά καλώδια και το αισθητήριο θερμοκρασίας LM335 που περιέχονται

8051 Interrupt Ports. Name Alternate Function

Πανεπιστήµιο Θεσσαλίας

ΠΕΡΙΦΕΡΕΙΑΚΑ ΤΟΥ PIC16F887

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Οδηγώντας μια οθόνη υγρών κρυστάλλων Liquid Crystal Display

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εφαρμογές Σειριακής Επικοινωνίας

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γ ΕΠΑΛ 14 / 04 / 2019

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Σειριακό Τερματικό Serial Terminal (Dumb Terminal)

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Ανάπτυξη και Σχεδίαση Λογισμικού

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΚΑΤΑΧΩΡΗΤΕΣ ΟΛΙΣΘΗΤΕΣ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Οργάνωση Υπολογιστών (IΙI)

Λογικά σύμβολα των CPU, RAM, ROM και I/O module

Δραστηριότητα 9: Σύνδεση ΗΥ με το πολύμετρο METEX 3870D μέσω σειριακής επικοινωνίας RS232 και εφαρμογή σε LabView

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ

Μαθαίνοντας το hardware του αναπτυξιακού

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Μάθημα 2 Δραστηριότητα 2: Δημιουργώντας το Μετεωρολογικό Σταθμό. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού.

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Βασικές συσκευές Ε/Ε. Είσοδος Έξοδος στον υπολογιστή. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (IΙI) Μ.

LFT169 - LFR169 ΠΟΜΠΟΣ ΚΑΙ ΔΕΚΤΗΣ ΨΗΦΙΑΚΩΝ ΚΑΙ ΑΝΑΛΟΓΙΚΩΝ ΣΗΜΑΤΩΝ

Λειτουργικά Συστήματα (ΗΥ321)

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 4: Ρουτίνες καθυστέρησης. [Συγγραφή ρουτίνας καθυστέρησης]

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

CTMU. => C = 50pF 10pF = 40 pf. C stray. d (C V ) I= I = C V. C= I t. Ι = dq dt

Εφαρμογές μικροελεγκτών

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

Transcript:

16. USART Οι AVR διαθέτουν ενσωματωμένη διάταξη για υποστήριξη σειριακής επικοινωνίας USART 1 (Universal Synchronous and Asynchronous serial Receiver and Transmitter). Η ενσωματωμένη διάταξη μας εξυπηρετεί στην απλοποίηση του κώδικα για την επίτευξη της επικοινωνίας. Η ασύγχρονη επικοινωνία είναι η περισσότερο χρησιμοποιούμενη γιατί απαιτεί δύο μόνο συνδέσεις, μια για τη λήψη (TX) και μια για την αποστολή (RX) δεδομένων. Η ρύθμιση των χαρακτηριστικών της επικοινωνίας και οι λειτουργίες λήψης και αποστολής γίνονται μέσω έξι καταχωρητών: UCSRA, UCSRB, UCSRC, UBRRH, UBRRL και UDR. Υπάρχει επίσης δυνατότητα ενεργοποίησης εσωτερικής διακοπής κατά την λήψη ή αποστολή δεδομένων ή όταν αδειάζει ο καταχωρητής δεδομένων UDR. Κατά το initialize ρυθμίζεται το Baud Rate δίνοντας την κατάλληλη τιμή (UBRR) στους καταχωρητές UBRRH και UBRRL. Η τιμή αυτή εξαρτάται από τη συχνότητα λειτουργίας του ρολογιού συστήματος (f osc) και το επιθυμητό Baud Rate (BAUD) και μπορεί να υπολογιστεί από τη σχέση 2 : UBRR=(f osc/16baud)-1 Για κάθε συνδυασμό συχνότητας λειτουργίας Baud Rate υπάρχει και μια πιθανότητα σφάλματος 3 στη μετάδοση των δεδομένων, εξ αιτίας της διαίρεσης που πρέπει να γίνει στη συχνότητα λειτουργίας, ώστε να γίνει ο χρονισμός της διάταξης για να επιτευχθεί το επιθυμητό Baud Rate. Η πιθανότητα σφάλματος μπορεί να υπολογιστεί από τη σχέση 4 : Error[%]=((BaudRate Closest Match/BaudRate)-1) 100% Κατά το initialize ενεργοποιούνται επίσης οι διατάξεις λήψης, αποστολής και εσωτερικών διακοπών USART. Η ενεργοποίησή τους γίνεται με τοποθέτηση κατάλληλων bit του UCSRB. Ο καθορισμός του frame format της επικοινωνίας γίνεται με τοποθέτηση κατάλληλων bit του UCSRC. Ο καταχωρητής UCSRA περιέχει τις σημαίες λήψης αποστολής δεδομένων, διαθεσιμότητας του UDR και σφαλμάτων και τα bit διπλασιασμού ταχύτητας και 1 Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2 Στο Data Sheet του μικροελεγκτή υπάρχει πίνακας με τις τιμές UBRR για κάθε συνδυασμό συχνότητας λειτουργίας Baud Rate. 3 Η πιθανότητα σφάλματος προϋποθέτει η συχνότητα λειτουργίας να είναι συγκεκριμένη και σταθερή. Όταν γίνεται χρήση του εσωτερικού ταλαντωτή του μικροελεγκτή για ρολόι συστήματος η συχνότητα που επιλέγουμε δεν έχει αυτά τα χαρακτηριστικά, συνεπώς η πιθανότητα σφάλματος είναι απρόβλεπτη και η ποιότητα της επικοινωνίας ενδέχεται να είναι κακή. 4 Στο Data Sheet του μικροελεγκτή υπάρχει πίνακας με τις τιμές σφάλματος που προκύπτουν για κάθε συνδυασμό συχνότητας λειτουργίας Baud Rate. 1

ενεργοποίησης πολλαπλών μικροελεγκτών στον ίδιο δίαυλο. Στη συνέχεια παρουσιάζεται ένα παράδειγμα αποστολής και λήψης δεδομένων γραμμένο σε γλώσσα προγραμματισμού C: #include <avr/io.h> #include <avr/interrupt.h> unsigned char data; void USART_Init(unsigned int baud) UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; UCSRB = (1<<RXEN) (1<<TXEN) (1<<RXCIE); // USART Initialization routine // Set baud rate // Enable receiver and // transmitter, enable receiver // complete interrupt //UCSRC = (1<<URSEL) (1<<USBS) (3<<UCSZ0); // Set frame format: 2 stop // bit, 8 data, asynchronous // operation & no parity void USART_Transmit(unsigned char trnsm) while (!( UCSRA & (1<<UDRE))); UDR = trnsm; unsigned char USART_Receive(void) while (!(UCSRA & (1<<RXC))); return UDR; ISR(USART_RXC_vect) PORTC = USART_Receive(); // USART Transmit routine // Wait for empty transmit buffer // Put data into buffer, sends // the data // USART Receive routine // Wait for unread data in buffer // Return data to caller // Receive Complete Interrupt // Send received data to PORTC int main(void) // Main program DDRC = 0b11111111; // Port C: All outputs sei(); // Enable all Interrupts USART_Init(34); // Clock 8MHz: 34->14400 while (1) USART_Transmit (data); // Transmit variable data Στην αρχή του κώδικα εμφανίζεται η ρουτίνα για το initialization USART_Init(unsigned int baud), όπου με τις δύο πρώτες εντολές ρυθμίζεται το Baud Rate. Η μεταβλητή baud είναι 16bit ενώ οι καταχωρητές UBRRH, UBRRL είναι 8bit. Για αυτό το λόγο είμαστε αναγκασμένοι 2

να χρησιμοποιήσουμε δύο εντολές με ολίσθηση στην πρώτη, ώστε δώσουμε την τιμή της baud στο πεδίο UBRR (το οποίο είναι 12bit με τα 4 MSB στο χαμηλό μέρος του UBRRH και τα 8 LSB στον UBRRL). Η επόμενη εντολή ενεργοποιεί τη δυνατότητα λήψης και αποστολής και τη διακοπή που προκαλείται από την ολοκλήρωση λήψης, τοποθετώντας τα αντίστοιχα bit και καθαρίζοντας όλα τα άλλα. Στη συνέχεια η εντολή που ακολουθεί είναι σα σχόλιο αφού δεν είναι απαραίτητη, αλλά δίνεται ως παράδειγμα πρόσβασης στον καταχωρητή UCSRC. Η αρχική κατάσταση της σύνδεσης είναι ασύγχρονη, με 1 stop bit και χωρίς έλεγχο ισοτιμίας (parity control), ρυθμίσεις που λειτουργούν κανονικά για τις περισσότερες συνδέσεις. Αν για κάποιο λόγο θέλουμε να διαμορφώσουμε διαφορετικά τα παραπάνω χαρακτηριστικά πρέπει να τοποθετήσουμε τα αντίστοιχα bit του καταχωρητή. Η διεύθυνση του UCSRC είναι ίδια με τον UBRRH με μόνη διαφορά ότι για να γράψουμε στον UCSRC πρέπει να τοποθετήσουμε το bit URSEL, διαφορετικά τα δεδομένα θα επικαλύψουν τα δεδομένα του UBRRH. Παρόμοια, για να γράψουμε στον UBRRH πρέπει να καθαρίσουμε το bit δηλαδή τα δεδομένα που θα στείλουμε να σιγουρευτούμε ότι έχουν 0 στο MSB. Η επόμενη ρουτίνα είναι για αποστολή δεδομένων. Με την πρώτη εντολή ελέγχεται η σημαία UDRE στον καταχωρητή UCSRA η οποία είναι 0 όταν ο στον UDR υπάρχουν δεδομένα προς αποστολή και 1 όταν ο UDR είναι έτοιμος να δεχτεί δεδομένα για αποστολή. Το πρόγραμμα περιμένει σε αυτή την εντολή όσο η UDRE είναι 0 και όταν γίνει 1 περνάει στην επόμενη με την οποία μεταφέρονται τα δεδομένα της μεταβλητής trnsm 5 στον UDR. Με αυτόν τον τρόπο ξεκινάει αυτόματα η αποστολή των δεδομένων από τη θύρα 6. Μετά ακολουθεί η ρουτίνα της λήψης δεδομένων. Κατά τον ίδιο τρόπο, ελέγχεται πρώτα σημαία RXC στον καταχωρητή UCSRA η οποία είναι 0 όταν στον UDR δεν υπάρχουν δεδομένα προς ανάγνωση και 1 όταν ο UDR έχει δεχτεί δεδομένα και είναι έτοιμος να διαβαστούν. Το πρόγραμμα περιμένει σε αυτή την εντολή όσο η RXC είναι 0 και όταν γίνει 1 περνάει στην επόμενη με την οποία αποδίδει τα δεδομένα σύμφωνα με την κλήση της ρουτίνας 7. Στη συνέχεια, στο μπλοκ κάτω από τον τίτλο του διανύσματος ISR(USART_RXC_vect), βρίσκεται ο κώδικας που εκτελείται από το διάνυσμα της διακοπής που προκαλείται από την ολοκλήρωση λήψης. Η μοναδική εντολή που βρίσκεται στο μπλοκ είναι απόδοση της τιμής που προέρχεται από τη ρουτίνα λήψης στο PORTC. 5 Η μεταβλητή trnsm δημιουργείται κατά την κλήση της ρουτίνας από το κυρίως πρόγραμμα και παίρνει τα δεδομένα που γράφονται στην παρένθεση όταν γίνεται η κλήση της είτε αυτά είναι τιμή είτε μεταβλητή. 6 Η UDRE γίνεται 0 όταν γραφούν καινούρια δεδομένα στον UDR και όταν ολοκληρωθεί η αποστολή τους γίνεται ξανά 1. 7 Όταν διαβαστούν τα δεδομένα η RXC γίνεται ξανά 0. 3

Ακολουθεί το κυρίως πρόγραμμα όπου με την πρώτη εντολή ενεργοποιείται το PORTC να λειτουργεί ως έξοδος, στη συνέχεια ενεργοποιούνται οι διακοπές και μετά καλείται η ρουτίνα για το initialization της σειριακής επικοινωνίας. Στον κλειστό βρόχο του προγράμματος καλούμε τη ρουτίνα αποστολής όποτε θέλουμε να στείλουμε δεδομένα από τη σειριακή θύρα, όπου μέσα στην παρένθεση, κατά τη σύνταξη της κλήσης, γράφουμε τα δεδομένα που θέλουμε να αποσταλούν. Αν υπάρχουν δεδομένα για λήψη, τότε εκτελείται η διακοπή λήψης και τα δεδομένα οδηγούνται στο PORTC. Σε περίπτωση που δε θέλουμε να ενεργοποιήσουμε τη διακοπή λήψης δεδομένων μπορούμε να συντάξουμε μια ρουτίνα λήψης και να την καλούμε όταν θέλουμε να γίνει λήψη. Σε αυτή την περίπτωση υπάρχει κίνδυνος απώλειας δεδομένων αν η συσκευή αποστολής στείλει περισσότερα του ενός byte. Στη συνέχεια παρουσιάζεται ένα παράδειγμα αποστολής δεδομένων, χωρίς τη χρήση διακοπής, γραμμένο σε γλώσσα προγραμματισμού C: #include <avr/io.h> void USART_Init(unsigned int baud) // USART Initialization routine UBRRH = (unsigned char)(baud>>8); // Set baud rate UBRRL = (unsigned char)baud; UCSRB = (1<<RXEN) (1<<TXEN); // Enable receiver, transmitter //UCSRC = (1<<URSEL) (1<<USBS) (3<<UCSZ0); // Set frame format: 2 stop // bit, 8 data, asynchronous // operation & no parity void USART_Receive(void) while (UCSRA & (1<<RXC)) PORTC = UDR; // USART Receive routine // Wait for unread data in buffer // Send received data to PORTC int main(void) DDRC = 0b11111111; // Port C: All outputs USART_Init(34); // Clock 8MHz: 34->14400 while (1) USART_Receive(); // Receive data 4

Η κυριότερη διαφορά είναι στη ρουτίνα λήψης USART_Receive(void) το πρόγραμμα εισέρχεται στην while όταν η RXC γίνει 1 και έτσι τα δεδομένα του UDR οδηγούνται στο PORTC. Αφού διαβαστεί ο RXC στη συνέχεια καθαρίζει η RXC και το πρόγραμμα βγαίνει από την while. 2017 Πορλιδάς Δημήτριος 5