franco2 Inserito: 11 febbraio 2004 Segnala Share Inserito: 11 febbraio 2004 ciao a tutti,ho un problema nella programmazione di un 16f84, ovvero di interrupt sul fronte di RB0:vorrei, tramite il registro OPTION, che l'interrupt fosse abilitato sul fronte di salita e su quello di discesa alternativamente. Ho provato mascherando l'OPTION register durante la routine di interuzione e funziona (infatti per vedere qualeparte della routine faceva faccio accendere due led distinti), ma cambiando il valore del bit 6 l'interrupt rimane sempre sul fronte di salita, eppure il valore viene effettivamente cambiato altrimenti dovrebbe accendersi sempre lo stesso led!come mai?io cambio il bit dell' OPTION register prima di riabilitare gli int tramite bcf INTCON,0 e retfie...grazie mille Link al commento Condividi su altri siti More sharing options...
bit Inserita: 11 febbraio 2004 Segnala Share Inserita: 11 febbraio 2004 Vediamo se ho capito:Hai abilitato l'interrupt del pin rb0/int.Ad ogni routine di interrupt inverti il bit 6 di option reg (intedg) e questo funziona perchè lo testi con i led.Il tutto ti va però in interrupt sempre e solo sul fronte di salita del pin rb0.A prima vista sembra corretto. Hai provato a scrivere diversamente il nome del bit del registro?Ad esempio, invece di OPTION_REG,INTEDG scrivi magari OPTION_REG,06 oppure 0X81,06 ?Magari è solo un errore nel file .inc che definisce il modo di assemblare il programma...Per accendere i led usi delle istruzione poste dopo le istruzioni che agiscono sul registro option o testi effettivamente il bit option,06 e a seconda del risultato accendi uno o l'altro led?Per ora non mi viene in mente altro....Ciao. Link al commento Condividi su altri siti More sharing options...
franco2 Inserita: 11 febbraio 2004 Autore Segnala Share Inserita: 11 febbraio 2004 grazie, ma sono riuscito a trovare l'errore ovvero dimenticavo di riattivare gli int col bit GIE, proprio un errore da dilettante!!!!!grazie comunque per l'interessamento Link al commento Condividi su altri siti More sharing options...
bit Inserita: 11 febbraio 2004 Segnala Share Inserita: 11 febbraio 2004 Ma il bit gie si riattiva da solo al comanto RETFIE.... io non lo riattivo mai. Link al commento Condividi su altri siti More sharing options...
franco2 Inserita: 11 febbraio 2004 Autore Segnala Share Inserita: 11 febbraio 2004 io oltre a quella modifica ne ho fatta un'altra ma credevo non fosse quello, overo quando modificavo l' option register non facevo caso al banco dei registri e allora prima di una qualsiasi operazione su tale banco scrivo nello status register di selezionare il banco giusto... allora deve essere questo il motivo... Link al commento Condividi su altri siti More sharing options...
bit Inserita: 12 febbraio 2004 Segnala Share Inserita: 12 febbraio 2004 (modificato) Ecco, mi sembra che queso sia più importante.Tra le altre cose, ti sei ricordato di salvare i valori del registro W e status all'inizio della routine di interrupt e ripristinarli alla fine? Potresti avere problemi al programma principale altrimenti.Tra l'altro non ti conviene riabilitare manualmente il bit GIE di INTCON prima della fine dell'interrupt. Non avrai problemi in questo caso, ma se tu usassi più di una condizione di interrupt, e se la seconda ti si verifica durante l'esecuzione della routine della prima, abilitando il GIE ti si verificherebbe una immediata nuova chiamata alla routine di interrupt, prima che sia terminata la vecchia routine, e questo ti darebbe problemi.Se invece lasci il GIE a 0, sarà l'istruzione RETFIE a risettarlo, e nel caso in cui al momento della fine della prima routine esista già una nuova condizione di interrupt, la nuova routine verra eseguita immediatamente dopo la fine della prima, in maniera corretta.Ciao! Modificato: 12 febbraio 2004 da bit 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