ASM dei pic18... un aiutino?

Jul 16, 2004 3 Replies

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


"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

Gentilissimo!

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

Ciao grazie ancora

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!

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required