Tutorials - PIC

 

PIC12F508/509 e 16F505


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 7  GPWUF : Reset da variazione su GPIO
                 1 = reset-wakeup prodotto da variazione su GPIO
                 0 = dopo POR o altri reset

  • 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:

  1. 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. 
     
  2. 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.
     
  3. 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.


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 30/04/13.