Σκοπόςτης Διάλεξης Εισαγωγήστις πηγές διακοπών (interrupts) και στον τρόπο που αυτές είναι διαχειρίσιμες από την αρχιτεκτονική 8051 Πώς συνδέονται οι διακόπτες και τα πληκτρολόγια σε ένα μικροϋπολογιστή αρχιτεκτονικής 8051 Πώς προγραμματίζεται ο μικροελεγκτής DS89C4x0 για την είσοδο δεδομένων από διακόπτες και πληκτρολόγια.
8051 Interrupt Ports Port Bit Name Alternate Function P3.0 RxD Receive data for serial port P3.1 TxD Transmit data for serial port P3.2 INT0 External interrupt 0 P3.3 INT1 External interrupt 1 P3.4 T0 Timer / counter 0 external input P3.5 T1 Timer / counter 1 external input P3.6 WR External data memory write strobe P3.7 RD External data memory read strobe
Διακοπές στην εκτέλεση κώδικα του 8051 προκαλούνται: αν οδηγήσουμε τον ακροδέκτη RESETαυτού σε λογικό 1 για τουλάχιστον δύο κύκλους μηχανής (24 περιόδους ρολογιού), αν οδηγήσουμε σε λογικό 0 κάποιον από τους ακροδέκτες P3.2,P3.3ή του στείλουμε αρνητικό μέτωπο τάσης, αν κάποιος από τους μετρητές / χρονιστές Τ0και Τ1, που έχουμε θέσει να μετράνε, υπερχειλίσει. από τη λειτουργία της σειριακής πόρτας του 8051.
Ανύσματα Διακοπών (Θέσεις Μνήμης ROM)
Καταχωρητής Ενεργοποίησης Διακοπών IE O βασικός καταχωρητής των διακοπώνieέχει την ακόλουθη μορφή και το κάθε bit αυτού αν τεθεί HIGH τότε ενεργοποιεί κάποια πηγή διακοπής. Tο bit ΙΕ.0 (EX0) είναι υπεύθυνο για την ενεργοποίηση της εξωτερικής διακοπής INT0 Tο bit ΙΕ.0 (EX0) είναι υπεύθυνο για την ενεργοποίηση της εξωτερικής διακοπής INT0 Το bitιε.1 (ET0) είναι υπεύθυνο για την ενεργοποίηση διακοπής λόγω υπερχείλισης του χρονιστή 0 (T0) Το bit ΙΕ.2 (EX1) είναι υπεύθυνο για την ενεργοποίηση της εξωτερικής διακοπής ΙΝΤ1 Το bitιε.3 (ET1)είναι υπεύθυνο για την ενεργοποίηση διακοπής λόγω υπερχείλισης του χρονιστή 1 (Τ1) To bit ΙΕ.4 (ES)είναι υπεύθυνο για την ενεργοποίηση διακοπής λόγω χρήσης της σειριακής θύρας Τα bits ΙΕ.5&ΙΕ.6 είναι υπεύθυνα για χρήση διακοπής άλλων 2 χρονιστών αλλά για τον µικροϋπολογιστή 8052 Το bitιε.7 (ΕΑ) είναι υπεύθυνο για την ενεργοποίηση όλων των διακοπών. Αν αυτό το bit δεν είναι high, τότεδεν λειτουργούν οι διακοπές.
Καταχωρητής ΙP(Interrupt Priority) ΡΧ0= bit προτεραιότητας της εξωτερικής διακοπής ΡΤ0= bit προτεραιότητας της διακοπής από υπερχείλιση του μετρητή / χρονιστή Τ0 ΡΧ1= bit προτεραιότητας της εξωτερικής διακοπής ΡΤ1= bit προτεραιότητας της διακοπής από υπερχείλιση του μετρητή / χρονιστή Τ1 ΡS= bit προτεραιότητας της διακοπής από τη λειτουργία της σειριακής πόρτας Χ= αφορούν στον 8052
Χρήση του Καταχωρητή IP Μεταξύ διακοπών ίσης προτεραιότητας υπάρχει μια «εσωτερική» προτεραιότητα ώστε αν δύοσήματα διακοπών φθάσουν «ταυτόχρονα» στον 8051, να εξυπηρετηθεί αυτό με την μεγαλύτερη «εσωτερική» προτεραιότητα. Τα σήματα διακοπών του 8051 κατατάσσονται ως εξής σε σειρά φθίνουσας «εσωτερικής» προτεραιότητας: ΙΝΤ0, Τ0, ΙΝΤ1, Τ1 και διακοπή από σειριακή πόρτα. Για να αποκτήσει μια διακοπή υψηλή προτεραιότητα πρέπει να γίνει 1 το αντίστοιχο bit του καταχωρητή ΙΡ. Π.χ. για να δώσουμε υψηλή προτεραιότητα στην εξωτερική διακοπή πρέπει να κάνουμε 1 το bit 0του ΙΡ(ΡΧ0).
Oκαταχωρητής TCON
Oκαταχωρητής TCON
ΔιακόπτεςPush Buttons Ένας διακόπτης τύπου Push Button μπορεί να συνδεθεί σε ένα dcτροφοδοτικό και να δώσει ένα συγκεκριμένο λογικό επίπεδο 0 ή 1. Το παραπάνω σχήμα δείχνει τυπικές συνδεσμολογίες για διακόπτες push buttons για λογικό 0 και λογικό 1 με τον διακόπτη ανοικτό (όχι πατημένο). To σύντομο πρόγραμμα σε γλώσσα assemblyδείχνει με ποιο τρόπο μπορεί να ελέγχεται μια συγκεκριμένη ακίδα εισόδου του μικροελεγκτή που συνδέεται στην έξοδο ενός διακόπτη τύπου push-button. Το συγκεκριμένο πρόγραμμα περιμένει σε ένα συνεχή βρόχομέχρι να κλείσει ένας διακόπτης του οποίου η έξοδος συνδέεται στην ακίδα P1.0. Η έξοδος του διακόπτη υποτίθεται ότι είναι σε λογικό 0 όταν αυτός είναι ανοικτός.
Πληκτρολόγιο (Keypad) software-debounce Οι διακόπτες ενός πληκτρολογίου είναι τύπου push-buttonσε κατάσταση normally open. Το σχήμα δείχνει το αποτέλεσμα της αναπήδησης (bounce-effect) κατά το χρονικό διάστημα που ακολουθεί το κλείσιμο ή το άνοιγμα ενός διακόπτη. Για ελαχιστοποίηση των προβλημάτων από την αναπήδηση ενός διακόπτη συνήθως εισάγουμε μια χρονοκαθυστέρηση. Συνήθως αναμονή 10-15ms μετά το κλείσιμο ή το άνοιγμα του διακόπτη είναι αρκετή ώστε να έχει αποσβεστεί το φαινόμενο της αναπήδησης και να έχει περιέλθει ο διακόπτης σταθερά στην τελική του κατάσταση. Ο κώδικας Assembly κάνει softwaredebounce ενός διακόπτη συνδεδεμένου στην ακίδα P1.0. Επίσης, υποτίθεται ότι αρχικά ο διακόπτης είναι normally-openσε κατάσταση λογικού 1 και όταν κλείνει δίνει στην ακίδα λογικό 0.
Πληκτρολόγιο (Keypad) hardware-debounce Ένα απλό κύκλωμα απόσβεσης των αναπηδήσεων για διακόπτη κανονικά ανοικτό (normally open), χρησιμοποιεί τέτοιες τιμές R και C ώστε η σταθερά χρόνου RCνα είναι μεγαλύτερη από τον χρόνο αναπηδήσεων του διακόπτη. Μια τυπική τιμή είναι RC =100ms. Ένα άλλο κύκλωμα απόσβεσης των αναπηδήσεων με χρήση υλικού είναι ο μανδαλωτής. Χρησιμοποιεί ένα κύκλωμα μανδάλωσης διασταυρωμένων συνδέσεων φτιαγμένο από ένα ζευγάρι λογικών πυλών NAND. Το πλεονέκτημα χρήσης του μανδαλωτή είναι μια καθαρή απόσβεση χωρίς περιορισμούς καθυστέρησης. Ο διακόπτης αποκρίνεται τόσο γρήγορα όσο γρήγορα μπορούν να ανοίγουν και να κλείνουν οι επαφές.
Πληκτρολόγιο Αναπτυξιακού Στο αναπτυξιακό του 8051 έχουμε συνδέσει ένα πληκτρολόγιο με διακόπτες τύπου Push-Button. Το πάτημα οποιουδήποτε πλήκτρου προκαλεί διακοπή. Το πληκτρολόγιο έχει την ακόλουθη διάταξη διεπαφή με τον DS89C4X0:
Απαιτήσεις ΚΩΔΙΚΑ ΠΛΗΚΤΡΟΛΟΓΙΟΥ Με τον κώδικα του πληκτρολογίου (Keypad) θέλουμε να εμφανίζεται στο LCDένας δεκαεξαδικός αριθμός που να αντιστοιχεί στο πλήκτρο που πατήθηκε. Για παράδειγμα, εάν θέλουμε να εμφανιστεί στο LCDτο Για παράδειγμα, εάν θέλουμε να εμφανιστεί στο LCDτο 0, πρέπει να πιέσουμε το πλήκτρο της πρώτης στήλης & της πρώτης γραμμής, ενώ αν θέλουμε να εμφανιστεί το F πρέπει να πιέσουμε το πλήκτρο της τελευταίας στήλης & της τελευταίας γραμμής.
Κώδικας Keypad: ROW1 equ P1.0 ROW2 equ P1.1 ROW3 equ P1.2 ROW4 equ P1.3 COL1 equ P1.4 COL2 equ P1.5 COL3 equ P1.6 COL4 equ P1.7 Μain: 1. ACALL INITLCD 2. SETB EX0 3. SETB EA 4. MOV P1,#0F0h 5. SJMP$ Στην 1η γραμμή καλούμε την ρουτίνα αρχικοποίησης του LCDτης αναπτυξιακής μας πλακέτας. Στις γραμμές 2&3ενεργοποιούμε την εξωτερική διακοπή ΙΝΤ0 µέσω IE. Στην γραμμή 4 αρχικοποιούμε την θύρα P1, ώστε οι 4 σημαντικές ακίδες να λειτουργούν ως είσοδοι & οι 4 λιγότερο σημαντικές ακίδες να λειτουργούν ως έξοδοι. Στην γραμμή 5 με την εντολή υλοποίησης αέναου βρόχου sjmp$περιμένουμε μέχρι να προκληθεί διακοπή από το πληκτρολόγιο στο κύριο πρόγραμμα του 8051.
Κώδικας Keypad: KEYPAD: MOV P1,#0FFH ;#11111111b CLR ROW1 ACALL KEY_DEL;Short delay every time JB COL1, L1;there is a line change MOV A, #'0 ACALL DATUM L1: JB COL2, L2 L1: JB COL2, L2 MOV A, #'1' ACALL DATUM L2: JB COL3, L3 MOV A, #'2' ACALL DATUM L3: JB COL4, L4 MOV A, #'3' ACALL DATUM L4: SETB ROW1 CLR ROW2
Κώδικας Keypad: L4: SETB ROW1 CLR ROW2 ACALL KEY_DEL JB COL1, L5 MOV A, #'4... L12: SETB ROW3 CLR ROW4... JB COL4, L16 MOV A, #'F' ACALL DATUM L16: MOV P1, #0F0H ACALL DELAYA ACALL DELAYA ACALL DELAYA ACALL DELAYA RETI
Άσκηση 1/2
Άσκηση 2/2