PIC
18F452 |
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:
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 |
|
|