Ερωτήσεις θεωρίας MY Μέρος Α. Υλικό. 1. Η μνήμη ROM είναι συνδυαστικό ή ακολουθιακό κύκλωμα; 2. α) Να σχεδιαστεί μία μνήμη ROM που να δίνει στις εξόδους της το πλήθος των ημερών του μήνα, ο αριθμός του οποίου (από 1 μέχρι 12) δίνεται στις εισόδους της. β) Εφοδιάστε τη ROM με μία είσοδο ακόμη που να δηλώνει δίσεκτο έτος αν είναι 1 και σχεδιάστε ξανά το κύκλωμα της μνήμης. 3. Να σχεδιαστεί μία ROM που να υλοποιεί έναν παράλληλο αθροιστή των δύο bits. Να έχει δηλαδή 4 εισόδους Α1, Α0, Β1, Β0 και να δίνει στις εξόδους της C i το άθροισμα των αριθμών Α και Β. 4. Να σχεδιαστεί μία μνήμη ROM που να μετατρέπει τον κώδικα BCD-XS3 (δεκαδικός κώδικας υπέρβασης κατά 3) στο δυαδικό σύστημα. Στον κώδικα BCD-XS3 τα ψηφία 0 μέχρι 9 κωδικοποιούνται στο δυαδικό ισοδύναμο των αριθμών 3 μέχρι 12. 5. Να βρεθεί η οργάνωση των ROM των τριών προηγούμενων ασκήσεων. 6. Να σχεδιαστεί μία στατική RAM με 8 θέσεις των 2 bits η κάθε θέση. Η μνήμη να έχει δικατευθυντήριο διάδρομο δεδομένων (και όχι ξεχωριστές εισόδους και εξόδους). 7. Να περιγραφούν οι εργασίες (καταστάσεις των ακροδεκτών) που πρέπει να εκτελεστούν σε μία στατική RAM για εγγραφή δεδομένων. 8. Τι διαφέρουν οι στατικές από τις δυναμικές μνήμες; 9. Τι είναι καταχωρητής; Πότε ένας καταχωρητής λέγεται διαφανής (transparent). 10. Τι είναι συσσωρευτής; Σχεδιάστε το κύκλωμα ενός συσσωρευτή. 11. Ποιες είναι οι πράξεις που μπορεί να εκτελεί μία αριθμητική και λογική μονάδα (ALU); 12. Τι είναι ένας διάδρομος δεδομένων και τι χρειάζεται; Πότε μπορεί ένα ολοκληρωμένο να συνδεθεί σε διάδρομο δεδομένων; 13. Τι είναι ο διάδρομος διευθύνσεων; 14. Γιατί στο με 8051 δεν υπάρχει η εντολή MOV R1,R2; 15. Τι χρειάζεται ο SP (Stack Pointer = Δείκτης Στοίβας); 16. Τι χρειάζεται ο PC (Program Counter = Απαριθμητής προγράμματος); 17. Τι χρειάζεται ο DPTR (Data Pointer = Δείκτης δεδομένων); 18. Τι χρειάζονται οι καταχωρητές ομάδας R0 R7; 19. Στις εντολές της γλώσσας assembly ADD A,12 και ADD A,#12 το δεύτερο byte είναι το 12 στο δυαδικό σύστημα. Όταν η CPU διαβάζει τον κώδικα, πώς ξεχωρίζει αν το 12 είναι δεδομένο ή η διεύθυνσή του; 20. Όταν η CPU διαβάζει κώδικα από τη μνήμη, πώς καταλαβαίνει από πόσα bytes αποτελείται η κάθε εντολή; 21. Τι είναι μία θύρα εισόδου; 22. Σχεδιάστε το απλούστερο δυνατό κύκλωμα που να συνδέει στο διάδρομο δεδομένων του 8051 μία 8μπιτη θύρα εισόδου και μία εξόδου (χρησιμοποιήστε δύο 74HC573). 23. Τι διαφέρει ο χρονισμός διαδρόμου τύπου Intel από αυτόν της Motorola; 24. Σε ένα διάδρομο με χρονισμό Intel περιγράψτε τις εργασίες για ανάγνωση δεδομένων. 25. Σε ένα διάδρομο με χρονισμό Motorola περιγράψτε τις εργασίες για εγγραφή δεδομένων. 26. Στο επόμενο κύκλωμα διασύνδεσης ολοκληρωμένων μνήμης να βρεθεί η κατάσταση όλων των ακροδεκτών όταν η CPU εγγράφει τον αριθμό 194.
27. Να συνδεθούν 4 στατικές RAM 6116 για να σχηματιστεί μνήμη μεγέθους 8 ΚBytes. 28. Να σχεδιαστεί ένα σύστημα μνήμης με δύο RAM των 8 KBytes, δύο ROM των 4 KBytes και δύο 74HC573, ένα ως θύρα εισόδου και ένα ως εξόδου. Να βρεθούν οι βασικές διευθύνσεις και οι εικόνες τους για κάθε περιφερειακό. 29. Να σχεδιαστεί ένα σύστημα μνήμης με μία RAM 32 KBytes, μία ROM 16 KBytes και 4 περιφερειακά που το καθένα απαιτεί 4 K θέσεις. 30. Να σχεδιαστεί ένα σύστημα μνήμης με δύο RAM των 8 KBytes, δύο ROM των 4 KBytes και δύο 74HC573, ένα ως θύρα εισόδου και ένα ως εξόδου. Να βρεθούν οι βασικές διευθύνσεις και οι εικόνες τους για κάθε περιφερειακό. Να χρησιμοποιηθεί η GAL16V8. 31. Πότε ο 8051 ανακαλεί κώδικα από την εξωτερική ROM; 32. Τι διαφέρει η αρχιτεκτονική Harvard από τη Von Neumann; Πώς γίνεται να ανακαλεί και να εκτελεί κώδικα ο 8051 από τη μνήμη RAM; Μέρος Β. Λογισμικό. 33. Ποια είδη μνήμης δεδομένων περιέχει ο 8051 και πώς γίνεται η προσπέλαση του κάθε είδους; 34. Ποιος είναι ο ρόλος των ακροδεκτών!psen,!rd και!wr; 35. Τι διαφέρουν οι εντολές MOV, MOVC και MOVX; 36. Τι είναι οι sfr; Τι είναι ο PSW; 37. Περιγράψτε τη λειτουργία των εντολών MOV A,12, MOV A,#12, MOV A,@R0, MOVC A,@A+DPTR, MOVX A,@DPTR, MOVX A,@R0, XCH A,@R0. 38. Γράψτε ένα πρόγραμμα που να μεταθέτει κυκλικά και αριστερόστροφα τα περιεχόμενα των θέσεων της απευθείας μνήμης 30h, 31h και 32h (30h 31h, 31h 32h, 32h 30h). 39. Γράψτε ένα πρόγραμμα που να μεταθέτει τα περιεχόμενα των θέσεων μνήμης d:30h, d:31h και d:32h κατά μία θέση προς τα κάτω, στις θέσεις δηλαδή d:2fh, d:30h και d:31h αντίστοιχα. 40. Περιγράψτε τη λειτουργία των εντολών MUL και DIV. 41. Πότε γίνεται 1 η σημαία του κρατούμενου και πότε η σημαία της υπερχείλισης;
42. Γράψτε ένα πρόγραμμα που να προσθέτει στον αριθμό των 24 bits, που περιέχεται στη μνήμη στις θέσεις d:30h (high byte), d:31h (medium byte) και d:32h (low byte), τη σταθερά 5.000.000. 43. Γράψτε ένα πρόγραμμα που να προσθέτει τις εξής θέσεις της απευθείας RAM. 30h 31h 32h 33h 34h + 35h 36h 37h 38h 39h 44. Δίδονται δύο πίνακες τεσσάρων θέσεων του δύο bytes. Ο πρώτος βρίσκεται στις θέσεις d:30h... d:37h και ο δεύτερος στις θέσεις i:90h... i:97h. Να γραφεί πρόγραμμα που να δημιουργεί έναν τρίτο πίνακα στις θέσεις x:1000h μέχρι x:1007h, ο οποίος να περιέχει σε κάθε του θέση τη διαφορά των αντίστοιχων θέσεων του πρώτου και του δεύτερου πίνακα (x = d i). 45. Γράψτε ένα πρόγραμμα που να προσθέτει στον αριθμό των 24 bits που περιέχεται στις θέσεις x:1000h, x:1001h και x:1002h τον αριθμό των 24 bits που περιέχεται στις θέσεις x:2000h, x:2001h και x:2002h. Να γίνει, δηλαδή, η εξής πρόσθεση. x:1000h x:1001h x:1002h + x:2000h x:2001h x:2002h x:1000h x:1001h x:1002h 46. Γράψτε ένα πρόγραμμα που να προσθέτει στον αριθμό των 24 bits που περιέχεται στις θέσεις i:80h, i:81h και i:82h τον αριθμό των 24 bits που περιέχεται στις θέσεις i:90h, i:91h και i:92h. Να γίνει, δηλαδή, η εξής πρόσθεση. i:80h i:81h i:82h + i:90h i:91h i:92h i:80h i:81h i:82h 47. Τι κάνει η εντολή JZ 100; 48. Τι κάνει η εντολή SJMP 200; 49. Τι κάνει η εντολή CJNE @R0,#100,100; 50. Τι κάνει η εντολή JBC 18,19; 51. Δίδονται δύο ταξινομημένοι πίνακες με 16 bytes ο καθένας. Ο πρώτος βρίσκεται στις θέσεις i:80h... i:8fh και ο δεύτερος στις θέσεις i:90h... i:9fh. Να δημιουργηθεί ένας τρίτος ταξινομημένος πίνακας στις θέσεις i:a0h... i:bfh που να περιέχει τα στοιχεία και των δύο πινάκων. Δίδεται το λογικό διάγραμμα της λύσης.
52. Δίνονται δύο πίνακες με 32 απροσήμαστους αριθμούς των 16 bits (unsigned int) ο καθένας. Ο πρώτος βρίσκεται στις θέσεις d:30h και μετά και ο δεύτερος στις θέσεις από i:80h και μετά. Να δημιουργηθεί ένας τρίτος πίνακας στην έμμεση RAM που να περιέχει το άθροισμα των αντίστοιχων θέσεων των δύο πρώτων πινάκων. 53. Να εξηγηθεί η σημασία των σημαιών C, AC, OV, F0, F1, RS1, RS0 και Ρ. 54. Γράψτε ένα πρόγραμμα που να ανταλλάσσει τη θέση των bits της θέσης μνήμης 30h (b7 b0, b6 b1,b5 b2 και b4 b3). Αν π.χ. το περιεχόμενο της 30h είναι 01010011 να γίνει 11001010. 55. Δίδονται δύο προσημασμένοι 8μπιτοι αριθμοί στις θέσεις 30h και 31h. Να γραφεί πρόγραμμα που να υπολογίζει στη σημαία F0 το πρόσημο του γινομένου τους. 56. Γράψτε ένα πρόγραμμα που να μετράει το πλήθος των «1» του byte που περιέχεται στη θέση d:30h. Το αποτέλεσμα να φυλάγεται στον Α. 57. Στη θύρα Ρ1 εφαρμόζονται δύο αριθμοί των 4 bits, ο πρώτος στα bits Ρ1.3 μέχρι Ρ1.0 και ο δεύτερος στα bits Ρ1.7 μέχρι Ρ1.4. Να γραφεί πρόγραμμα που να εμφανίζει στη θύρα Ρ2 το γινόμενο των δύο αριθμών. 58. Τι είναι στοίβα και πώς υλοποιείται στον 8051; Πότε μπορούμε να αλλάζουμε το περιεχόμενο του δείκτη της στοίβας; 59. Τι διαφέρει η εντολή PUSH R0 από την PUSH AR0; 60. Το επόμενο πρόγραμμα παρουσιάζει το σφάλμα, να σώζει στη στοίβα μέσα από υπορουτίνα και να μην ανακαλεί. Ως αποτέλεσμα, όταν θα συναντηθεί η εντολή RET, να έχει χαλάσει η διεύθυνση επιστροφής. Δε θα επιστρέψει, λοιπόν, από την υπορουτίνα στο κυρίως πρόγραμμα, αλλά θα βρεθεί σε άλλη διεύθυνση της μνήμης προγράμματος. Σε ποια; JMP MAIN org 3454h MAIN: ACALL SUBR1 HALT: JMP HALT
SUBR1: MOV R0,#12h PUSH 0 ; Push χωρίς Pop στην υπορουτίνα NOP RET end 61. Από μία υπορουτίνα δε θέλουμε να επιστρέψουμε στο πρόγραμμα που την κάλεσε, αλλά στη διεύθυνση c:1234h. Πώς θα γίνει αυτό; 62. Υπάρχει έτοιμη μία υπορουτίνα DIV16U που διαιρεί τον απροσήμαστο 16μπιτο αριθμό των θέσεων 30h_31h με τον απροσήμαστο 16μπιτο αριθμό των θέσεων 32h_33h. Το πηλίκο φυλάγεται στις θέσεις 34h_35h και το υπόλοιπο στις θέσεις 36h_37h. Χρησιμοποιώντας την υπορουτίνα αυτή γράψτε ένα πρόγραμμα που να διαιρεί δια 1.000 τον απροσήμαστο 16μπιτο αριθμό που περιέχεται στους καταχωρητές R6_R7 και να φυλάει το αποτέλεσμα στους καταχωρητές R4_R5. 63. Γράψτε μία υπορουτίνα ADD_A_16 που να προσθέτει το περιεχόμενο του Α στις δύο θέσεις μνήμης που δείχνει ο R0. Στη συνέχεια γράψτε ένα πρόγραμμα που να καλεί την ADD_A_16 και να υπολογίζει στον Α, τον μέσο όρο των 32 αριθμών που περιέχονται στις θέσεις μνήμης από d:40h και μετά. 64. Δίνονται 5 ρουτίνες στις διευθύνσεις c:0200h, c:0240h, c:02e0h, c:0340h και c:0480h. Να γραφεί πρόγραμμα που να εκτελεί την κατάλληλη ρουτίνα ανάλογα με το περιεχόμενο του Α: αν Α=0 να εκτελείται η πρώτη ρουτίνα, αν Α=1, η δεύτερη κοκ.