Η μνήμη του 16F84A χωρίζεται σε δύο κομμάτια.
Αυτά είναι, η μνήμη αποθήκευσης προγράμματος και η μνήμη αποθήκευσης
δεδομένων. Καθένα κομμάτι χρησιμοποιεί δικό του ξεχωριστό δίαυλο με
αποτέλεσμα ο Pic να μπορεί να προσπελαύνει και τα δύο σε ένα κύκλο
μηχανής. Η μνήμη αποθήκευσης δεδομένων με την σειρά της χωρίζεται και αυτή
σε δύο κατηγορίες. Στην πρώτη ανήκουν οι Ειδικοί καταχωρητές οι οποίοι
ελέγχουν τις λειτουργίες του μικροεπεξεργαστή και στην δεύτερη οι
καταχωρητές γενικής χρήσης. Την επιλογή της καθεμιάς κατηγορίας ελέγχουν
ειδικά Bits που ονομάζονται 'Bank Selection Bits'. Αυτά τα Bits
βρίσκονται στον καταχωρητή STATUS. Η μνήμη μπορεί να προσπελαστεί
είτε άμεσα με την χρήση της διεύθυνσης της, είτε έμμεσα με την χρήση του
καταχωρητή File Select Register (FSR). Η μνήμη των ειδικών
καταχωρητών BANK0 επιλέγεται όταν το Bit 5 (RP0) του
STATUS είναι μηδέν (0). Κάθε σειρά εκτείνεται έως το 17Fh
(128 Bytes), οι πρώτες δώδεκα διευθύνσεις κάθε σειράς είναι δεσμευμένες
για τους ειδικούς καταχωρητές ενώ οι υπόλοιπες χρησιμοποιούνται για τους
καταχωρητές γενικής χρήσης, οι οποίοι έχουν εύρος 8 Bit και μπορούν
να προσπελαστούν άμεσα ή έμμεσα. Η μνήμη αποθήκευσης δεδομένων
περιλαμβάνει και τη μνήμη EEPROM (Electrical Eraseble Programable Rom), το
τμήμα αυτό προσπελαύνεται έμμεσα μέσο ενός δείκτη (Pointer) ο οποίος
υποδεικνύει την διεύθυνση της EEPROM που πρόκειται να εγγραφεί ή να
διαβαστεί. Τα 64 Bytes της EEPROM εκτείνονται στις διευθύνσεις 0h-3Fh.
_files/pic2_2.gif)
GPR=
[General Purpose Registers
Καταχωρητές γενικής χρήσης |
Οι Ειδικοί καταχωρητές και η
λειτουργία τους (Συνοπτικά) |
_files/blank_1.gif) |
| 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 |
| OPTION_REG |
: |
Καταχωρητής αποθήκευσης των
ρυθμιστικών Bit για Interrupt, TMR0/WDT Prescaller |
| TRISA |
: |
Καταχωρητής θέσεως σαν Είσοδο ή
Έξοδο της PORTA |
| TRISB |
: |
Καταχωρητής θέσεως σαν Είσοδο ή
Έξοδο της PORTB |
| EECON1 |
: |
Καταχωρητής ελέγχου της EEPROM |
| EECON2 |
: |
Καταχωρητής ελέγχου και
προστασίας της EEPROM από εγγραφή |
Το χρώμα των INDF και EECON2 είναι Μοβ διότι η λειτουργία
τους είναι ιδιαίτερη.
_files/blank_1.gif)
SFR(Καταχωρητές ειδικών λειτουργιών -
Special Function Register)
Οι πρώτες δώδεκα
διευθύνσεις κάθε σειράς είναι δεσμευμένες για τους ειδικούς καταχωρητές.
Αυτή η ομάδα των ειδικών καταχωρητών είναι πού σημαντική για την
λειτουργία του μικροεπεξεργαστή. Παρακάτω φαίνονται αναλυτικότερα.
STATUS Register -
Καταχωρητής αποθήκευσης αποτελεσμάτων ( Διεύθυνση μνήμης RAM
03h,83h ) |
_files/blank_1.gif) |
_files/pic2_1_1.gif) |
R = |
Bit Ανάγνωσης |
| W = |
Bit Εγγραφής |
| -n = |
Κατάσταση μετά από εκκίνηση (Power
On Reset) |
| Bit6,7 = |
Δίχως σημασία bit | |
|
Bit7: IRP |
Register Bank Select bit - Bit επιλογής
σειράς μνήμης (Χρήση για έμμεση προσπέλαση)
Το IRP bit δεν χρησιμοποιείται στον PIC16F84A.
Πρέπει να διατηρείται μηδέν (0). |
|
Bit6,5: RP1,RP0 |
Register Bank Select bit - Bit επιλογής
σειράς μνήμης (Χρήση για άμεση προσπέλαση)
Μόνο το bit RP0 χρησιμοποιείται στον PIC16F84A.
Το
'0' σημαίνει Bank0, ενώ το '1'
σημαίνει Bank1. Το RP1 Πρέπει να διατηρείται μηδέν (0). |
|
Bit4: TO(inv) |
Time-out bit - Bit ένδειξης κατάστασης
'Εκτός χρόνου'
| Γίνεται 1 μετά από |
Εκκίνηση (power-on),Εντολή
μηδενισμού (CLRWDT), ή εντολή ελαχιστοποίησης κατανάλωσης
ενέργειας (SLEEP) |
| Γίνεται 0 μετά από |
Μηδενισμό προερχόμενο από υπερχείλιση του
Watchdog timer | |
|
Bit3: PD(inv) |
Power-down bit - Bit ένδειξης
ελαχιστοποίησης κατανάλωσης ενέργειας
| Γίνεται 1 μετά
από |
Εκκίνηση (power-on) ή από
την Εντολή μηδενισμού (CLRWDT) |
| Γίνεται 0 μετά
από |
Την εντολή ελαχιστοποίησης
κατανάλωσης ενέργειας (SLEEP) | |
|
Bit2: Z |
Zero bit - Bit ένδειξης μηδενικού
αποτελέσματος
Γίνεται 1
όταν
_files/blank_30x2.gif) |
Το αποτέλεσμα μιας
αριθμητικής ή λογικής πράξης είναι μηδέν (0) |
| Γίνεται 0
όταν |
Το αποτέλεσμα μιας αριθμητικής ή
λογικής πράξης Δεν είναι
μηδέν (0) | |
|
Bit1: DC |
Digit carry/borrow(invert) bit - Bit
ψηφιακού κρατούμενου (για τις εντολές ADDWF και ADDLW)
| Γίνεται 1 όταν |
Στο αποτέλεσμα της πράξης
υπάρχει ψηφιακό κρατούμενο προερχόμενο από τα 4 λιγότερο
σημαντικά bit (Least significant bit3 - bit0) |
| Γίνεται 0 όταν |
Στο αποτέλεσμα της πράξης Δεν υπάρχει ψηφιακό κρατούμενο
προερχόμενο από τα 4 λιγότερο σημαντικά bit (Least significant
bit3 - bit0) | |
|
Bit0: C |
Carry/borrow(invert) bit - Bit
κρατούμενου (για τις εντολές ADDWF και ADDLW)
| Γίνεται 1
όταν |
Στο αποτέλεσμα της
πράξης υπάρχει κρατούμενο προερχόμενο από το περισσότερο
σημαντικό bit (Most significant Bit7) |
| Γίνεται 0
όταν |
Στο αποτέλεσμα της πράξης Δεν υπάρχει ψηφιακό κρατούμενο
προερχόμενο από το περισσότερο σημαντικό bit (Most significant
Bit7) | |
OPTION_REG Register -
Καταχωρητής επιλογών ελέγχου περιφερειακών ( Διεύθυνση μνήμης RAM 81h
) |
_files/blank_1.gif) |
_files/pic2_1_2.gif) |
R = |
Bit Ανάγνωσης |
| W = |
Bit Εγγραφής |
| -n = |
Κατάσταση μετά από εκκίνηση (Power
On Reset) | |
|
Bit7: RBPU(inv) |
PORTB Pull-up Enable bit - Bit
ενεργοποίησης εσωτερικών αντιστάσεων Pull-up
| Δηλώστε 1
για να |
Απενεργοποιήσετε τις
pull-up της PORTB |
| Δηλώστε 0
για να |
Ενεργοποιήσετε τις pull-up της
PORTB | |
|
Bit6: INTEDG |
Interrupt Edge Select bit - Bit
επιλογής μετώπου παλμού διακοπής
| Δηλώστε 1
για |
Ανερχόμενο μέτωπο παλμού
στο ποδαράκι RB0/INT |
| Δηλώστε 0
για |
Κατερχόμενο μέτωπο παλμού στο
ποδαράκι RB0/INT | |
|
Bit5: T0CS |
TMR0 Clock Source Select bit - Bit
επιλογής πηγής του σήματος χρονισμού
| Δηλώστε 1
για |
Εξωτερικό σήμα χρονισμού
στο ποδαράκι RA4/T0CKI |
| Δηλώστε 0
για |
Εσωτερικό σήμα χρονισμού (CLKOUT) | |
|
Bit4: TOSE |
TMR0 Source Edge Select bit - Bit
επιλογής μετώπου παλμού χρονισμού
| Δηλώστε 1
για |
Κατερχόμενο (High to
Low) μέτωπο παλμού στο ποδαράκι RA4/T0CKI |
| Δηλώστε 0
για |
Ανερχόμενο (Low to High) μέτωπο
παλμού στο ποδαράκι RA4/T0CKI | |
|
Bit3: PSA |
Prescaler Assignment bit - Bit
επιλογής τιμής προδιαιρέτη (Prescaller)
| Δηλώστε 1
για |
χρήση του Prescaler με
τον επιτηρητή WDT |
| Δηλώστε 0
για |
χρήση του Prescaler με τον μετρητή
πραγματικού χρόνου TMR0 | |
|
Bit2-0: PS2-0 |
Prescaler Rate Select bits - Bits
επιλογής τιμής προδιαιρέτη Prescaller)
| PS2 |
PS1 |
PS0 |
TMR0 |
WDT |
| 0 |
0 |
0 |
1:2 |
1:1 |
| 0 |
0 |
1 |
1:4 |
1:2 |
| 0 |
1 |
0 |
1:8 |
1:4 |
| 0 |
1 |
1 |
1:16 |
1:8 |
| 1 |
0 |
0 |
1:32 |
1:16 |
| 1 |
0 |
1 |
1:64 |
1:32 |
| 1 |
1 |
0 |
1:128 |
1:64 |
| 1 |
1 |
1 |
1:256 |
1:128 | |
INTCON Register -
Καταχωρητής ελέγχου παλμού διακοπής (Interrupt) ( Διεύθυνση μνήμης RAM
0Bh, 8Bh ) |
_files/blank_1.gif) |
_files/pic2_1_3.gif) |
R = |
Bit Ανάγνωσης |
| W = |
Bit Εγγραφής |
| -n = |
Κατάσταση μετά από εκκίνηση (Power
On Reset) | |
|
Bit7: GIE |
Global Interrupt Enable bit - Bit
ενεργοποίησης γενικού παλμού διακοπής (GLobal Interrupt)
| Δηλώστε 1
για να |
Ενεργοποιήσετε όλα τα
interrupts |
| Δηλώστε 0
για να |
Απενεργοποιήσετε όλα τα interrupts | |
|
Bit6: EEIE |
EEPROM Write Complete Interrupt Enable
bit - Bit ενεργοποίησης παλμού διακοπής, μετά από ολοκλήρωση εγγραφής
της EEPROM
| Δηλώστε 1 για να |
Ενεργοποιήσετε το Interrupt μετά από
ολοκλήρωση εγγραφής της EEPROM |
| Δηλώστε 0 για να |
Απενεργοποιήσετε το Interrupt μετά από
ολοκλήρωση εγγραφής της EEPROM | |
|
Bit5: T0IE |
TMR0 Overflow Interrupt Enable bit -
Bit ενεργοποίησης παλμού διακοπής, μετά από υπερχείλιση του μετρητή
πραγματικού χρόνου (TMR0)
| Δηλώστε 1 για να |
Ενεργοποιήσετε το Interrupt μετά από
υπερχείλιση του TMR0 |
| Δηλώστε 0 για να |
Απενεργοποιήσετε το Interrupt μετά από
υπερχείλιση του TMR0 | |
|
Bit4: INTE |
RB0/INT Interrupt Enable bit - Bit
ενεργοποίησης παλμού διακοπής από το ποδαράκι RB0/INT
| Δηλώστε 1 για να |
Ενεργοποιήσετε το Interrupt από το
RB0/INT |
| Δηλώστε 0 για να |
Απενεργοποιήσετε το Interrupt από το RB0/INT | |
|
Bit3: RBIE |
RB Port Change Interrupt Enable bit -
Bit ενεργοποίησης παλμού διακοπής, μετά από αλλαγή κατάστασης της RB
| Δηλώστε 1 για να |
Ενεργοποιήσετε το Interrupt μετά από
αλλαγή της RB |
| Δηλώστε 0 για να |
Απενεργοποιήσετε το Interrupt μετά από αλλαγή
της RB | |
|
Bit2: T0IF |
TMR0 Overflow Interrupt Flag bit - Bit
ένδειξης (" σημαίας " Flag) υπερχείλισης του TMR0
| Γίνεται 1 όταν |
Το TMR0 υπερχειλίσει , (Πρέπει να
μηδενιστεί με εντολή μέσα από το πρόγραμμα) |
| Γίνεται 0 όταν |
Το TMR0 δεν έχει υπερχειλίσει | |
|
Bit1: INTF |
RB0/INT Interrupt Flag bit- Bit
ένδειξης (" σημαίας " Flag) παλμού διακοπής (Interrupt) στο
ποδαράκι RB0/INT
| Γίνεται 1 όταν |
Υπάρξει παλμός διακοπής στο ποδαράκι
RB0/INT (Πρέπει να μηδενιστεί με εντολή μέσα από το πρόγραμμα) |
| Γίνεται 0 όταν |
Δεν υπάρχει παλμός διακοπής στο ποδαράκι
RB0/INT | |
|
Bit0: RBIF |
RB Port Change Interrupt Flag bit -
Bit ένδειξης (" σημαίας " Flag) παλμού διακοπής (Interrupt) στην
RB
| Γίνεται 1 όταν |
Τουλάχιστον ένα από τα RB7:RB4
ποδαράκια αλλάξει κατάσταση (Πρέπει να μηδενιστεί με εντολή μέσα
από το πρόγραμμα) |
| Γίνεται 0 όταν |
Κανένα από τα RB7:RB4 ποδαράκια
δεν έχει αλλάξει κατάσταση | |
INDF Register - Καταχωρητής
έμμεσης διευθυνσιοδότησης ( Διεύθυνση μνήμης RAM 00h ) |
_files/blank_1.gif) |
Αυτός ο καταχωρητής χρησιμοποιείται για
την ανάγνωση και εγγραφή της μνήμης με έμμεσο τρόπο.
Όταν γίνεται ανάγνωση μιας διεύθυνσης μνήμης με άμεσο τρόπο, η
διεύθυνση αυτή αναφέρεται μετά από την εντολή.
Στο παρακάτω παράδειγμα χρησιμοποιείται ο άμεσος
τρόπος.
movwf 30h Σε αυτή την περίπτωση η διεύθυνση (30h) καθορίζεται μετά
την εντολή και το HEX FORMAT γίνεται: 00 0000 1011 0000 . Με κόκκινο απεικονίζεται η εντολή movwf, με
μπλε (ένα bit) απεικονίζεται η εντολή
εγγραφής του καταχωρητή (File register) και με
πράσινο απεικονίζεται η διεύθυνση της μνήμης.
Με τον παραπάνω τρόπο για να γράψετε ή να διαβάσετε
διευθύνσεις μνήμης που βρίσκονται σε σειρά θα πρέπει η εντολή να
επαναλαμβάνεται τόσες φορές όσες και οι διευθύνσεις που θέλετε να
προσπελάσετε. Για εγγραφή ή ανάγνωση τέτοιων διευθύνσεων μνήμης ο
έμμεσος τρόπος είναι ο πιο εύχρηστος.
Για
να γράψετε ή να διαβάσετε μια διεύθυνση μνήμης με έμμεσο τρόπο, απλά
γράψτε την στον καταχωρητή FSR. Το περιεχόμενο της μνήμης η
οποία υποδεικνύεται από τον FSR μπορεί να γραφτεί ή διαβαστεί με την
χρήση του καταχωρητή INDF.
Δείτε το παρακάτω παράδειγμα:
Ας υποθέσουμε πως ο καταχωρητής PORTA (05h) έχει την
δυαδική τιμή b'00010000' και ο καταχωρητής PORTB (06h) έχει την
δυαδική τιμή b'00001010' γράψτε τον PORTA στον FSR. Διαβάστε τώρα
τον INDF και θα δείτε πως το περιεχόμενο του είναι b'00010000'.
Αυξήστε το περιεχόμενο του FSR κατά ένα (από 05h σε 06h) και
διαβάστε τον INDF, παρατηρήστε πως το περιεχόμενο του είναι
b'00001010'.
|
_files/pic2_1_6e.gif) |
DATA EEPROM MEMORY - Μνήμη
EEPROM |
| |
Η μνήμη EEPROM
μπορεί να γραφτεί και να διαβαστεί όπως ακριβώς και η μνήμη RAM.
Πρόσβαση στην μνήμη αυτή μπορείτε να έχετε με έμμεσο τρόπο
χρησιμοποιώντας τους τέσσερις ειδικούς καταχωρητές που έχουν
προβλεφθεί από την κατασκευάστρια εταιρεία για το σκοπό αυτό. Στον
παρακάτω πίνακα φαίνονται αναλυτικά οι καταχωρητές και τα Bit. |
|
ΚΑΤΑΧΩΡΗΤΕΣ ΚΑΙ BITS ΤΗΣ ΜΝΗΜΗΣ EEPROM |
| Διεύθυνση |
Όνομα |
BIT 7 |
BIT 6 |
BIT 5 |
BIT 4 |
BIT 3 |
BIT 2 |
BIT 1 |
BIT 0 |
| 08h |
EEDATA |
Καταχωρητής
συγκράτησης δεδομένων για την μεταφορά τους από και προς την
EEPROM |
| 09h |
EEADR |
Καταχωρητής διεύθυνσης
για την προσπέλαση της EEPROM |
| 88h |
EECON1 |
- |
- |
- |
EEIF |
WRERR |
WREN |
WR |
RD |
| 89h |
EECON2 |
Καταχωρητής ελέγχου
της EEPROM |
| Ο καταχωρητής EEDATA συγκρατεί τα 8 Bit
δεδομένων που πρόκειται να γραφτούν ή διαβάστηκαν από την EEPROM. O
EEADR με την σειρά του συγκρατεί την διεύθυνση της μνήμης EEPROM που
πρόκειται να γραφτεί ή διαβαστεί. Οι PIC 16F84A έχουν μνήμη EEPROM
εξηντατεσσάρων Byte (64 Byte) η οποία εκτείνεται από 0h έως 3Fh. Πριν
την εγγραφή ενός Byte σε μια διεύθυνση της EEPROM, σβήνεται ηλεκτρικά
αυτή ώστε να είναι κενή. Ο χρόνος εγγραφής ελέγχεται από ένα
ενσωματωμένο στον μικροεπεξεργαστή χρονόμετρο. Όταν ο
μικροεπεξεργαστής προστατευτεί από αντιγραφή του κώδικα, μπορεί να
γράφει ή να διαβάζει από την EEPROM κανονικά. |
|
EECON1 Register -
Καταχωρητής ελέγχου EEPROM ( Διεύθυνση μνήμης RAM 88h ) |
_files/blank_1.gif) |
_files/pic2_1_4.gif) |
R = |
Bit Ανάγνωσης |
| W = |
Bit Εγγραφής |
| S = |
Bit με δυνατότητα ρύθμισης |
| U = |
Δίχως σημασία bit |
| -n = |
Κατάσταση μετά από εκκίνηση (Power
On Reset) | |
|
Bit7-5:
|
Διαβάζεται σαν μηδέν "0"
Δίχως σημασία |
|
Bit4: EEIF |
EEPROM Write Operation Interrupt Flag
bit - Bit ένδειξης (" σημαίας " Flag) ολοκλήρωσης εγγραφής διεύθυνσης
της EEPROM
| Γίνεται 1 όταν |
Η διαδικασία εγγραφής
ολοκληρωθεί (Πρέπει να μηδενιστεί με εντολή μέσα από το
πρόγραμμα) |
| Γίνεται 0 όταν |
Η διαδικασία εγγραφής δεν έχει ολοκληρωθεί ή δεν έχει
αρχίσει ακόμα. | |
|
Bit3: WRERR |
EEPROM Error Flag bit - Bit ένδειξης ("
σημαίας " Flag) Λάθους στην EEPROM
| Γίνεται 1 όταν |
Η διαδικασία εγγραφής τερματιστεί
πρόωρα |
| Γίνεται 0 όταν |
Η διαδικασία εγγραφής ολοκληρωθεί | |
|
Bit2: WREN |
EEPROM Write Enable bit - Bit
ενεργοποίησης εγγραφής στην EEPROM
| Δηλώστε 1 για να |
Ενεργοποιήσετε την εγγραφή στην
EEPROM |
| Δηλώστε 0 για να |
Απενεργοποιήσετε την εγγραφή στην EEPROM | |
|
Bit1: WR |
EEPROM Write Control bit - Bit ελέγχου
εγγραφής της EEPROM
|
Δηλώστε 1 για να |
Ξεκινήσετε ένα κύκλο
εγγραφής (Το bit μηδενίζεται αυτόματα μετά την ολοκλήρωση του
κύκλου εγγραφής. Το WR bit μπορείτε μόνο να το ενεργοποιήσετε
και όχι να το μηδενίσετε μέσα από το πρόγραμμα. |
|
Γίνεται 0 όταν |
Ο κύκλος εγγραφής της EEPROM
ολοκληρωθεί. | |
|
Bit0: RD |
EEPROM Read Control bit - Bit ελέγχου
ανάγνωσης της EEPROM
|
Δηλώστε 1 για να |
Ξεκινήσετε ένα κύκλο
ανάγνωσης (Το bit μηδενίζεται αυτόματα μετά την ολοκλήρωση του
κύκλου ανάγνωσης. Το RD bit μπορείτε μόνο να το ενεργοποιήσετε
και όχι να το μηδενίσετε μέσα από το πρόγραμμα. |
| Δηλώστε 0 για
να |
Μην πραγματοποιηθεί κύκλος ανάγνωσης
στην EEPROM | |
EECON2 Register -
Καταχωρητής ελέγχου EEPROM ( Διεύθυνση μνήμης RAM 89h ) |
_files/blank_1.gif) |
Για να γράψετε δεδομένα στην EEPROM πρέπει
να φορτώσετε στον καταχωρητή EECON2 πρώτα την τιμή 85 (55h) και μετά
την τιμή 170 (AAh). Τα δεδομένα που γράφονται
στην μνήμη EEPROM δεν χάνονται μετά την διακοπή της τάσης
τροφοδοσίας. |
|
| |
Παράδειγμα ανάγνωσης της
EEPROM |
|
bcf status,rp0
;Μετάβαση στο Bank 0 movlw config_addr
;Φόρτωσε στον W την επιθυμητή διεύθυνση
movwf eeadr
;Φόρτωσε το περιεχόμενο του W στον καταχωρητή EEADR
bsf status,rp0
;Μετάβαση στο Bank 1 bsf eecon1,rd
;Εκκίνηση κύκλου ανάγνωσης bcf status,rp0
;Μετάβαση στο Bank 0 movf eedata,w
;Φόρτωσε το περιεχόμενο του καταχωρητή EEDATA στο W |
|
| Παράδειγμα εγγραφής της
EEPROM |
Για να γράψετε σε μια διεύθυνση
πρέπει να την γράψετε στον καταχωρητή EEADR και το προς εγγραφή Byte
στον καταχωρητή EEDATA.
bsf status,rp0
;Μετάβαση στο Bank 1 bcf intcon,gie
;Απενεργοποίηση όλων των interrupts bsf
eecon1,wren ;Εκκίνηση κύκλου
εγγραφής movlw 55h
;Φόρτωσε στον W την τιμή 55h
movwf eecon2
;Φόρτωσε το περιεχόμενο του W στον καταχωρητή eecon2 movlw AAh
;Φόρτωσε στον W την τιμή AAh movwf eecon2
;Φόρτωσε το περιεχόμενο του W στον καταχωρητή eecon2 bsf eecon1,wr
;Γράψε στην EEPROM bsf intcon,gie
;Eνεργοποίηση όλων των interrupts
Προσοχή θα πρέπει να δώσετε σε αυτό το σημείο, διότι
η διαδικασία εγγραφής δεν θα ξεκινήσει αν δεν ακολουθήσετε πιστά τον
κώδικα που είναι γραμμένος με κόκκινο χρώμα.
(Απενεργοποίηση των interrupt, Φόρτωμα του EECON2 με την τιμή 55h,
και την τιμή AAh, δήλωση του WR Bit και του WREN Bit σε 1).
Το WREN Bit του καταχωρητή EECON1 πάντα πρέπει να
δηλώνεται ως 0, εκτός των περιπτώσεων που θέλετε να γράψετε
την EEPROM, με αυτό τον τρόπο διασφαλίζετε πως δεν πρόκειται τα
δεδομένα της EEPROM να αλλάξουν από λάθος.
Το Bit WREN δεν
μηδενίζεται αυτόματα από τον μικροεπεξεργαστή !!!
Μετά την ολοκλήρωση της εγγραφής, ο
μικροεπεξεργαστής μηδενίζει αυτόματα το WR Bit και το EEIF Bit
γίνεται 1. από αυτή την στιγμή μπορείτε να ενεργοποιήσετε αν
θέλετε ξανά τα interrupts. To EEIF Bit πρέπει να το μηδενίσετε εσείς
μέσα από το πρόγραμμα. |
|
| Επαλήθευση εγγραφής της
EEPROM |
| Κάποιες εφαρμογές απαιτούν για
λόγους ασφαλείας τα δεδομένα που γράφονται στην EEPROM να
επαληθεύονται. Το πρόβλημα που μπορεί να υπάρξει από λανθασμένη
εγγραφή είναι ένα Bit που γράφτηκε σαν 0 να διαβάζεται σαν 1. |
bcf status,rp0
;Μετάβαση στο Bank 0 :
: : : :
;Μπορείτε εδώ να παρεμβάλετε δικό σας κώδικα movf eedata,w
;Φόρτωσε το περιεχόμενο του καταχωρητή eedata στον W
(ΠΡΟΣΟΧΗ!! πρέπει να βρίσκεστε στο Bank 0) bsf
status,rp0 ;Μετάβαση στο Bank 1
bsf eecon1,rd
;Διάβασε bcf
status,rp0 ;Μετάβαση στο Bank 0
subwf eedata,w ;Αφαίρεσε το
περιεχόμενο του καταχωρητή EEDATA από το περιεχόμενο του W
btsfss status,z ;αν το
αποτέλεσμα είναι 0 (STATUS Bit2 = 1) η εγγραφή έγινε σωστά,
αν υπάρχει υπόλοιπο (STATUS Bit2 = 0) τότε υπάρχει
σφάλμα στην εγγραφή. |
|
Configuration Word - Διαμόρφωση
Μικροεπεξεργαστή( Διεύθυνση μνήμης RAM 2007h )
_files/pic2_1_5.gif) |
| R = |
Bit Ανάγνωσης |
| P = |
Προγραμματιζόμενο Bit |
| -n = |
Κατάσταση μετά από εκκίνηση (Power
On Reset) |
| u = |
Αμετάβλητο Bit | |
Bit13-4: CP |
Code Protection
bit - Bit Προστασίας κώδικα από αντιγραφή
|
Δηλώστε 1 για να |
Απενεργοποιήσετε την προστασία
αντιγραφής |
| Δηλώστε 0 για
να |
Ενεργοποιήσετε την προστασία αντιγραφής (Όλες
οι θέσεις μνήμης προστατεύονται) |
_files/blank_30x2.gif) |
Ο προστατευμένος PIC όταν διαβάζεται
από τη συσκευή προγραμματισμού μοιάζει με απρογραμμάτιστο. | |
Bit3: PWRTE(inv) |
Power-up Timer Enable bit
- Bit ενεργοποίησης χρονομέτρου εκκίνησης
|
Δηλώστε 1 για να |
Απενεργοποιήσετε το χρονόμετρο |
| Δηλώστε 0 για
να |
Ενεργοποιήσετε το
χρονόμετρο |
|
_files/blank_1.gif) |
Το χρονόμετρο εκκίνησης του PIC
δημιουργεί μια καθυστέρηση 72 ms μιλισεκόντ για να εξασφαλιστεί
ο μηδενισμός (Reset) του μικροεπεξεργαστή μετά από την εφαρμογή
σε αυτόν της τάσης τροφοδοσίας. | |
Bit2: WDTE |
Watchdog Timer(WDT) Enable
bit - Bit ενεργοποίησης επιτηρητή ροής προγράμματος (Watchdog)
| Δηλώστε 1 για να |
Ενεργοποιήσετε τον επιτηρητή WDT |
| Δηλώστε 0 για να |
Απενεργοποιήσετε τον επιτηρητή WDT |
|
|
Ο επιτηρητής ροής
προγράμματος υπερχειλίζει κάθε 18ms μιλισεκόντ και μηδενίζει τον
μικροεπεξεργαστή. Με την χρήση του προδιαιρέτη (prescaler) και
με μέγιστη τιμή 1 πρός 128 (1:128) μπορείτε να πετύχετε
χρόνους υπερχείλισης 2,3 δευτερολέπτων. Η εντολή "clrwdt"
μηδενίζει τον επιτηρητή και τον εμποδίζει να μηδενίσει με την
σειρά του τον μικροεπεξεργαστή. Ο επιτηρητής χρησιμοποιείται και
σαν ασφάλεια σε όποια εφαρμογή ο μικροεπεξεργαστής δεν πρέπει να
πέσει σε προγραμματιστικό αδιέξοδο και "κολλήσει". Άν λοιπόν
κολλήσει, ο επιτηρητής μετά την πάροδο των 18 ms αφού δεν θα
μπορεί να μηδενιστεί από το πρόγραμμα θα μηδενίσει τον PIC και
θα τον κάνει να τρέξει το πρόγραμμα από την αρχή. | |
Bit1-0: FOSC1 FOSC0 |
Oscillator Selection bits
- Bit επιλογής ταλαντωτή
| FOSC1 |
FOSC0 |
Είδος ταλαντωτή |
Συχνότητα |
| 1 |
1 |
Δικτύωμα Αντίστασης/Πυκνωτή |
Λιγότερο από 1MHz |
| 1 |
0 |
Υψηλής ταχύτητας κρύσταλλος |
4MHz έως 20MHz |
| 0 |
1 |
Κρύσταλλος ή Resonator |
Λιγότερο ή ίσο με 4MHz |
| 0 |
0 |
Κρύσταλλος χαμηλής ισχύος |
Λιγότερο από 200KHz | | |