ASM dei pic18... un aiutino?

Salve a tutti! Ho sempre programmato i pic con linguaggi di alto livello tipo C. Ho quindi lacune varie sull'ASM. Per un'applicazione in cui i tempi sono critici pensavo di implementare una piccola routine in ASM all'interno del firmware in C++. Il PIC e' un 18F458, devo in sostanza spostarmi in uno specifico banco di sram e poi leggere 128 volte PORTB e memorizzarlo nella ram. Visto che i tempi devono essere rapidissimi e che tutto sommato ho un po' di program memory da sprecare pensavo di fare una routine molto stupida senza cicli, fatta piu' o meno cosi':

VAI AL BANCO SRAM 5

LEGGI PORTB METTILO IN BANCO 5, POSIZIONE 0

LEGGI PORTB METTILO IN BANCO 5, POSIZIONE 1

[...]

LEGGI PORTB METTILO IN BANCO 5, POSIZIONE 127

Qualcuno mi sa dire come si fa? E soprattutto, il fatto di non usare cicli vi sembra una follia?

Grazie, Lorenzo

Reply to
Loryball
Loading thread data ...

"Loryball" ha scritto

MOVLB 5

MOVF PORTB,W,A MOVWF 0

MOVF PORTB,W,A MOVWF 1

MOVF PORTB,W,A MOVWF 127

Se il tempo e' determinante no, infatti uno dei consigli per aumentare la velocita' e' proprio quello di sgranare i cicli evitando l'aggiornamento/test del contatore di ciclo e il relativo salto. Se il tempo non e' cosi' determinante... scrivere 257 righe di programma puo' sembrare un tantino grezzo... ma se non lo dici a nessuno ;)

ciao Claudio F

Reply to
Claudio F

Gentilissimo!

Il tempo è assolutamente critico.. e poi... giuro che non lo dico a nessuno!

Ciao grazie ancora

Reply to
Loryball

nessuno!

Sto per fare un programma su un 18F e mi sono imbattuto nel registro POSTINCx, ovvero un registro che permette di usare FSR/INDF con postincremento automatico. Cosi` mi e` venuto in mente il tuo problema.

Se ho capito bene, basta fare:

LFSR0 0x500

MOVFF PORTB,POSTINC0 ; carica la prima lettura e incrementa il puntatore MOVFF PORTB,POSTINC0 ; carica la seconda lettura su 0x501 ... ripetuto per le 128 volte.

Non ha vantaggi di velocita` perche` purtroppo la MOVFF impiega 2 cicli macchina, pero` e` piu` snello come sorgente.

Ciao!

Reply to
proboscide99

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.