| Home Pic in Greek Οδηγός χρήσης Pic Ο εσωτερικός κόσμος του PIC16F84A |
Ο εσωτερικός κόσμος του PIC16F84A
> Σε αυτές τις σελίδες θα ανακαλύψετε το εσωτερικό (πως λειτουργεί) του PIC 16f84A. Για περισσότερες πληροφορίες μπορείτε να ανατρέξετε στο Microchip Data sheet of PIC16F84A. . Για γρήγορη πλοήγηση αφού διαβάσετε αυτή την σελίδα με τα βασικά, επιλέξτε έναν από τους τέσσερις παρακάτω τομείς
> (1) Καταχωρητές (Registers) (2) Είσοδοι - Έξοδοι (I/O ports) (3) Χρονισμοί (Timer) (4) Προγραμματισμός (Programming)
> Pin Diagram - Τα ποδαράκια
> | OSC1/CLKIN | : | Είσοδος εξωτερικού Χρονισμού.
> OSC2/CLKOUT | : | Έξοδος χρονισμού (Για σύνδεση κρυστάλλου).
> MCLR(inv) | : | Είσοδος εξωτερικού μηδενισμού (Master clear - reset). Για εξωτερικό μηδενισμό πρέπει αυτό το ποδαράκι να πάρει παλμό λογικού 0 (Low) Είσοδος τάσης προγραμματισμού.
> RA0 - RA3 | : | Είσοδος ή Έξοδος (Bi-directional I/O port).
> RA4/T0CKI | : | Είσοδος ή Έξοδος (Bi-directional I/O port). Είσοδος εξωτερικών παλμών χρονισμού για τον χρονομετρητή TMR0 (timer/counter).
> RB0/INT | : | Είσοδος ή Έξοδος (Bi-directional I/O port). Είσοδος εξωτερικού παλμού διακοπής ροής προγράμματος (External interrupt).
> RB1 - RB7 | : | Είσοδος ή Έξοδος (Bi-directional I/O port).
> VSS | : | 0 Volt - Γείωση
> VDD | : | Θετική τάση τροφοδοσίας (+2.0V έως +5.5V)
PIC16F84A Block Diagram - Εσωτερικό διάγραμμα Κάνοντας κλικ επάνω σε κάθε κουτάκι μεταβαίνετε αυτόματα στην ανάλυση του.
Flash Program Memory - Μνήμη Flash (σβήνεται ηλεκτρικά)
| Στην μνήμη αποθηκεύεται το πρόγραμμα (κώδικας). Κάθε διεύθυνση απαρτίζεται από ψηφιολέξεις των 14άρων ψηφίων, και το σύνολό τους είναι 1,024 λέξεις (1K words). Η μνήμη είναι αμετάβλητου τύπου (Non Volatile), κρατά τα περιεχόμενα της αναλλοίωτα ακόμα και όταν δεν υπάρχει τάση τροφοδοσίας. Το περιεχόμενο της μπορεί να γραφτεί ξανά μέσο του προγραμματιστή για περίπου 1000 φορές.
Reset Vector - Διεύθυνση μηδενισμού ( Διεύθυνση μνήμης Ram 0000h )
| Όταν πραγματοποιηθεί μηδενισμός από, εφαρμογή τροφοδοσίας (Power on reset), υπερχείλιση επιτηρητή (Watchdog Timer), ή από οποιαδήποτε άλλη αιτία, ο μετρητής προγράμματος (Program counter - PC) παίρνει την τιμή 0000h και ξεκινά η εκτέλεση του προγράμματος από εκεί.
Peripheral Interrupt Vector - Διεύθυνση διακοπής ροής προγράμματος ( Διεύθυνση μνήμης Ram 0004h )
| Όταν πραγματοποιηθεί υπερχείλιση του χρονομετρητή (TMR0), ή κάποια διακοπή ροής προγράμματος (Interrupt) ο μετρητής προγράμματος παίρνει την τιμή 0004h και συνεχίζει την εκτέλεση του προγράμματος από εκεί.
Configuration word - Διαμόρφωση μικροεπεξεργαστή ( Διεύθυνση μνήμης Ram 2007h )
| Η διαμόρφωση του μικροεπεξεργαστή δηλώνεται σε αυτό το κομμάτι μνήμης, και μπορεί να γραφτεί μόνο μέσο της συσκευής προγραμματισμού (προγραμματιστή - Programer). Η χρήση του επιτηρητή Watchdog timer, ο τύπος του εξωτερικού κυκλώματος χρονισμού (Oscillator Selection), το κλείδωμα (Code Protect) κ.λ.π, δηλώνονται εδώ. Για περισσότερες πληροφορίες σχετικά με τον τρόπο δήλωσης της διαμόρφωσης (configuration word) κάντε κλικ στο: Ο εσωτερικός κόσμος του PIC16F84A.
RAM(Random Access Memory) File Registers - Καταχωρητές τυχαίας προσπέλασης
| Μνήμη τυχαίας προσπέλασης (RAM) ονομάζεται αυτή που για να μεταφερθείτε από την διεύθυνση 0Ah (10) στη διεύθυνση 0Fh (15) δεν χρειάζεται να περάσετε από τις ενδιάμεσες (0Bh - 11 ,0Ch - 12 ,0Dh - 13 ,0Eh - 14) αλλά μπορείτε κατευθείαν. Η μνήμη RAM του PIC16F84A χωρίζεται σε δύο (2) κομμάτια χωρητικότητας 80 ψηφιολέξεων (80 bytes(00h-4Fh)) το κάθε ένα. Οι πρώτες 12 ψηφιολέξεις (bytes(00h-0Bh)) ονομάζονται καταχωρητές ειδικών λειτουργιών (Special Function Registers) και βοηθούν στον έλεγχο της λειτουργίας του μικροεπεξεργαστή. Οι 68 επόμενες ψηφιολέξεις (bytes(0Ch-4Fh)) ονομάζονται καταχωρητές γενικής χρήσης (General Purpose Registers) και βοηθούν στο να αποθηκεύουν προσωρινά δεδομένα. Οι καταχωρητές ειδικών λειτουργιών (SFR), μπορούν να διαβάζονται και να γράφονται άπειρες φορές και μ την διακοπή της τάσης τροφοδοσίας χάνουν το περιεχόμενο τους.
EEPROM(Electrically Erasable Programmable Read Only Memory) - Ηλεκτρικά επαναπρογραμματιζόμενη μνήμη
| Η μνήμη αυτή κρατά το περιεχόμενο της και μετά την διακοπή της τάσης τροφοδοσίας. Μπορεί να ξαναγραφτεί μέσα από το πρόγραμμα και η χωρητικότητα της είναι 64 ψηφιολέξεις (64 bytes). Μπορεί να ξαναγραφτεί περίπου 1.000.000 φορές και χρησιμεύει για την αποθήκευση δεδομένων όπως κωδικοί αριθμοί, τιμές αρχικοποίησης, κ.λ.π. Η Microchip υποστηρίζει πώς τα δεδομένα στην μνήμη αυτή μπορούν να αποθηκευθούν αναλλοίωτα για περίπου 40 χρόνια.
SFR Registers - Καταχωρητές ειδικών λειτουργιών
| Η μνήμη τυχαίας προσπέλασης (RAM) χωρίζεται σε δύο κατηγορίες. Στην πρώτη ανήκουν οι Ειδικοί καταχωρητές (SFR) οι οποίοι ελέγχουν τις λειτουργίες του μικροεπεξεργαστή και στην δεύτερη οι καταχωρητές γενικής χρήσης (GPR). Την επιλογή της καθεμιάς κατηγορίας ελέγχουν ειδικά Bits που ονομάζονται 'Bank Selection Bits'. Αυτά τα Bits βρίσκονται στον καταχωρητή STATUS.
(GPR - General Purpose Registers) Καταχωρητές γενικής χρήσης | Οι Ειδικοί καταχωρητές και η λειτουργία τους (Συνοπτικά)
INDF | : | Καταχωρητής περιεχομένων FSR για έμμεση προσπέλαση της μνήμης
TMR0 | : | Μετρητής πραγματικού χρόνου (Timer)
PCL | : | Καταχωρητής αποθήκευσης των 8 λιγότερο σημαντικών bit του program counter
STATUS | : | Καταχωρητής αποθήκευσης αποτελεσμάτων πράξεων της ALU, του Reset & του Bank select
FSR | : | Καταχωρητής έμμεσης προσπέλασης της μνήμης (Indirect addressing pointer)
PORTA | : | Καταχωρητής δεδομένων Εισόδου/Εξόδου (DATA I/O) της PORTA
PORTB | : | Καταχωρητής δεδομένων Εισόδου/Εξόδου (DATA I/O) της PORTB
EEDATA | : | Καταχωρητής αποθήκευσης δεδομένων για ανάγνωση/γραφή στην EEPROM
EEADR | : | Καταχωρητής διευθύνσεις για προσπέλαση της μνήμης EEPROM
PCLATH | : | Καταχωρητής αποθήκευσης των 5 περισσότερο σημαντικών bit του program counter
INTCON | : | Καταχωρητής ελέγχου των Interrupt
OPTIN_REG | : | Καταχωρητής αποθήκευσης των ρυθμιστικών Bit για Interrupt, TMR0/WDT Prescaller
TRISA | : | Καταχωρητής θέσεως σαν Είσοδο ή Έξοδο της PORTA
TRISB | : | Καταχωρητής θέσεως σαν Είσοδο ή Έξοδο της PORTB
EECON1 | : | Καταχωρητής ελέγχου της EEPROM
EECON2 | : | Καταχωρητής ελέγχου και προστασίας της EEPROM από εγγραφή
Για περισσότερες πληροφορίες σχετικά με τους καταχωρητές ειδικών λειτουργιών (SFR) κάντε κλικ στο: Ο εσωτερικός κόσμος του PIC16F84A.
Program Counter - Μετρητής προγράμματος
| Ο μετρητής προγράμματος αποτελείται από 13 ψηφία (13 bits counter) και δείχνει την εντολή που πρέπει να εκτελέσει ο μικροεπεξεργαστής. Μόλις ο PIC εκτελεί μια εντολή ο μετρητής προγράμματος του δείχνει την επόμενη. Στην περίπτωση που εκτελεστεί η εντολή Πήγαινε (GOTO) ο μετρητής προγράμματος δείχνει σε ποια εντολή πρέπει να πάει ο PIC και να την εκτελέσει.
9 Level Stack - Καταχωρητής σωρού 8 επιπέδων
| Ο Καταχωρητής σωρού αποθηκεύει την διεύθυνση της εντολής (την επόμενη μετά από την εντολή Κάλεσε (CALL)) που πρέπει να εκτελεστεί από τον PIC μόλις τελειώσει η μια υπορουτίνα. Αν για παράδειγμα πρέπει ένα σύνολο διαδοχικών εντολών να εκτελεστεί περισσότερο από μια φορά, τότε συμφέρει το σύνολο αυτό να το κάνετε υπορουτίνα έτσι ώστε να μπορείτε μέσα από το πρόγραμμα να το καλείτε όσες φορές θέλετε. Όπως θα μάθετε στη συνέχεια του οδηγού χρήσης η τελευταία εντολή μίας υπορουτίνας είναι πάντοτε η Επέστρεψε (RETURN). Κάθε φορά που εκτελείται η εντολή Κάλεσε (CALL) η επόμενη στην σειρά εντολή αποθηκεύεται στον καταχωρητή σωρού (STACK), έτσι όταν τελειώσει η υπορουτίνα και εκτελεστεί η εντολή, επέστρεψε (RETURN), η διεύθυνση της εντολής που είχε αποθηκευτεί στον καταχωρητή σωρού αντιγράφεται στον μετρητή προγράμματος και το πρόγραμμα συνεχίζει να εκτελείται από εκεί που είχε μείνει πριν την εκτέλεση της εντολής κάλεσε (CALL). Ο PIC16f84A έχει καταχωρητή σωρού 8 επιπέδων που σημαίνει ότι έχει την δυνατότητα να αποθηκεύει 8 διαφορετικές διευθύνσεις επιστροφής από υπορουτίνες. Δηλαδή μπορείτε μέσα από μια υπορουτίνα να καλέσετε άλλες επτά !!! (7). Εάν ξεπεράσετε αυτό το όριο των εννέα επιπέδων τότε η διεύθυνση επιστροφής της επόμενης υπορουτίνας θα αντικαταστήσει την διεύθυνση που υπάρχει στο πρώτο επίπεδο, με αποτέλεσμα αν η πρώτη υπορουτίνα που καλέσατε δεν έχει επιστρέψει, να χαθεί η διεύθυνση επιστροφής της, και ο PIC επιστρέφοντας να εκτελέσει λάθος εντολή. Προσοχή !!! Ποτέ μην επιστρέφετε από υπορουτίνα με την εντολή Πήγαινε (GOTO), αλλά πάντοτε με την εντολή Επέστρεψε (RETURN).
Instruction Register - Καταχωρητής εντολής
| Η εντολή που δείχνει ο μετρητής προγράμματος (Program Counter) γράφεται σε αυτόν τον καταχωρητή.
Instruction Decode & Control - Αποκωδικοποίηση και έλεγχος εντολής
| Η εντολή που γράφτηκε στον καταχωρητή εντολής (Instruction Register) στο σημείο αυτό αναλύεται και εκτελείται.
Multiplexer and Arithmetic Logic Unit (ALU) - Μονάδα πολύπλεξης και αριθμητικών λογικών πράξεων
| Όλες οι αριθμητικές και λογικές πράξεις γίνονται εδώ. Αυτή μπορεί να πει κανείς πως είναι και η καρδιά του μικροεπεξεργαστή.
W Register - Καταχωρητής λειτουργίας (Working register)
| Αυτός ο καταχωρητής εμπλέκεται στις περισσότερες λειτουργίες που γίνονται μέσα από το πρόγραμμα. Αποθηκεύει προσωρινά τα αποτελέσματα των αριθμητικών - λογικών πράξεων, μέσο αυτού μεταφέρονται αριθμοί από και προς άλλους καταχωρητές, κ.λ.π.
STATUS Register - Καταχωρητής αποθήκευσης αποτελεσμάτων
| Σε αυτόν τον καταχωρητή αποθηκεύονται, τα αποτελέσματα της (ALU), η σημαία (time-out Flag), η ένδειξη για την επιλογή κομματιού μνήμης (bank), κ.λ.π. Για περισσότερες πληροφορίες σχετικά με τον καταχωρητή STATUS κάντε κλικ στο : Ο εσωτερικός κόσμος του PIC16F84A.
File Selection Register (FSR) - Καταχωρητής έμμεσης προσπέλασης της μνήμης (Indirect addressing pointer)
| Ο καταχωρητής FSR(File Select Register) χρησιμοποιείται όταν θέλετε να προσπελάσετε την μνήμη με έμμεσο τρόπο. Η προσπέλαση της μνήμης μπορεί να γίνει με δυο τρόπους, με άμεσο ή έμμεσο. Για την άμεση προσπέλαση αρκεί μία εντολή όπως η GOTO. Σε αυτή την περίπτωση οι διευθύνσεις μνήμης που μπορούν να προσπελαστούν είναι αυτές που βρίσκονται στο Bank0 δηλαδή από 0 (0000h) έως 127 (007Fh). Για προσπέλαση στο άλλο μισό της μνήμης Bank1 είναι απαραίτητο να αλλάξει κατάσταση το ψηφίο (Bit) RP0 του καταχωρητή STATUS. Επειδή ο FSR αποτελείται από οκτώ ψηφία (8 bits), (είναι οκτάμπιτος όπως συνηθίζουν να λένε οι ειδήμονες), μπορεί να προσπελαύνει κατευθείαν και τα δύο μισά της μνήμης, γιατί μέσα στην πληροφορία για την διεύθυνση μνήμης που μεταφέρει περιλαμβάνει και τo BANK0 ή BANK1.
Address Multiplexer - Πολυπλέκτης διευθύνσεων
| Ο πολυπλέκτης διευθύνσεων διαχειρίζεται τις λειτουργίες για άμεση ή έμμεση προσπέλαση της μνήμης.
EEDATA Register - Καταχωρητής δεδομένων EEPROM
| Ο καταχωρητής αυτός συγκρατεί τα δεδομένα για την μεταφορά τους από και προς την EEPROM.
EEADR Register - Καταχωρητής διευθύνσεων EEPROM
| Είναι ο καταχωρητής που δείχνει πια διεύθυνση μνήμης της EEPROM θα προσπελαστεί. Επειδή είναι οκτώ ψηφίων (8 bits - οκτάμπιτος) οι διευθύνσεις που μπορεί να προσπελάσει είναι από 0 (0000h) έως 255 (00FFh). Η μνήμη EEPROM του PIC16F84A είναι μόνο 64 ψηφιολέξεις (64 bytes) [0 (00h έως 64 (40h)]. Όταν γίνεται προσπέλαση της μνήμης μέσο του προγραμματιστή ο καταχωρητής διευθύνσεων EEADR παίρνει σαν πρώτη διεύθυνση την 2100h. Όταν αντίθετα γίνεται μέσα από το πρόγραμμα πρέπει απαραίτητα ο καταχωρητής ελέγχου EECON2 της EEPROM να φορτωθεί με την τιμή 85 (55h), και την τιμή 170 (AAh).
TMR0 Timer - Μετρητής πραγματικού χρόνου (χρονομετρητής)
| O PIC16F84A έχει ένα χρονομετρητή (TMR0) οκτώ ψηφίων (8 bits - οκτάμπιτος). Μετά από 256 μετρήσεις, αυτός υπερχειλίζει και το ψηφίο (T0IF bit) του καταχωρητή INTCON γίνεται 1. Μπορείτε να ρυθμίσετε τον PIC σε κάθε υπερχείλιση του χρονομετρητή (TMR0) να παράγει έναν παλμό διακοπής ροής προγράμματος (Interrupt). Για να το πετύχετε πρέπει να δηλώσετε με 1 το ψηφίο GIE του καταχωρητή INTCON. Έτσι κάθε φορά που υπερχειλίζει ο χρονομετρητής (TMR0) θα παράγεται και ένα Interrupt. Για περισσότερες πληροφορίες σχετικά με τον μετρητή πραγματικού χρόνου (TMR0) κάντε κλικ στο : Ο εσωτερικός κόσμος του PIC16F84A.
I/O Ports - Ποδαράκια εισόδου, εξόδου
| Ο PIC16f84A έχει 13 ποδαράκια εισόδου - εξόδου. Πια θα είναι είσοδοι και Πια έξοδοί δηλώνεται μέσα από το πρόγραμμα. Τα 13 αυτά ποδαράκια χωρίζονται σε δυο ομάδες. Στην μία ομάδα ανήκουν τα πέντε (5) ποδαράκια της πόρτας (θήρας εισόδου - εξόδου) PORTA, και στην άλλη ομάδα ανήκουν τα οκτώ (8) ποδαράκια της πόρτας PORTB. Για περισσότερες πληροφορίες σχετικά με τις πόρτες (Θήρες εισόδου - εξόδου - I/O ports) κάντε κλικ στο : Ο εσωτερικός κόσμος του PIC16F84A.
Timing Generation - Κύκλωμα χρονισμού
| Αυτό το κύκλωμα δημιουργεί τους απαραίτητους παλμούς χρονισμού για να λειτουργήσει ο μικροεπεξεργαστής. Συνήθως θα τον δείτε με κύκλωμα πυκνωτή - αντίσταση (R/C), ή με κρύσταλλο και δύο κεραμικούς πυκνωτές (Quartz), ή με ένα πακτωμένο μικροσκοπικό κύκλωμα κρυστάλλου - πυκνωτών το λεγόμενο Resonator. Ο PIC16F84A εκτελεί μία εντολή (ένας κύκλος μηχανής) κάθε τέσσερις (4) παλμούς χρονισμού, χρησιμοποιώντας την αρχιτεκτονική pipeline. Εκτός από κάποιες εντολές όπως η Πήγαινε (GOTO) που για να εκτελεστούν χρειάζονται 2 κύκλους μηχανής. Για παράδειγμα, με κρύσταλλο 20MHz (20.000.000 παλμούς ανά δευτερόλεπτο) ο κύκλος μηχανής είναι ίσος με 4 παλμούς χρονισμού / (20MHz) = 50 νανοσεκόντ (nanosecond) ή 0,00000005 δευτερόλεπτα (Second). Συνεπώς καταλαβαίνετε πως με αυτό το χρονισμό ο μικροεπεξεργαστής μπορεί να εκτελεί 5,000,000 εντολές σε κάθε δευτερόλεπτο.
Initialization circuits - Κυκλώματα εκκίνησης & λειτουργίες ασφάλειας
| The PIC16F84A has the various initialization circuits.
POWER ON Timer | : | Αυτός ο χρονομετρητής δημιουργεί καθυστέρηση στην εκκίνηση του μικροεπεξεργαστή κατά την εφαρμογή της τάσης τροφοδοσίας, ώστε η τελευταία να μπορέσει να σταθεροποιηθεί.
OSC StartTimer | : | Αυτός ο χρονομετρητής δημιουργεί καθυστέρηση στην εκκίνηση του μικροεπεξεργαστή έτσι ώστε το κύκλωμα χρονισμού να μπορέσει να σταθεροποιηθεί.
POW ON Reset | : | Αυτή η λειτουργία μηδενίζει τον μικροεπεξεργαστή κατά την εκκίνηση.
Watchdog Timer | : | Αυτός ο χρονομετρητής ελέγχει την καλή λειτουργία του προγράμματος. Πρέπει να μηδενίζεται ανά τακτά χρονικά διαστήματα μέσα από το πρόγραμμα, ενώ σε περίπτωση που το πρόγραμμα σταματήσει να λειτουργεί (κολλήσει) αυτός υπερχειλίζει και μηδενίζει τον μικροεπεξεργαστή, αναγκάζει δηλαδή τον PIC να ξεκινήσει την εκτέλεση του προγράμματος από την αρχή.