adone79 Inserito: 14 marzo 2005 Segnala Inserito: 14 marzo 2005 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 istruzioniMOVLW 0x00MOVWF 0X20MOVWF 0X21MOVWF 0X22..........eccMa 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 direttivaindirizzo_corrente EQU 0xA0e 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 faccioMOVWF indirizzo_correntelui 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?
giacomo56 Inserita: 15 marzo 2005 Segnala Inserita: 15 marzo 2005 (modificato) 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 0x22INDF indica il registro puntato da FSR.Ciao. Modificato: 15 marzo 2005 da giacomo56
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora