Home Pic in Greek Οδηγός χρήσης Pic Εσωτερικό 16F84A [1] [2] [3] [4]


 

Ο εσωτερικός κόσμος του PIC16F84A(1)


 

Η μνήμη του 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. 


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 
OPTION_REG : Καταχωρητής αποθήκευσης των ρυθμιστικών Bit για Interrupt, TMR0/WDT Prescaller
TRISA : Καταχωρητής θέσεως σαν Είσοδο ή Έξοδο της  PORTA
TRISB : Καταχωρητής θέσεως σαν Είσοδο ή Έξοδο της PORTB
EECON1 : Καταχωρητής ελέγχου της EEPROM
EECON2 : Καταχωρητής ελέγχου και προστασίας της EEPROM από εγγραφή


Το χρώμα των INDF και EECON2 είναι Μοβ διότι η λειτουργία τους είναι ιδιαίτερη.

 


SFR(Καταχωρητές ειδικών λειτουργιών - Special Function Register)

Οι πρώτες δώδεκα διευθύνσεις κάθε σειράς είναι δεσμευμένες για τους ειδικούς καταχωρητές. Αυτή η ομάδα των ειδικών καταχωρητών είναι πού σημαντική για την λειτουργία του μικροεπεξεργαστή. Παρακάτω φαίνονται αναλυτικότερα.

 

STATUS Register - Καταχωρητής αποθήκευσης αποτελεσμάτων  ( Διεύθυνση μνήμης RAM  03h,83h )
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 όταν
Το αποτέλεσμα μιας αριθμητικής ή λογικής πράξης είναι μηδέν (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 )
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 )
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 )
Αυτός ο καταχωρητής χρησιμοποιείται για την ανάγνωση και εγγραφή της μνήμης με έμμεσο τρόπο.
Όταν γίνεται ανάγνωση μιας διεύθυνσης μνήμης με άμεσο τρόπο, η διεύθυνση αυτή αναφέρεται μετά από την εντολή.

    Στο παρακάτω παράδειγμα χρησιμοποιείται ο άμεσος τρόπος.

      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'.

 


 

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 )
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 )
Για να γράψετε δεδομένα στην 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 )

R = Bit Ανάγνωσης
P = Προγραμματιζόμενο  Bit
-n = Κατάσταση μετά από εκκίνηση (Power On Reset)
u = Αμετάβλητο Bit
Bit13-4:
CP
Code Protection bit - Bit Προστασίας κώδικα από αντιγραφή

Δηλώστε 1 για να 

Απενεργοποιήσετε την προστασία αντιγραφής
Δηλώστε 0 για να  Ενεργοποιήσετε την προστασία αντιγραφής (Όλες οι θέσεις μνήμης προστατεύονται)
Ο προστατευμένος PIC όταν διαβάζεται από τη συσκευή προγραμματισμού μοιάζει με απρογραμμάτιστο.
Bit3:
PWRTE(inv)
Power-up Timer Enable bit - Bit ενεργοποίησης χρονομέτρου εκκίνησης

Δηλώστε 1 για να 

Απενεργοποιήσετε το χρονόμετρο
Δηλώστε 0 για να  Ενεργοποιήσετε το χρονόμετρο
Το χρονόμετρο εκκίνησης του 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
 

Ο εσωτερικός κόσμος του PIC16F84A(2)