PIC 18F452
chip
Datasheet PDF (6,02M)


Memoria programma
(flash) 16384 words da 16 bit ciascuna. Le istruzioni normalmente occupano una word, quattro istruzioni (LFSR MOVFF GOTO CALL) occupano invece 2 words. All'accensione l'esecuzione del programma parte dall'indirizzo 0. Gli indirizzi 8 e 24 rappresentano i punti di partenza delle routines di gestione degli interrupt rispettivamente di alta e bassa priorita'.


Memoria dati (ram) 1536 byte in 6 banchi da 256 byte ciascuno numerati da 0 a 5. I banchi da 6 a 14 non sono usati. Gli ultimi 128 byte del banco 15 contengono i registri speciali di controllo dell'hardware (SFR). La scelta del banco attivo si effettua scrivendo un valore compreso tra 0 e 15 nel registro BSR, per questa operazione e' prevista l'apposita istruzione MOVLB.

Sono previste due modalita' di indirizzamento diretto specificabili nelle istruzioni che coinvolgono i registri della ram:
  • Se alla fine dell'istruzione si scrive ",1" oppure ",BANKED" oppure niente allora per accedere alla ram viene usato il registro BSR come selettore di banco.
  • Se invece si scrive ",0" oppure ",A" allora viene usata la modalita' chiamata "access ram", e vengono presi in considerazione solo i primi 128 byte del banco 0 e gli ultimi 128 del banco 15 (gli SFR). Usando questa modalita' e' quindi possibile accedere sempre a tutti gli SFR (e ai primi 128 byte della ram) senza necessita' di cambiare banco.
Esempi:
            CLRF        TRISB,A
            INCF        registro,F,1

E' possibile accedere all'area dati anche in modo indiretto tramite 3 registri puntatori di nome FSR0 FSR1 e FSR2. Questi sono registri a 16 bit composti ciascuno da 2 registri a 8 bit contenenti la parte alta e bassa dell'indirizzo. FSR0 e' composto cioe' da FSR0H e FSR0L ecc... Per accedere alla cella puntata da uno dei tre registri basta leggere o scrivere nel corrispondente registro INDF0, INDF1 o INDF2. Per caricare un valore a 16 bit in un registro puntatore e' prevista l' apposita istruzione LFSR.

L' accesso indiretto consente anche funzionalita' automatiche di pre/post incremento/decremento dei registri puntatori. Se invece di leggere/scrivere in un registro INDFx si legge/scrive in PREINCx o POSTINCx il valore del puntatore viene automaticamente incrementato di 1 rispettivamente prima o dopo l'accesso alla cella puntata. Invece leggendo/scrivendo in POSTDECx il puntatore viene decrementato di 1 dopo l'accesso alla cella.

Esempio, azzera 100 byte a partire dall'indirizzo 930:

            LFSR        FSR0,0x03A2
            MOVLW       0x64
            MOVWF       contat,1
LOOP        CLRF        POSTINC0,A
            DECFSZ      contat,F,1
            BRA         LOOP


Programma di test funzionamento a 40Mhz
Lampeggio alternato di due led su RB0 e RB1 a circa 2,5Hz, quarzo 10MHz, clock quadruplicato internamente.

            PROCESSOR   18F452
            INCLUDE     "P18F452.INC"
            __CONFIG    _CONFIG1H, 11111110B
            __CONFIG    _CONFIG2L, 11111100B
            __CONFIG    _CONFIG2H, 11111110B
            __CONFIG    _CONFIG4L, 11111011B
CL          EQU         0
CH          EQU         1
CU          EQU         2
            ORG         0
            CLRF        TRISB,A
            CLRF        PORTB,A
            BSF         PORTB,1,A
MAINLOOP    BTG         PORTB,0,A
            BTG         PORTB,1,A
            CLRF        CL,A
            CLRF        CH,A
            MOVLW       0x0A
            MOVWF       CU,A
DELAYLOOP   DECFSZ      CL,F,A
            BRA         DELAYLOOP
            DECFSZ      CH,F,A
            BRA         DELAYLOOP
            DECFSZ      CU,F,A
            BRA         DELAYLOOP
            BRA         MAINLOOP
            END

Pagina by Claudio Fin 27/3/2004 - Ultimo aggiornamento 27/3/2004