ΜΑΘΗΜΑ: ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΕΞΕΤΑΣΕΩΝ ΙΑΝΟΥΑΡΙΟΥ 2011 Καθηγητής: Νικολαΐδης Νικ. Ημ/νία εξέτασης: 28-1-2011 ΘΕΜΑ 1 Να σχεδιαστεί μία μνήμη ROM που να περιέχει το κείμενο "MICRO". Ο ASCII κωδικός του κενού είναι 40h, του "Α" είναι 41h και τα υπόλοιπα γράμματα έχουν συνεχόμενους κωδικούς. Ο μικρότερος αριθμός ν για τον οποίο ισχύει 2 ν 5, για τους 5 χαρακτήρες της λέξης MICRO, είναι το 3. Άρα, η ROM θα έχει τρεις εισόδους και 8 θέσεις μνήμης. Οι ASCII κωδικοί που πρέπει να φυλαχτούν είναι: 4Dh, 49h, 43h, 52h, 4Fh. Για την παράσταση του μεγαλύτερου αριθμού (52h) απαιτούνται 7 bits (52h = 1010010). Άρα, η ROM θα έχει 7 εξόδους. Ο πίνακας αλήθειας της ROM θα είναι: Α2 Α1 Α0 χαρ. ASCII (hex) 40 20 10 8 4 2 1 D0 0 0 0 M 4D 1 0 0 1 1 0 1 0 0 1 I 49 1 0 0 1 0 0 1 0 1 0 C 43 1 0 0 0 0 1 1 0 1 1 R 52 1 0 1 0 0 1 0 1 0 0 O 4F 1 0 0 1 1 1 1 1 0 1 1 1 0 1 1 1 Παρατηρούμε ότι οι έξοδοι και έχουν σταθερή τιμή 1 και 0 αντίστοιχα. Άρα, δε χρειάζεται να συμμετέχουν στον πίνακα μνήμης (πίνακας OR) της ROM. Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 1
ΘΕΜΑ 2 Συνδέστε τέσσερα 74HC573 στους διαδρόμους μιας CPU, δύο να λειτουργούν ως συσκευή εισόδου και δύο ως εξόδου. Χρησιμοποιήστε δ/νσεις της επιλογής σας από την περιοχή 8000h - 800Fh. Να βρεθούν οι βασικές διευθύνσεις και οι εικόνες κάθε μιας από τις 4 συσκευές. Οι γραμμές εισόδου D των 74HC573 εξόδου και οι έξοδοι Q των 74HC573 εισόδου θα συνδεθούν στο διάδρομο δεδομένων. Τα 74HC573 εξόδου θα ενεργοποιούνται από το και τα εισόδου από το!οε. Η άσκηση περιορίζει την επιλογή των δ/νσεων στην περιοχή από 8000h μέχρι 800Fh, συνολικά 16 δ/νσεις. Οι υπόλοιπες δεν μπορούν να χρησιμοποιηθούν, οπότε θα πρέπει να γίνει αποκωδικοποίηση της περιοχής 800Χh με 3 αποκωδικοποιητές από 4 σε 16, έναν για κάθε 16δικό ψηφίο. Η έξοδος 8 του 1ου ενεργοποιεί τον 2ο αποκωδ/τή, η έξοδος 0 του 2ου θα οδηγεί τον 3ο, η έξοδος 0 του οποίου θα οδηγεί τον τελικό αποκωδικοποιητή που θα επιλέγει ένα από τα τέσσερα ολοκληρωμένα 74HC573, ανάλογα με τη δ/νση. Η πιο οικονομική λύση είναι να αφιερώσουμε μία δ/νση σε κάθε ζευγάρι από 74HC573, ένα εισόδου και ένα εξόδου. Το 74HC573 εισόδου θα ενεργοποιείται όταν R/!W=1 και το εξόδου όταν R/!W=0. Με τον τρόπο αυτό χρειάζονται μόνο δύο δ/νσεις, μία για κάθε ζευγάρι. Επειδή οι γραμμές Α15...Α4 είναι δεσμευμένες για την αποκωδικοίηση της περιοχής 800Χh, θα χρησιμοποιηθεί η γραμμή Α3 για την επιλογή του ζεύγους. Για την επιλογή του κατάλληλου 74HC573, αντί για τη συνηθισμένη λογική με πύλες, μπορεί να χρησιμοποιηθεί ένας αποκωδ/τής από 2 σε 4 με εισόδους R/!W και A3, όπως φαίνεται στο επόμενο σχήμα. Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 2
D0... OUT0 OUT1 IN0 IN1 +5V +5V 4-to-16 0 1 2 3 4 5 6 7 8 9 A B C D E F 4-to-16 0 1 2 3 4 5 6 7 8 9 A B C D E F 4-to-16 0 1 2 3 4 5 6 7 8 9 A B C D E F R/W 2-to-4 A3 00 01 10 11 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 Το πρώτο και τρίτο 74HC573 σχηματίζουν ένα ζευγάρι που θα ενεργοποιείται όταν Α3=0, άρα θα έχουν βασική δ/νση την 8000h και εικόνες τις 8001h 8007h. Το δεύτερο και τέταρτο θα ενεργοποιούνται όταν Α3=1, άρα θα έχουν βασική δ/νση 8008h και εικόνες τις 8009h 800Fh. Το πρώτο και δεύτερο 74HC573 θα ενεργοποιούνται όταν R/!W=0 και το τρίτο και τέταρτο όταν R/!W=1. Αν, αντί για τη χρήση του αποκωδικοποιητή 2 σε 4, σχηματιστεί κύκλωμα με πύλες, ο πίνακας αλήθειας θα είναι ο εξής (προσέξτε τότε ότι δε θα χρησιμοποιηθούν οι δύο πύλες ΝΟΤ που φαίνονται στο προηγούμενο σχήμα): Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 3
Not RnotW A3 OUT0 OUT1 IN0 IN1 1 X X 0 0 1 1 Καμία συσκευή ενεργή 0 0 0 1 0 1 1 OUT0 0 0 1 0 1 1 1 OUT1 0 1 0 0 0 0 1 IN0 0 1 1 0 0 1 0 IN1 ΘΕΜΑ 3 Θέλουμε να αυξάνουμε ένα μετρητή ΜΕΤ του ενός byte κάθε ένα δευτερόλεπτο. Επιλέξτε τους πόρους του 89C51AC2 ώστε η CPU να έχει την ελάχιστη επιβάρυνση και γράψτε το λογικό διάγραμμα και το πρόγραμμα. Για να έχει την ελάχιστη επιβάρυνση η CPU θα πρέπει: να ενεργοποιηθεί ο μηχανισμός των διακοπών ώστε να απαλλαγεί η CPU. η περίοδος της διακοπής να είναι όσο το δυνατό μεγαλύτερη ώστε να διακόπτεται η CPU όσο γίνεται πιο αραιά ο χρόνος παραμονής μέσα στη ρουτίνα διακοπής να είναι όσο το δυνατό μικρότερος, ώστε να επιστρέφει νωρίτερα στο κυρίως πρόγραμμα. Άρα, θα πρέπει να επιλεγεί ένας 16μπιτος απαριθμητής (π.χ. Τ2 σε αυτόματη επαναφόρτωση ή μία μονάδα PCA). Επιλέγεται ο Τ2. Επίσης, επιλέγεται να ενεργοποιηθούν οι διακοπές του Τ2. Ο χρόνος διακοπής του ενός δευτερολέπτου είναι πολύ μεγάλος για οποιονδήποτε timer. Θα πρέπει, επομένως, να υλοποιηθεί ένας software χρονιστής ο οποίος θα μετράει τις διακοπές του Τ2 μέχρις ότου συμπληρωθεί 1 s. Το γινόμενο, δηλαδή, της περιόδου Τ του χρονιστή επί το πλήθος διακοπών του Ν θα πρέπει να είναι 1 s: T x N = 1.000.000 μs με απαίτηση, όπως ήδη αναφέρθηκε, το Τ να είναι όσο γίνεται μεγαλύτερο, αλλά Τ 65.535 μs. Ο συνδυασμός που ικανοποιεί την απαίτηση της άσκησης είναι Τ=62.500 μs και N=16 αλλά και ο προφανής Τ=50.000, Ν=20 δεν απέχει πολύ από αυτό το βέλτιστο. Μετά από την παραπάνω συζήτηση, καταλήγουμε στα εξής: Το κυρίως πρόγραμμα θα θέτει το χρονιστή Τ2 σε αυτόματη επαναφόρτωση κάθε 62.500 μs και θα ενεργοποιεί τις διακοπές του. Επίσης, θα βάζει αρχική τιμή 16 στο software χρονιστή (έστω μεταβλητή SOFT) του 1 byte. Άλλη εργασία δε χρειάζεται και το πρόγραμμα θα πέφτει σε ατέρμονα άδειο βρόχο. Η ρουτίνα διακοπής θα μειώνει κατά 1 τον SOFT και αν SOFT=0, θα τον αρχικοποιεί στο 16 και θα αυξάνει κατά ένα τον ΜΕΤ. Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 4
Το λογικό διάγραμμα θα είναι το εξής. Το πρόγραμμα που κωδικοποιεί στην assembly του 8051 το παραπάνω Λ.Δ. θα είναι: $nomod51 $include(atmelwm/89c51ac2.h) EX3VAR segment data rseg EX3VAR SOFT: ds 1 MET: ds 1 cseg at 002Bh JMP INT_ROUTINE_T2 cseg at 0 MAIN: MOV SP,#7Fh MOV MET,#0 MOV SOFT,#16 MOV RCAP2H,#high(65536-62500) ;up count MOV RCAP2L,#low(65536-62500) MOV T2MOD,#0 ;T2=0, DCEN=0 MOV T2CON,#00000100b SETB ET2 SETB EA ;TF2=0, RCLK=0, TCLK=0, EXEN2=0, ;TR2=1, C/!T2=0, CP/!RL2=0 JMP $ ;Στο κυρίως πρόγραμμα θα γίνει η χρήση του ΜΕΤ Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 5
INT_ROUTINE_T2: PUSH PSW CLR TF2 ;Μηδενισμός της σημαίας διακοπής DJNZ SOFT,INT_OUT MOV SOFT,#16 INC MET INT_OUT: POP PSW RETI end ΘΕΜΑ 4 Περιγράψτε την υλοποίηση ενός συχνομέτρου hardware και software με τη μέθοδο της απαρίθμησης παλμών σε βάση χρόνου 100 ms με χρήση των Τ0 και Τ1 του 8051. Ποια θα είναι η περιοχή μέτρησης και ποια η ανάλυση (resolution) της συσκευής; Αφού η βάση χρόνου θα είναι 0,1 s, θα πολλαπλασιάζουμε το πλήθος των παλμών που μετρούνται επί 10. Άρα: Ανάλυση = 10 Hz. Ζητείται να χρησιμοποιηθούν οι δύο χρονιστές Τ0 και Τ1. Ο ένας, έστω ο Τ0, θα απαριθμεί το πλήθος των εξωτερικών παλμών. Ο Τ1 θα μετράει τη βάση χρόνου των 100.000 μs. Η μέγιστη χρονομέτρηση που μπορεί να κάνει ο Τ1 σε αυτόματη επαναφόρτωση είναι 256 μs. Θα πρέπει, επομένως, να χρησιμοποιηθεί ένας software χρονιστής, έστω TIMEBASE, που θα μετράει τις υπερχειλίσεις του Τ1 ενεργοποιώντας τις διακοπές υπερχείλισης αυτού. Για να έχουμε μικρή επιβάρυνση στο πρόγραμμα θα διαλέξουμε αυτόματη επαναφόρτωση του Τ1 κάθε 250 μs και μέγιστη τιμή της TIMEBASE την 100.000 / 250 = 400. Δηλαδή, η μεταβλητή TIMEBASE θα είναι των 2 bytes. Στο κυρίως πρόγραμμα θα αρχικοποιείται στο 400 και στη ρουτίνα διακοπής θα μειώνεται κατά 1 μέχρι να μηδενιστεί. Μόλις μηδενιστεί, θα αποθηκεύει το πλήθος των παλμών που έχει μετρηθεί μέχρι εκείνη στο μετρητή του Τ0 στη μεταβλητή FREQ και θα μηδενίζει τον Τ0. Ο Τ0 θα απαριθμεί, σε λειτουργία 1, τους εξωτερικούς παλμούς που εφαρμόζονται στην είσοδο T0 (P3.4) αν κάνουμε 1 το αντίστοιχο bit C/!T στον TMOD. Στο mode αυτό ο Τ1 είναι 16μπιτος μετρητής των παλμών και θα μετράει μέχρι 65535 παλμούς σε 1/10 s. Άρα, η μέγιστη συχνότητα που θα μετράει θα είναι 655350 Hz 655 KHz. Υπάρχει όμως ένας περιορισμός που θέτει ο 8051 που κατεβάζει τη μέγιστη συχνότητα στα 500 KHz. Οι μετρητές T0 και T1 αυξάνονται σε πίπτουσα παρυφή των εισόδων Τ0 και Τ1. Στις εισόδους αυτές γίνεται δειγματοληψία στον παλμό S5P2 κάθε κύκλου. Όταν το δείγμα είναι 1 σε έναν κύκλο και 0 στον επόμενο, ανιχνεύεται η πίπτουσα παρυφή. Για ρολόι 12 MHz και κύκλο 1 μs, σημαίνει ότι η μέγιστη συχνότητα που μπορούν να απαριθμούν οι Τ0 και Τ1 είναι 0,5MHz. Αυτό θα είναι και το πάνω όριο της περιοχής μέτρησης του συχνόμετρου. Το κάτω όριο θα είναι προφανώς τα 10 Hz. Τελικά: Περιοχή μέτρησης = 10 Hz 500 KHz Απαντήσεις θεμάτων ΜΕ ΧΕ 2010/11 α περιόδου 6