Come si è già avuto occasione di accennare, i registri del PIC si dividono in due categorie: i General Purpose Register (GPR) e gli Special Purpose Register (SFR). I primi, come dice il nome, servono per scopi generali (per esempio per salvare temporaneamente il risultato di un calcolo), mentre i secondi sono fondamentali per controllare tutte le funzioni del PIC.
Il PIC16F690 contiene 256 registri GPR, ciascuno da un byte. Come suggerisce il nome si tratta di un'area di memoria di uso generale, dove salvare i risultati e i dati di calcolo del programma. Per esempio un registro GPR può essere utilizzato come contatore in un ciclo (incrementandolo a ogni ripetizione del ciclo stesso). Questi registri svolgono le funzioni dei normali registri di uso generale (A, B, C, D etc.) del microprocessore Z80.
I registri GPR, a differenza degli Special Function Register, non hanno un nome ed è possibile accedervi solo per mezzo del loro indirizzo o definendo una opportuna etichetta letterale associata al registro stesso.
Questi registri sono collocati a partire dall'indirizzo relativo 20h nei banchi di memoria 0, 1 e 2. Occorre anche osservare che le ultime 16 locazioni di ogni banco (da 70h a 7Fh) sono comuni ai banchi 0,1 e 2. In altre parole, questi 16 indirizzi corrispondono in realtà a 16 locazioni mappate su ogni banco: si tratta in sostanza di 16 registri che possono essere indirizzati indifferentemente nel banco 0, 1 oppure 2 (aree colorate in giallo nella figura qui sotto).
Si tratta di locazioni di memoria utilizzate dal PIC per svolgere particolari compiti predeterminati. In molti casi i bit di questi registri sono fisicamente collegati con particolari componenti del PIC (per esempio col convertitore AD, il modulo di comunicazione seriale, il Program Counter etc.): pertanto ogni modifica dei valori contenuti in questi registri ha effetto sul funzionamento del PIC e dei suoi moduli interni.
Per esempio modificando il contenuto del registro TRISA è possibile cambiare la programmazione dei bit della PORTA A (programmandoli come input o come output):
Gli SFR sono dotati di un nome che li identifica e che può essere usato programmando in assembly per accedere rapidamente ai registri stessi (senza doverne ricordare l'indirizzo).
Come abbiamo già visto, alcuni di questi registri sono "copiati" (più correttamente si dice mappati) in entrambi i banchi; ciò significa che per accedere a quel registro è sufficiente specificarne l'indirizzo di memoria, non importa quale banco sia abilitato in quel momento. Ad esempio, per accedere al registro PCL possiamo portarci all'indirizzo 02h del banco 0, ma anche all'indirizzo 02h del banco 1.
SFR = special function register
PIC16F690
|
|
|||||||||||
|
Bank 0 |
Indirect addr |
Bank 1
|
Indirect addr. |
Bank 2 |
Indirect addr. |
Bank 3 |
Indirect addr. |
|
|||
|
|
00h |
|
|
80h |
|
|
100h |
|
|
180h |
|
1.
|
TMRO |
01h |
1.
|
OPTION_REG |
81h |
1.
|
TMRO |
101h |
1.
|
OPTION_REG |
181h |
|
2.
|
PCL |
02h |
2.
|
PCL |
82h |
2.
|
PCL |
102h |
2.
|
PCL |
182h |
|
3.
|
STATUS |
03h |
3.
|
STATUS |
83h |
3.
|
STATUS |
103h |
3.
|
STATUS |
183h |
|
4.
|
FSR |
04h |
4.
|
FSR |
84h |
4.
|
F8R |
104h |
4.
|
FSR |
184h |
|
5.
|
PORTA |
05h |
5.
|
TRISA |
85h |
5.
|
PORTA |
105h |
5.
|
TRISA |
185h |
|
6.
|
PORTB |
06h |
6.
|
TRISB |
86h |
6.
|
PORTB |
106h |
6.
|
TRISB |
186h |
|
7.
|
PORTC |
07h |
7.
|
TRISC |
87h |
7.
|
PORTC |
107h |
7.
|
TRISC |
187h |
|
|
|
08h |
|
|
88h |
|
|
108h |
|
|
188h |
|
|
|
09h |
|
|
89h |
|
|
109h |
|
|
189h |
|
8.
|
PCLATH |
0Ah |
8.
|
PCLATH |
8Ah |
8.
|
PCLATH |
10Ah |
8.
|
PCLATH |
18Ah |
|
9.
|
INTCON |
0Bh |
9.
|
INTCON |
8Bh |
9.
|
INTCON |
10Bh |
9.
|
INTCON |
18Bh |
|
10.
|
PIR1 |
0Ch |
10.
|
PIE1 |
8Ch |
10.
|
EEDAT |
10Ch |
10.
|
EECON1 |
18Ch |
|
11.
|
PIR2 |
0Dh |
11.
|
PIE2 |
8Dh |
11.
|
EEADR |
10Dh |
11.
|
EECON2 |
18Dh |
|
12.
|
TMR1L |
0Eh |
12.
|
PCON |
8Eh |
12.
|
EEDATH |
10Eh |
|
|
18Eh |
|
13.
|
TMR1H |
0Fh |
13.
|
OSCCON |
8Fh |
13.
|
EEADRH |
10Fh |
|
|
18Fh |
|
14.
|
T1CON |
10h |
14.
|
OSCTUNE |
90h |
|
|
110h |
|
|
190h |
|
15.
|
TMR2 |
11h |
|
|
91h |
|
|
111h |
|
|
191h |
|
16.
|
T2CON |
12h |
15.
|
PR2 |
92h |
|
|
112h |
|
|
192h |
|
17.
|
SSPBUF |
13h |
16.
|
SSPADD(2) |
93h |
|
|
113h |
|
|
193h |
|
18.
|
SSPCON |
14h |
17.
|
SSPSTAT |
94h |
|
|
114h |
|
|
194h |
|
19.
|
CCPR1L |
15h |
18.
|
WPUA |
95h |
14.
|
WPUB |
115h |
|
|
195h |
|
20.
|
CCPR1H |
16h |
19.
|
IOCA |
96h |
15.
|
IOCB |
116h |
|
|
196h |
|
21.
|
CCP1CON |
17h |
20.
|
WDTCON
|
97h |
|
|
117h |
|
|
197h |
|
22.
|
RCSTA |
18h |
21.
|
TXSTA |
98h |
16.
|
VRCON |
118h |
|
|
198h |
|
23.
|
TXREG |
19h |
22.
|
SPBRG |
99h |
17.
|
CM1CONO |
119h |
|
|
199h |
|
24.
|
RCREG |
1Ah |
23.
|
SPBRGH |
9Ah |
18.
|
CM2CONO |
11Ah |
|
|
19Ah |
|
|
|
1Bh |
24.
|
BAUDCTL |
9Bh |
19.
|
CM2CON1 |
11Bh |
|
|
19Bh |
|
25.
|
PWM1CON |
1Ch |
|
|
9Ch |
|
|
11Ch |
|
|
19Ch |
|
26.
|
ECCPAS |
1Dh |
|
|
9Dh |
|
|
11Dh |
12.
|
PSTRCON |
19Dh |
|
27.
|
ADRESH |
1Eh |
25.
|
ADRESL |
9Eh |
20.
|
AN8EL |
11Eh |
13.
|
SRCON |
19Eh |
|
28.
|
ADCONO |
1Fh |
26.
|
ADCON1
|
9Fh |
21.
|
AN8ELH |
11Fh |
|
|
19Fh |
|
|
GENERAL PURPOSE
REGISTER
96 BYTE |
20h |
|
GENERAL PURPOSE
REGISTER
80 BYTE |
A0h |
|
GENERAL
PURPOSE
REGISTER
80 BYTE
|
120h |
|
|
1A0h |
|
|
|
|
|
|||||||||
EF0h |
16Fh |
|
||||||||||
Accesses
70h – 7Fh
|
F0h |
Accesses
70h – 7Fh
|
170h |
|
Accesses
70h – 7Fh
|
1F0h |
|
|||||
7Fh |
|
FFH |
17Fh |
|
1FFh |
|
||||||
|
Bank 0
-28 |
|
|
Bank 1
-26
|
|
|
Bank 2- 21 |
|
|
Bank 3
-13 |
Totale registri
88? No
66 |
|
Registri SFR di controllo del PIC:
1.
OPTION_REG = registro opzioni :
r/w serve per
configurare timer.
WDog, interrupt, e abilitazione porte A?B
2.
STATUS =
registro di stato
3.
FSR =
file select register : registro per l’ indirizzamento
dei file( parola)
4.
PCL =
Program counter Low:
parte bassa dell-indirizzo contenuto nel Program Counter
5.
PCLATH =
Program counter High address
6.
INTCON
= interrupt control register: contiene I flag per
gestire le inerruzioni dal TM0 ma anche dalla porta A e dai
piedini RA2/AN2/T0ck/C1out
7.
PIR1=
Peripheral interrupt request register 1
8.
PIR2=
Peripheral interrupt request register 1
9.
PIE1=
Peripheral interrupt enable register 1
10.
PIE2=
Peripheral interrupt enable
register 2
11.
PCON =
power control register: serve per abilitare o
disabilitare il set
o il rest
Registri SFR per le porte di I/O
12.
PORTA =
PortA register: serve
per settare a 0 o a
1 i 6 piedini (con
indirizzo da 0-5) della porta A
13.
TRISA=
port A tri-state register:
serve per definire quali piedini sono in Input (1) o in
Output (0)
14.
PORTB=
PortB register: serve
per settare a 0 o a
1 i 4 piedini (con
indirizzo da 4-7) della porta B
15.
TRISB= port B tri-state register:
serve per definire quali
piedini sono in Input (1) o in Output (0)
16.
PORTC=
PortC register: serve per settare
a 0 o a 1 gli
8 piedini (con indirizzo da 0-7) della porta C
17.
TRISC= port C tri-state register:
serve per definire quali
piedini sono in Input (1) o in Output (0)
18.
ANSEL= Analog select register:
serve per definire se i valori prelevati o forniti ai piedini (
8 pin – 0-7) delle
porte sono di tipo anlogico (1) o digitale (0).Se non e usato e
0+ digitale.
19.
ANSELH= Analog select high register:
idem cs ma per i piedini 8,9,10,11
20.
WPUA= weak pull up
register della porta A:
attivazione di resistenze che facilitano il collegamento con
interruttori esterni
21.
WPUB= weak pull up
register della porta B:
attivazione di resistenze che facilitano il collegamento con
interruttori esterni
22.
IOCA= interrupt on- change porta A
register:
registro che serve per abilitare o disabilitare gli interrupt dalla porta
A
23.
IOCB= interrupt on- change porta B
register:
registro che serve per abilitare o disabilitare gli interrupt dalla porta
B
Registri SFR per l'utilizzo della
memoria EEPROM interna: la locazioni di memoria EEPROM
r/w non sono mappate nello spazio dei registri ma possono
essere indirizzate utilizzando
i 6 SFR di seguito elencati.
24.
EEDAT
25.
EEADR
26.
EEDATH
27.
EEADRH
28.
EECON1
29.
EECON2
Registri SFR per l'utilizzo dei
TIMER 0 –1 e 2 interni come contatori,temporizzatori e
abilita tori di interrupt e
e avvio delle attivita’ del comparatore (ECCP):
30.
TMR1L
31.
TMR1H
32.
T1CON
33.
T2CON
34.
TMR2
35.
TMRO
Registri SFR per l'utilizzo dell’
oscillatore interno e per determinarne la frequenza,
l’avvio e
il periodo di clock
36.
OSCCON
37.
OSCTUNE
Registri SFR per l'utilizzo della
periferica EUSART ( enhanced= avanzato universal
synchronous asunchronous receiver transmitter):
38.
SSPBUF
39.
SSPADD(2)
40.
SSPCON
41.
SSPSTAT
42.
TXSTA
43.
TXREG
44.
SPBRG
45.
RCSTA
46.
RCREG
47.
SPBRGH
48.
BAUDCTL
Registri SFR per l'utilizzo del PWM:
tipologia di modulazione del segnale che permette di ottenere
una tensione media variabile dipendente dal rapporto tra la
durata dell' impulso positivo e di quello negativo
49.
CCPR1L
50.
CCPR1H
51.
CCP1CON
52.
RCSTA
53.
PWM1CON
54.
PR2
55.
ECCPAS
Registri SFR per l'utilizzo del comparatore
interno che serve per interfacciare col PIC circuiti
analogici. Il
funzionamento e’ basato sul confronto tra 2 tensioni di
riferimento e l’utilizzo di amplificatore operazionale (AO)
ad anello aperto (
AA)
56.
CM1CONO
57.
CM2CONO
Registri SFR per
l'utilizzo del Latch (flip flop) sia per settare le
tensioni di riferimento della modulazione PWM sia per settare/
resettare il latch
59.
VRCON= voltage reference controll register
60.
SRCON = set/ reset
latch controll register
61.
PSTRCON=
pulse streering (gestione) control register
Registri SFR per l'utilizzo del ADC
(analogic to digital converter)
e per definirne le modalità di conversione:
62.
ADRESH
63.
ADRESL
64.
ADCONO
65.
ADCON1
Registro SFR per l'utilizzo del watchdog interno:
66.
WDTCON
Sito realizzato in base al
template offerto da
http://www.graphixmania.it