Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΦΩΤΙΑ ΗΣ Α. ΗΜΗΤΡΗΣ M.Sc. ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ
ΙΑΚΟΠΕΣ (INTERRUPTS) ΟΙ ΙΑΚΟΠΕΣ ΕΙΝΑΙ «ΣΥΜΒΑΝΤΑ», ΕΣΩΤΕΡΙΚΑ Ή ΕΞΩΤΕΡΙΚΑ ΤΟΥ 8051, ΤΑ ΟΠΟΙΑ ΙΑΚΟΠΤΟΥΝ ΤΗ ΦΥΣΙΟΛΟΓΙΚΗ ΡΟΗ ΚΙ ΕΚΤΕΛΕΣΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ.
ΙΑΚΟΠΕΣ (INTERRUPTS) Η ΕΚΤΕΛΕΣΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΑΚΟΠΤΕΤΑΙ, ΕΚΤΕΛΕΙΤΑΙ ΚΑΠΟΙΟ ΥΠΟΠΡΟΓΡΑΜΜΑ ΕΞΥΠΗΡΕΤΗΣΗΣ ΤΗΣ ΙΑΚΟΠΗΣ, ΚΙ ΑΜΕΣΩΣ ΜΕΤΑ ΣΥΝΕΧΙΖΕΤΑΙ Η ΕΚΤΕΛΕΣΗ ΤΟΥ ΚΥΡΙΩΣ ΠΡΟΓΡΑΜΜΑΤΟΣ, ΑΚΡΙΒΩΣ ΑΠΟ ΕΚΕΙΝΟ ΤΟ ΣΗΜΕΙΟ ΟΠΟΥ ΕΙΧΕ ΙΑΚΟΠΕΙ.
ΣΥΜΒΑΝΤΑ ΠΟΥ ΕΝΕΡΓΟΠΟΙΟΥΝ ΤΙΣ ΙΑΚΟΠΕΣ ΥΠΕΡΧΕΙΛΙΣΗ TIMER 0/ΕΠΑΝΑΦΟΡΤΩΣΗ ΥΠΕΡΧΕΙΛΙΣΗ TIMER 1/ΕΠΑΝΑΦΟΡΤΩΣΗ ΛΗΨΗ/ΑΠΟΣΤΟΛΗ Ε ΟΜΕΝΩΝ ΑΠΟ ΣΕΙΡΙΑΚΗ ΠΟΡΤΑ ΕΞΩΤΕΡΙΚΗ ΙΑΚΟΠΗ 0 ΕΞΩΤΕΡΙΚΗ ΙΑΚΟΠΗ 1
ΙΕΥΘΥΝΣΕΙΣ ΣΤΗ ROM ΤΩΝ ΥΠΟΡΟΥΤΙΝΩΝ ΕΞΥΠΗΡΕΤΗΣΗΣ ΙΑΚΟΠΩΝ ΙΑΚΟΠΗ ΣΗΜΑΙΑ ΙΕΥΘΥΝΣΗ ΤΗΣ ROM ΣΤΗΝ ΟΠΟΙΑ ΒΡΙΣΚΕΤΑΙ Η ΥΠΟ- ΡΟΥΤΙΝΑ ΕΞΥΠΗΡΕΤΗΣΗΣ ΙΑΚΟΠΗΣ ΕΞΩΤΕΡΙΚΗ 0 IE0 0003H TIMER 0 TF0 000BH ΕΞΩΤΕΡΙΚΗ 1 IE1 0013H TIMER 1 TF1 001BH ΣΕΙΡΙΑΚΗ ΠΟΡΤΑ RI/TI 0023H
ΡΥΘΜΙΣΗ ΤΩΝ ΙΑΚΟΠΩΝ INTERRUPT ENABLE REGISTER (IE) Bit ΟΝΟΜΑ ΙΕΥΘΥΝΣΗ bit ΠΕΡΙΓΡΑΦΗ ΛΕΙΤΟΥΡΓΙΑΣ 7 EA AFH 6 - AEH εν χρησιμοποιείται 5 - ADH εν χρησιμοποιείται Συνολική (Global) ενεργοποίηση διακοπών (0=Απενεργοποίηση, 1=Ενεργοποίηση) 4 ES ACH Ενεργοποίηση διακοπής σειριακής πόρτας 3 ET1 ABH Ενεργοποίηση διακοπής Timer 1 2 EX1 AAH Ενεργοποίηση εξωτερικής διακοπής 1 1 ET0 A9H Ενεργοποίηση διακοπής Timer 0 0 EX0 A8H Ενεργοποίηση εξωτερικής διακοπής 0
ΣΕΙΡΑ ΕΞΥΠΗΡΕΤΗΣΗΣ ΤΩΝ ΙΑΚΟΠΩΝ 1. ΕΞΩΤΕΡΙΚΗ ΙΑΚΟΠΗ 0 2. ΙΑΚΟΠΗ TIMER 0 3. ΕΞΩΤΕΡΙΚΗ ΙΑΚΟΠΗ 1 4. ΙΑΚΟΠΗ TIMER 1 5. ΙΑΚΟΠΗ ΣΕΙΡΙΑΚΗΣ ΠΟΡΤΑΣ
ΡΥΘΜΙΣΗ ΤΗΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΤΩΝ ΙΑΚΟΠΩΝ INTERRUPT PRIORITY REGISTER (IP) Bit ONOMA ΙΕΥΘΥΝΣΗ bit ΠΕΡΙΓΡΑΦΗ ΛΕΙΤΟΥΡΓΙΑΣ 7 - BFH ε χρησιμοποιείται 6 - BEH ε χρησιμοποιείται 5 - BDH ε χρησιμοποιείται 4 PS BCH Προτεραιότητα διακοπής σειριακής πόρτας (0=χαμηλή προτεραιότητα, 1=υψηλή προτεραιότητα) 3 PT1 BBH 2 PX1 BAH 1 PT0 B9H 0 PX0 B8H Προτεραιότητα διακοπής Timer 1 (0=χαμηλή προτεραιότητα, 1=υψηλή προτεραιότητα) Προτεραιότητα διακοπής εξωτερικής διακοπής 1 (0=χαμηλή προτεραιότητα, 1=υψηλή προτεραιότητα) Προτεραιότητα διακοπής Timer 0 (0=χαμηλή προτεραιότητα, 1=υψηλή προτεραιότητα) Προτεραιότητα διακοπής εξωτερικής διακοπής 0 (0=χαμηλή προτεραιότητα, 1=υψηλή προτεραιότητα)
ΚΑΝΟΝΕΣ ΑΝΑΦΟΡΙΚΑ ΜΕ ΤΗΝ ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΤΩΝ ΙΑΚΟΠΩΝ 1. Οι διακοπές υψηλής προτεραιότητας δε μπορούν να διακοπούν από καμία άλλη διακοπή, ακόμα κι αν αυτή είναι υψηλής προτεραιότητας επίσης. 2. Μια διακοπή υψηλής προτεραιότητας μπορεί να διακόψει μια διακοπή χαμηλής προτεραιότητας. 3. Μια χαμηλής προτεραιότητας διακοπή μπορεί να εκτελεστεί μόνο εφόσον δεν εκτελείται κάποια άλλη διακοπήεκείνητηστιγμή.
ΚΑΝΟΝΕΣ ΑΝΑΦΟΡΙΚΑ ΜΕ ΤΗΝ ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΤΩΝ ΙΑΚΟΠΩΝ (ΣΥΝΕΧΕΙΑ) 4. Εάν εμφανιστούν ταυτόχρονα δύο διακοπές, θα εξυπηρετηθεί πρώτη αυτή που έχει την υψηλότερη προτεραιότητα. 5. Εφόσον εμφανιστούν ταυτόχρονα δύο διακοπές υψηλής προτεραιότητας, αυτές θα εκτελεστούν σύμφωνα με τη σειρά που παρουσιάστηκε νωρίτερα.
ΣΗΜΑΤΑ ΕΝΑΡΞΗΣ ΤΩΝ ΙΑΚΟΠΩΝ 1. Τοποθετείται η τρέχουσα τιμή του PC στο σωρό (πρώτα το χαμηλής τάξης byte και στη συνέχεια το υψηλής τάξης byte). 2. ιακοπές της ίδιας ή χαμηλότερης προτεραιότητας σταματούν να εκτελούνται προσωρινά. 3. Εφόσον έχουμε μια διακοπή των Timer 0 ή 1, ή εξωτερικές διακοπές, τότε η αντίστοιχη σημαία TF0, TF1, IE0 και IE1 παίρνει τιμή 0.
ΣΗΜΑΤΑ ΕΝΑΡΞΗΣ ΤΩΝ ΙΑΚΟΠΩΝ (ΣΥΝΕΧΕΙΑ) 4. Εφόσον έχουμε αποστολή ή λήψη δεδομένων από τη σειριακή πόρτα, τότε οι σημαίες TI ή RI (καταχωρητής SCON) αντίστοιχα παίρνουν τιμή 1. Με λογικό OR μεταξύ των τιμών των TI και RI προκύπτει η διακοπή της σειριακής πόρτας. 5. Εφόσον κληθεί η διακοπή της σειριακής πόρτας, οι σημαίες TI και RI δε μηδενίζονται αυτόματα. Θα πρέπει οι τιμές αυτές να μηδενίζονται μέσω του προγράμματος.
ΣΗΜΑΤΑ ΕΝΑΡΞΗΣ ΤΩΝ ΙΑΚΟΠΩΝ (ΣΥΝΕΧΕΙΑ) 6. Η ροή του προγράμματος μεταφέρεται στην υπορουτίνα εξυπηρέτησης της διακοπής. 7. Εκτελείται η υπορουτίνα εξυπηρέτησης της διακοπής.
ΕΞΟ ΟΣ ΑΠΟ ΙΑΚΟΠΗ ΜΙΑ ΙΑΚΟΠΗ ΤΕΛΕΙΩΝΕΙ ΜΕ ΤΗΝ ΕΚΤΕΛΕΣΗ ΤΗΣ ΕΝΤΟΛΗΣ RETI. ΣΤΗ ΣΥΝΕΧΕΙΑ: Ο ΜΕΤΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΛΑΜΒΑΝΕΙ ΑΠΌ ΤΟ ΣΩΡΟ ΤΑ ΥΟ BYTES ΤΑ ΟΠΟΙΑ ΕΙΧΑΝ ΑΠΟΘΗΚΕΥΤΕΙ ΝΩΡΙΤΕΡΑ ΚΑΙ ΕΙΧΝΟΥΝ ΤΗ ΙΕΥΘΥΝΣΗ ΤΗΣ ROM ΣΤΗΝ ΟΠΟΙΑ ΒΡΙΣΚΕΤΑΙ Η ΕΠΟΜΕΝΗ ΠΡΟΣ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΗ. ΟΙ ΣΗΜΑΙΕΣ ΠΟΥ ΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΙΣ ΙΑΚΟΠΕΣ ΕΠΑΝΕΡΧΟΝΤΑΙ ΣΤΗΝ ΚΑΤΑΣΤΑΣΗ ΠΟΥ ΗΤΑΝ ΠΡΙΝ ΤΗΝ ΕΚΤΕΛΕΣΗ ΤΗΣ ΥΠΟΡΟΥΤΙΝΑΣ ΕΞΥΠΗΡΕΤΗΣΗΣ ΤΗΣ ΙΑΚΟΠΗΣ.
ΕΞΩΤΕΡΙΚΕΣ ΙΑΚΟΠΕΣ 0 ΚΑΙ 1 ΟΙ ΕΞΩΤΕΡΙΚΕΣ ΙΑΚΟΠΕΣ 0 ΚΑΙ 1 ΕΝΕΡΓΟΠΟΙΟΥΝΤΑΙ ΜΕ ΤΑ ΚΑΤΑΛΛΗΛΑ ΕΞΩΤΕΡΙΚΑ ΣΗΜΑΤΑ ΣΤΑ PINS INT0 KAI INT1 ΑΝΤΙΣΤΟΙΧΑ. Ο ΚΑΘΟΡΙΣΜΟΣ ΤΩΝ ΤΙΜΩΝ ΤΩΝ 4 LSB ΤΟΥ ΚΑΤΑΧΩΡΗΤΗ TCON, ΚΑΘΟΡΙΖΕΙ ΤΟ ΕΙ ΟΣ ΤΟΥ ΕΞΩΤΕΡΙΚΟΥ ΣΗΜΑΤΟΣ ΠΟΥ ΑΠΑΙΤΕΙΤΑΙ ΚΑΘΕ ΦΟΡΑ ΠΡΟΚΕΙΜΕΝΟΥ ΝΑ ΕΝΕΡΓΟΠΟΙΗΘΕΙ ΚΑΠΟΙΑ ΕΞΩΤΕΡΙΚΗ ΙΑΚΟΠΗ.
ΕΞΩΤΕΡΙΚΕΣ ΙΑΚΟΠΕΣ 0 ΚΑΙ 1 (ΣΥΝΕΧΕΙΑ( ΣΥΝΕΧΕΙΑ) Bit ΟΝΟΜΑ ΙΕΥΘΥΝΣΗ bit ΠΕΡΙΓΡΑΦΗ ΛΕΙΤΟΥΡΓΙΑΣ 3 IE1 8BH 2 IT1 8AH 1 IE0 89H 0 IT0 88H Σημαία εξωτερικής διακοπής 1. Ενεργοποιεί την εξωτερική διακοπή 1. Τύπος της εξωτερικής διακοπής 1. 1 = η εξωτερικήδιακοπή1 ενεργοποιείται με ένα σήμα στο pin INT1 που μεταβαίνει από 1 σε 0 (1 0) 0 = η εξωτερικήδιακοπή1 ενεργοποιείται με ένα σήμα επιπέδου 0 (low level) στο pin INT1 Σημαία εξωτερικής διακοπής 0. Ενεργοποιεί την εξωτερική διακοπή 0. Τύπος της εξωτερικής διακοπής 0. 1 = η εξωτερικήδιακοπή0 ενεργοποιείται με ένα σήμα στο pin INT0 που μεταβαίνει από 1 σε 0 (1 0) 0 = η εξωτερικήδιακοπή0 ενεργοποιείται με ένα σήμα επιπέδου 0 (low level) στο pin INT0
ΟΙ ΚΑΤΑΧΩΡΗΤΕΣ ΚΑΤΑ ΤΗ ΙΑΡΚΕΙΑ ΤΩΝ ΙΑΚΟΠΩΝ. ΤΟ ΚΥΡΙΩΣ ΠΡΟΓΡΑΜΜΑ Ε ΘΑ ΠΡΕΠΕΙ ΝΑ ΑΝΤΙΛΑΜΒΑΝΕΤΑΙ ΟΤΙ ΕΚΤΕΛΕΙΤΑΙ Η ΟΤΙ ΕΚΤΕΛΕΣΤΗΚΕ ΚΑΠΟΙΑ ΙΑΚΟΠΗ. ΓΙΑ ΤΟ ΛΟΓΟ ΑΥΤΟ «ΠΡΟΣΤΑΤΕΥΟΥΜΕ» ΤΟ ΠΕΡΙΕΧΟΜΕΝΟ ΤΩΝ ΚΑΤΑΧΩΡΗΤΩΝ ΟΙ ΟΠΟΙΟΙ ΧΡΗΣΙΜΟΠΟΙΟΥΝΤΑΙ ΚΑΙ ΜΕΤΑΒΑΛΛΟΝΤΑΙ ΜΕΣΑ ΣΤΑ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΕΞΥΠΗΡΕΤΗΣΗΣ ΤΩΝ ΙΑΚΟΠΩΝ. Η «ΠΡΟΣΤΑΣΙΑ» ΤΩΝ ΠΕΡΙΕΧΟΜΕΝΩΝ ΤΩΝ ΚΑΤΑΧΗΡΗΤΩΝ ΑΥΤΩΝ ΓΙΝΕΤΑΙ ΜΕ ΤΗΝ ΤΟΠΟΘΕΤΗΣΗ ΤΟΥΣ ΣΤΟ ΣΩΡΟ.
ΟΙ ΚΑΤΑΧΩΡΗΤΕΣ ΚΑΤΑ ΤΗ ΙΑΡΚΕΙΑ ΤΩΝ ΙΑΚΟΠΩΝ. ΟΙ ΒΑΣΙΚΟΙ ΚΑΤΑΧΩΡΗΤΕΣ ΟΙ ΟΠΟΙΟΙ ΣΥΝΗΘΩΣ «ΠΡΟΣΤΑΤΕΥΟΝΤΑΙ» ΜΕΣΑ ΑΠΟ ΜΙΑ ΥΠΟΡΟΥΤΙΝΑ ΕΞΥΠΗΡΕΤΗΣΗΣ ΙΑΚΟΠΗΣ ΕΙΝΑΙ: PROGRAM STATUS WORD (PSW) DATA POINTER (DPTR) ACC (Ο ΚΑΤΑΧΩΡΗΤΗΣΑ) Β Rn (ΟΙ ΚΑΤΑΧΩΡΗΤΕΣ R0 ΕΩΣ KAI R7)
ΤΟ ΜΕΓΕΘΟΣ ΤΩΝ ΥΠΟΡΟΥΤΙΝΩΝ ΕΞΥΠΗΡΕΤΗΣΗΣ ΙΑΚΟΠΩΝ. ORG 0000H ; Ξεκινά η εγγραφή του προγράμματος στη διεύθυνση 0000Η τηςrom JMP MAIN ; Πραγματοποιούμε ένα άλμα στο κυρίως πρόγραμμα ORG 0003H ; Στη διεύθυνση 0003H της ROM βρίσκεται αποθηκευμένη η υπορουτίνα ; της εξωτερικής διακοπής 0 (σήμα στο pin INT0 ) JMP INT0SUB ; Άλμα στην υπορουτίνα εξυπηρέτησης της εξωτερικής διακοπής 0 ORG 000BH ; Στη διεύθυνση 000ΒH της ROM βρίσκεται αποθηκευμένη η υπορουτίνα ; τηςεξωτερικήςδιακοπήςτουtimer 0 JMP TIM0SUB ; Άλμα στην υπορουτίνα εξυπηρέτησης της διακοπής του Timer 0 ORG 200H ; Η διεύθυνση όπου ξεκινά το κυρίως πρόγραμμα MAIN:. INT0SUB:. ; Υπορουτίνα εξυπηρέτησης εξωτερικής διακοπής 0 (INT0 ).. RETI TIM0SUB:. ; Υπορουτίνα εξυπηρέτησης διακοπής του Timer 0. RETI END
ΙΑΚΟΠΕΣ ΤΗΣ ΣΕΙΡΙΑΚΗΣ ΠΟΡΤΑΣ SERIAL PORT INTERRUPT: CHECK_TI_FLAG: JNB RI, CHECK_TI_FLAG ; Έλεγχος για το εάν η τιμή του bit RI έχει τιμή ; 1. Εάν όχι τότε ελέγχεται το bit TI. MOV A, SBUF ; Εφόσον το bit RI είχε τιμή 1, τότε διαβάζουμε ; τον SBUF CLR RI ; Μηδενίζουμε το bit RI. JNB TI, EXIT_SERIAL_INT CLR TI MOV SBUF, # F EXIT_SERIAL_INT: RETI ; Έλεγχος για το εάν η τιμή του bit TI έχει τιμή ; 1. Εάν όχι τότε βγαίνουμε από την ; υπορουτίνα διακοπής σειριακής πόρτας. ; Μηδενίζουμε το bit TI. ; Στέλνουμε στη σειριακή πόρτα το χαρακτήρα ; F (μια τυχαία τιμή). ; Έξοδος από την υπορουτίνα εξυπηρέτησης ; της διακοπής της σειριακής πόρτας.