Lo STATUS
Dobbiamo aggiungere qualche cenno alla posizione importante nei registri speciali
che è occupata dalla STATUS.
Si tratta di un registro che contiene una serie di flag indicatori delle
condizioni di lavoro e di esecuzione delle istruzioni. Questi indicatori
(in inglese flag, bandiere) sono indispensabili per la programmazione.
Nei piccoli Baseline i bit dello STATUS non sono solo flag, ma anche bit di
controllo. Questa situazione in cui, in uno stesso registro si mescolano
indicatori e comandi, è comune nei PIC.
Il registro di STATUS è costituito così:
STATUS
|
bit
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
nome
|
GPWUF
|
-
|
PA0
|
!T0
|
!PD
|
Z
|
DC
|
C
|
funzione
|
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
default
|
0 |
0 |
1 |
1 |
1 |
x |
x |
x |
bit 6 -
: non usato
bit
5
PA0 : Preselezione pagina
1 = pagina 1 (200h-3FFh)
0 = pagina 0 (000h-1FFh)
bit
4 !TO
: Timeout
1 = dopo POR o CLRWDT o SLEEP
0 = reset da WDT timeout
bit
3 !PD
: Power down
1 = dopo POR o CLRWDT
0 = SLEEP
bit
2 Z
: Flag Zero
1 = il risultato dell' operazione è 0
0 = il risultato dell' operazione è diverso da 0
bit
1 DC
: Digital Carry
ADDWF
1 = carry dal quarto bit
SUBWF
1 = borrow dal quarto
bit
0 C
: Carry
ADDWF
1 = carry
SUBWF
1 = borrow
In dettaglio:
Bit |
Nome |
Funzione |
7 |
GPWUF |
Questo flag a 1 indica che si è prodotto un reset a causa di una
variazone su un GPIO (se è stata impostata questa funzione).
In 16F505 si chiama RBWUF in quanto la funzione di wakeup dipende dai
pin di PORTB |
5 |
PA0 |
Questo bit viene scritto a 0 per accedere alla pagina di memoria
programma 0. Se è a 1, permette l' accesso alla pagina 1 della
memoria programma.
- 12F508 : non ha alcun effetto, dato che esiste una sola pagina
di memoria programma
- 12F509 : seleziona la pagina tra le due disponibili
- 16F505 : come per 12F509
|
4 |
!TO |
Questo flag a 0 indica che c'è stato un reset da timeout del WDT |
3 |
!PD |
Questo flag a 0 indica una uscita da sleep |
2 |
Z |
Questo flag indica che il risultato di una operazione è 0.
verificare che il flag sia a 1 equivale a verificare che il risultato
dell' operazione aritmetica o ogica è zero. |
1 |
DC |
Questo flag indica un carry (o borrow) sul quarto bit. E' utile
nelle operazioni di conversione e calcolo su BCD |
0 |
C |
Questo flag è il carry per le somme (e borrow per le sottrazioni).
Verificare il valore di C equivale a verificare se l' operazione ha
reso un resto.
Inoltre il Carry entra a far parte delle istruzioni di rotazione. |
La funzione dello STATUS è legata,
quindi, a tre elementi differenti:
- indicatore del risultato di una istruzione (bit 2:0).
La funzione è legata agli opcodes: alcuni opcodes, nella loro esecuzione,
non modificano questi flag, ma, in generale, la loro azione si estende su
tutte le operazioni aritmetiche (somma, sottrazione, incremento,
decremento) e logiche (AND, OR, XOR, rotazione, ecc.).
Consultando la lista degli opcodes
disponibili si rilevano anche le informazioni relative ai flag che
sono interessati.
- indicatore della causa del reset (bit1, 4 e 3)
Analizzando lo stato di questi flag è possibile determinare quale è la
causa del reset e intraprendere le azioni adeguate.
- switch di pagina (bit 5). La funzione sarà chiarita nelle
prossime pagine.
In merito al punto 2, va ricordato che i Baseline sono privi della gestione
di interrupt. La filosofia applicativa nel riconoscere un evento prevede la
messa in stato di sleep ed il risveglio con un reset a seguito di una
determinata causa (MCLR, WDT overflow, variazione di livello sui pin,
variazione sul comparatore, per i modelli che ne sono dotati, ecc). Quindi l'
analisi dello STATUS ha anche questa funzione.
Per quanto riguarda i flag indicatori al punto 1, si può ancora precisare
che qui manca un flag N (negativo) presente in altre versioni di STATUS, ad
esempio nei Midrange.
|