kucaio Inserito: 11 novembre 2009 Segnala Share Inserito: 11 novembre 2009 Salve a tutti ho un piccolo problema nel seguente ciclo movlw posizione_cursore;carico l'indirizzo della variabile in WREG movwf FSR;trasmetto l'indirizzo al puntatore if INDF == 0x41 btfsc configurazione,0 bcf configurazione,0 btfss configurazione,0 bsf configurazione,0 endif Il problema è che il programma non entra all'interno del ciclo if anche se il valore della variabile posizione_cursore = 0x41. per fare la prova del 9 di quanto appena asserito ho anche scritto questo codice: movlw posizione_cursore;carico l'indirizzo della variabile in WREG movwf FSR;trasmetto l'indirizzo al puntatore movlw 0x41;carico il valore 0x41 in WREG movwf INDF; trasferisco per sicurezza il valore nella variabile posizione_cursore ;vedo dalla watch table cambiare il valore della variabile e portarsi a 0x41 if INDF == 0x41 btfsc configurazione,0 bcf configurazione,0 btfss configurazione,0 bsf configurazione,0 endif il pic è un P16F877A.Inoltre dato che ci sono, vi chiedo se vi sono altri metodi per comparare due valori, presenti all'interno della varibili...Saluti a tutti e grazie mille. Link al commento Condividi su altri siti More sharing options...
pibizi1 Inserita: 11 novembre 2009 Segnala Share Inserita: 11 novembre 2009 c'è un equivoco.In assembly la direttiva IF --- ENDIF non testa il valore runtime di una variabile ma il valore di una costante al tempo dell'assemblaggio. Serve per esempio per generare del codice solo su certe condizioni che si predefiniscono con uno statement in testa senza dover muovere il codice qua e là, od altri trucchi più sofisticati.Se devi testare il valore 41h presente in una cella di memoria si fa così: movfw cella xorlw 41h,w ; dove w=0 destination working reg btfsc status,z_ ;status e z_ predefiniti goto devevaperuguale ;else segue .... Link al commento Condividi su altri siti More sharing options...
kucaio Inserita: 12 novembre 2009 Autore Segnala Share Inserita: 12 novembre 2009 modifica il programma adessp è testao e funzionate, grazie. l'unica cosa è che sul manuale della microchip DS33014J (Mlab) ci sono degli esempi con l'utilizzo del ciclo if else endif, non ne riesco a comprendere la possibilità di utilizzo....ciao. Link al commento Condividi su altri siti More sharing options...
Nikiki Inserita: 13 novembre 2009 Segnala Share Inserita: 13 novembre 2009 si possono definire delle macro.controlla se all'inizio del codice di esempio c'è una direttiva "define" con le istruzioni da te elencate. Link al commento Condividi su altri siti More sharing options...
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