Vai al contenuto
PLC Forum


Indirizzamento Base + Spiazzamento Nei Pic - possibile che non sia contemplato?


adone79

Messaggi consigliati

che voi sappiate esiste una combinazione di istruzioni nell'assembler mpasm che permetta di indirizzare i registri generici della ram con il metodo base + spiazzamento?

Mi spiego , prendiamo ad esempio i registri dall'indirizzo 0x20 a 0x7F : posso azzerarli uno ad uno con le istruzioni

MOVLW 0x00

MOVWF 0X20

MOVWF 0X21

MOVWF 0X22

..........

ecc

Ma supponiamo che io voglia , in fase di runtime , azzerarle una alla volta partendo da 0x20 fino a 0x7F mediante un ciclo : sbaglio o non posso farlo?

Se inizializzo ad esempio l'indirizzo base con una direttiva

indirizzo_corrente EQU 0xA0

e incremento la base ad ogni passo , ottengo gli indirizzi che voglio azzerare ( 0x21 , 0x22 , 0x23 ... ) ma non riesco a utilizzarli per trasferire i dati :

se faccio

MOVWF indirizzo_corrente

lui mi carica l'accumulatore in 0xA0 anziché nell'indirizzo calcolato ( che fra l'altro va perso perché sovrascritto proprio dall'accumulatore ).

Mi sto scervellando , non ci credo che sia un indirizzamento impossibile.. in fondo i PIC sono programmabili anche in C , che è tutto basato su questi giochini di puntatori, no?

Link al commento
Condividi su altri siti


Purtroppo l'indirizzamento indicizzato non è presente nei pic a 14 bit che, in combinazione con l'assenza di uno stack per i dati e la segmentazione della rom e della ram, rende difficile la scrittura di un compilatore C.

E' possibile usare l'indirizzamento indiretto tramite i registri INDF ed FSR, per esempio:

MOVLW 0x20  ;indirizzo di partenza
BCF STATUS,7;0 = selezione banchi 0 e 1, 1 = selezioni banchi 2 e 3
MOVWF FSR  ;carica l'indirizzo nel puntatore
MOVLW 0 
MOVWF INDF  ;carica W in 0x20
INCF FSR,1  ;incrementa puntatore
MOVWF INDF  ;carica W in 0x21
INCF FSR,1  ;incrementa puntatore
MOVFW INDF  ;carica W in 0x22

INDF indica il registro puntato da FSR.

Ciao.

Modificato: da giacomo56
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...