| 
 Lo STATUSDobbiamo 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    
        : CarryADDWF
 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 programma12F509 : seleziona la pagina tra le due disponibili16F505 : 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. 
 |