ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΘΕΜΑΤΑ ΦΕΒ 2014. Ημ/νία: 12-2-2014 ΘΕΜΑ 1 α) Εξηγήστε τους όρους: διάνυσμα διακοπής, εγκατάσταση διακοπής, ενεργοποίηση διακοπής, ρουτίνα διακοπής. (0,75 μον) - Διάνυσμα διακοπής είναι η διεύθυνση στη μνήμη κώδικα η οποία περιέχει τη διεύθυνση στην οποία θα γίνει η διακλάδωση κατά τη λήψη μιας διακοπής. - Εγκατάσταση διακοπής είναι η εργασία που εκτελεί το πρόγραμμα για να κάνει τις απαραίτητες ρυθμίσεις στο περιφερειακό ώστε να ζητάει διακοπή με τον επιθυμητό τρόπο. - Η ενεργοποίηση διακοπής περιλαμβάνει τη ρύθμιση του περιφερειακού να ζητάει διακοπή και της CPU να δέχεται διακοπές. - Ρουτίνα διακοπής είναι η ρουτίνα την οποία δείχνει το διάνυσμα διακοπής και καλείται κατά τη λήψη μιας διακοπής. Πρέπει να τελειώνει σε RETI. β) Ποια είναι η λειτουργία και η χρήση του bit TOG0 της μονάδας 0 του PCA; Δώστε ένα παράδειγμα και περιγράψτε και τις υπόλοιπες ρυθμίσεις που είναι απαραίτητες. (1,75) Όταν το bit TOG0 είναι 1, τότε η έξοδος CEX0 της μονάδας 0 του PCA ανατρέπεται κάθε φορά που ο μετρητής του PCA CH_CL ισούται με την καταχωρισμένη τιμή στους CCAP0H_CCAP0L. Χρησιμοποιείται όταν θέλουμε να παράγουμε παλμοσειρές. Έστω, π.χ., ότι θέλουμε να παράγουμε παλμοσειρά 1 KHz στην έξοδο CEX0. Θα πρέπει: α) να ενεργοποιήσουμε το συγκριτή της μονάδας 0 κάνοντας 1 το bit ECOM0, β) να κάνουμε 1 το bit MAT0 ώστε η ισότητα να προκαλεί διακοπή γ) να κάνουμε 1 το bit ECCF0 ώστε η μονάδα 0 να δίνει τη διακοπή. Τέλος, δ) να κάνουμε 1 την ενεργοποίηση της διακοπής όλου του PCA με το bit EC. Στη ρουτίνα διακοπής του PCA θα ελέγχουμε το bit CCF0 ώστε να εξακριβώνουμε ότι η διακοπή είναι από τη μονάδα 0 και θα αυξάνουμε κατά 500 μs το περιεχόμενο του CCAP0H_CCAP0L για την επόμενη ανατροπή της στάθμης της εξόδου CEX0. Λύσεις θεμάτων Μικροϋπολογιστών - 1 - ΑΤΕΙΘ/Τμήμα Αυτοματισμού Νικολαΐδης Νικ.
ΘΕΜΑ 2 α) Θέλουμε να μετράμε τη διαφορά φάσης ανάμεσα σε δύο παλμοσειρές περίπου ίδιας συχνότητας. Πού θα συνδέσουμε τις δύο παλμοσειρές; Περιγράψτε τις μονάδες του με που θα χρησιμοποιήσετε και τις ρυθμίσεις που θα κάνετε σε αυτές. Οι παλμοσειρές εφαρμόζονται στις εισόδους δύο μονάδων PCA. Στις μονάδες αυτές ενεργοποιείται η σύλληψη στην ανερχόμενη παρυφή. Σε διακοπή μιας μονάδας αποθηκεύουμε την τιμή που έχει συλληφθεί και εξετάζουμε αν έχει γίνει σύλληψη και από την άλλη μονάδα. Αν ναι, αφαιρούμε τις δύο συλλήψεις και βρίσκουμε τη διαφορά φάσης. Αν όχι, σηματοδοτούμε ότι η μονάδα έκανε σύλληψη και επιστρέφουμε. β) Σχεδιάστε το κύκλωμα διασύνδεσης μιας μνήμης ROM κώδικα των 32 KΒytes στον 8051. Περιγράψτε τους δύο τρόπους ενεργοποίησής της. Μέχρι ποια συχνότητα ρολογιού μπορεί να χρησιμοποιηθεί ο κάθε τρόπος για τη σύνδεση μιας ROM η οποία έχει τους χρόνους του επόμενου πίνακα; (1,5 μον) Η μνήμη ROM μπορεί να ενεργοποιηθεί είτε από το!ce (Chip Enable), είτε από!οε (Output Enable). Για να δώσει δεδομένα θα πρέπει και οι δύο αυτές είσοδοι να είναι ενεργές 0. Με την είσοδο!ce απενεργοποιείται ολόκληρο το ολοκληρωμένο και δεν καταναλώνει σχεδόν καθόλου ρεύμα, αλλά αργεί να δώσει δεδομένα όταν το!cs γίνεται 0. Με την είσοδο!οε δίνει γρηγορότερα δεδομένα γιατί οι είσοδοι και τα κυκλώματα της μνήμης εργάζονται, αλλά καταναλώνει περισσότερο ρεύμα. Για να βρούμε τις μέγιστες συχνότητες χρειαζόμαστε το διάγραμμα χρονισμού της CPU σε ανάκληση κώδικα. Λύσεις θεμάτων Μικροϋπολογιστών - 2 - ΑΤΕΙΘ/Τμήμα Αυτοματισμού Νικολαΐδης Νικ.
Από το διάγραμμα αυτό φαίνεται ότι από την πίπτουσα παρυφή του παλμού!psen μέχρι το διάβασμα της ROM ο 8051 περιμένει 2 παλμούς ρολογιού (χρόνος 2Τ). Σε περίπτωση που το!psen συνδέεται στο!ce θα πρέπει 2Τ tce = 90ns, ενώ αν συνδέεται στο!οε, θα πρέπει 2Τ toe = 45ns. Η πρώτη περίπτωση (!CE) δίνει μέγιστη συχνότητα ρολογιού fmax=2/90=22.2 MHz ενώ η δεύτερη (!OE) δίνει fmax= 2/45=44.4 MHz. Κανένας άλλος χρόνος δεν ενδιαφέρει αφού δεν υπάρχουν άλλες συνδέσεις μεταξύ CPU και μνήμης. ΘΕΜΑ 3 α) Περιγράψτε ένα πρόγραμμα που να αντιστρέφει μία έξοδο του 8051 κάθε 1 s. (0,5 μον) Μπορούμε με οποιονδήποτε χρονιστή να βάλουμε αυτόματη επαναφόρτωση κάθε Τ μs, και να μετράμε στη ρουτίνα διακοπής του με ένα μετρητή 1000000/Τ διακοπές. Στη ρουτίνα διακοπής επίσης θα αντιστρέφουμε τη γραμμή εξόδου. β) Γράψτε ένα πρόγραμμα που να παράγει σε μία από τις εξόδους του 8051 μία τετραγωνική παλμοσειρά με κύκλο εργασίας 50% συχνότητας 5 KHz. (2 μον) Ο πιο εύκολος, αλλά και ο πιο «ξεκούραστος» τρόπος για τη CPU είναι να χρησιμοποιήσουμε τη γεννήτρια ρολογιού του χρονιστή Τ2. Η συχνότητα των 5 KHz αντιστοιχεί σε ημιπερίοδο 100 μs. Άρα, θα πρέπει να ρυθμίσουμε τους RCAP2H και RCAP2L για υπερχείλιση κάθε 100 μs. Οι ρυθμίσεις που πρέπει να γίνουν είναι: α) RCAP2H_RCAP2L=65536-100 β) Τ2ΟΕ=1 για να ανατρέπεται η έξοδος Τ2 (Ρ1.0) σε κάθε υπερχείλιση του TH2_TL2 γ) TR2=1 για να «τρέχει» ο Τ2 Λύσεις θεμάτων Μικροϋπολογιστών - 3 - ΑΤΕΙΘ/Τμήμα Αυτοματισμού Νικολαΐδης Νικ.
Το πρόγραμμα που θα κάνει αυτές τις ρυθμίσεις θα είναι το εξής: MOV RCAP2H,#high(-100) MOV RCAP2L,#low(-100) ;Βάλε την τιμή επαναφόρτωσης ORL T2MOD,#00000010b ;Κάνε 1 το Τ2ΟΕ SETB TR2 ΘΕΜΑ 4 α) Πώς μετράμε τη συχνότητα μιας παλμοσειράς όταν η συχνότητα είναι μικρή και πώς όταν είναι μεγάλη; (0,75 μον) Μία μέθοδος υπολογισμού συχνότητας είναι να μετράμε την περίοδο και να αντιστρέφουμε. Αυτή η μέθοδος δίνει ακριβείς μετρήσεις μόνο όταν η περίοδος είναι πολύ μεγαλύτερη από το βήμα χρονομέτρησης (1 μs για ρολόι 12 MHz). Για το λόγο αυτό, χρησιμοποιείται με καλή ακρίβεια σε χαμηλές συχνότητες. Για τη μέτρηση της συχνότητας σε Hz μπορούμε να μετράμε το πλήθος των παλμών εισόδου σε βάση χρόνου 1 sec. Μπορούμε, ακόμη, να μετράμε το πλήθος των παλμών σε κάποια άλλη βάση χρόνου και να υπολογίζουμε τη συχνότητα. Π.χ. μπορούμε να μετράμε τους παλμούς της εισόδου σε 1/10 s και να πολλαπλασιάζουμε τη μέτρηση επί 10 χάνοντας, βέβαια, το ψηφίο των μονάδων (ανάλυση = 10 Hz). Αυτή η μέθοδος δίνει καλή ακρίβεια σε υψηλές συχνότητες. Τότε ο ένας παλμός ασάφειας στη μέτρηση είναι μικρό ποσοστό στο πλήθος των παλμών που θα μετρήσουμε και δίνει μικρό σφάλμα μέτρησης. β) Θέλουμε να παράγουμε μία παλμοσειρά με τη μισή συχνότητα μιας άλλης παλμοσειράς που μας δίνεται. Επιλέξτε τις γραμμές του με για την είσοδο και την έξοδο των παλμοσειρών και γράψτε το πρόγραμμα (κυρίως και ρουτίνες). (1,75 μον) Θα οδηγήσουμε την παλμοσειρά εισόδου σε μία είσοδο εξωτερικής διακοπής (π.χ.!ιντ0) και στη ρουτίνα διακοπής θα αντιστρέφουμε τη γραμμή της παλμοσειράς εξόδου, π.χ. Ρ3.7. Θα ρυθμίσουμε τη διακοπή στην πίπτουσα παρυφή του παλμού εισόδου. Λύσεις θεμάτων Μικροϋπολογιστών - 4 - ΑΤΕΙΘ/Τμήμα Αυτοματισμού Νικολαΐδης Νικ.
cseg at 0 JMP ARXH cseg at 0003h JMP INT0ROUT ARXH: SETB IT0 SETB EX0 SETB EA JMP $ INT0ROUT: CPL P3.7 RETI end Λύσεις θεμάτων Μικροϋπολογιστών - 5 - ΑΤΕΙΘ/Τμήμα Αυτοματισμού Νικολαΐδης Νικ.