bit Inserito: 12 gennaio 2003 Segnala Share Inserito: 12 gennaio 2003 Quando faccio eseguire una subroutine di interrupt ad un PIC (attualmente 16F876, ma il problema vale per tutti) mi ritrovo con un problema abbastanza comune, ma che non sono ancora riuscito a risolvere adeguatamente.Se la subroutine di interrupt compie operazione con il registro W, o compie operazioni che influiscono sui bit del registro Status, ho la necessità di salvare queste configurazioni all'inizio della subroutine e ripristinarle alla fine, in modo che il programma principale non venga influenzato in modo anomalo dall'esecuzione della subroutine (una specie di istruzioni tipo Push e Pop dello Z80 ad esempio).Per il registro W non ho particolari problemi, con la prima istruzione della subroutine salvo il suo valore in un registro apposito e con l'ultima istruzione lo ricarico.Il salvataggio del registro Status mi invece crea problemi e tutte le soluzioni che ho adottato mi causano instabilità e errori del programma.Se qualcuno può aiutarmi magari posso inviargli spiegazioni più dettagliate e il listato della parte di programma che mi crea problemi.Grazie dell'aiuto, la mia e-mail è bit.mail[at]tin.it Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 12 gennaio 2003 Segnala Share Inserita: 12 gennaio 2003 Io non ho mai incontrato il problema che segnali, forse perchè programmo in C. Uso un compilatore della CCSC, la cui versione che si integra con MPlab costa meno di 100€ e ti risparmia un sacco di problemi. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 12 gennaio 2003 Autore Segnala Share Inserita: 12 gennaio 2003 Beh, io programmo direttamente in assembler, così ho sott'occhio direttamente il programma che esegue il microprocessore e posso ottimizzarlo al massimo. Se però è possibile sapere come risolve questo problema il compilatore in C potrebbe essermi utile. Ovviamente avrei bisogno delle istruzioni dopo la compilazione in assembler. Grazie. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 13 gennaio 2003 Autore Segnala Share Inserita: 13 gennaio 2003 Risolto il problema! Era solo un errore di battitura! Grazie lo stesso! Link al commento Condividi su altri siti More sharing options...
pibizi Inserita: 15 febbraio 2003 Segnala Share Inserita: 15 febbraio 2003 i pic sono molto poveri in quanto ad interrupts, li odio anche se li uso dall'89.. Questo è un esempio funzionante che uso di solito.Se la tua isr us anche il fsr salva anche lui. devi riservare una posizione per wsave in ogni pagina che possa essere in uso movwf wsave ;could be sopra o sotta swapf status,w ;ma senza alterarlo bcf _rp0 ;accertiamo per non duplicare anche lui movwf statussave ;put movfw pclatch movwf pclsave ;............ interrupt serviceesci movfw pclsave ; movwf pclatch swapf statussave,w movwf status swapf wsave,stesso swapf wsave,w retfie Link al commento Condividi su altri siti More sharing options...
bit Inserita: 15 febbraio 2003 Autore Segnala Share Inserita: 15 febbraio 2003 Interessante! Io non avevo pensato all'istruzione swapf al posto di movf per trasferire un dato senza alterare il registro status.Ho visto che hai salvato anche il valore di pclatch. Non ho capito bene la funzione di questo registro, dovrebbe contenere la parte alta del program counter se non sbaglio, ma come si gestisce?Un'altra cosa, rimanendo in tema di program counter: nei PIC con più di 2K di memoria programma, come fa una istruzione tipo goto e call a indirizzare una locazione con soli 11 bit di indirizzo, che corrispondono appunto a 2K di memoria? E' necessario selezionare prima la pagina indirizzata?Grazie dei consigli! Ciao!Ah! Potresti segnalarmi un'altro tipo di microprocessore migliore in alternativa al PIC? Dovrebbe essere adatto per lo stesso tipo di applicazioni, sempre riprogrammabile elettricamente (niente EPROM, non posso cancellare un micro mettendolo 20 volte al giorno sotto la lampada), con ram, EEPROM dati, oscillatore e interfaccie varie interne.Non ho trovato nulla in giro. Il concorrente principale del PIC mi pare l'ST6, ma è cancellabile solo con la lampada. Inoltre la documentazione relativa dovrebbe essere facilmente reperibile, proprio come per i PIC. Link al commento Condividi su altri siti More sharing options...
pibizi Inserita: 15 febbraio 2003 Segnala Share Inserita: 15 febbraio 2003 gli avr della atmel non sono male, sicuramente più regolari di architettura e senza tutte quelle stranezze dei cambio pagina.La storia di pclatch è lunga, leggi con moolta attenzione i manuali.la swap è suggerita dalla letteratura, non è farina del mio sacco. essenziale è riservare una posizione per salvare w in ogni pagina utilizzata.pierowww.tele-log.com Link al commento Condividi su altri siti More sharing options...
bit Inserita: 16 febbraio 2003 Autore Segnala Share Inserita: 16 febbraio 2003 Grazie! Link al commento Condividi su altri siti More sharing options...
Wolf82 Inserita: 24 giugno 2004 Segnala Share Inserita: 24 giugno 2004 Il PIC presenta interrupt sensibili al fronte o al livello del segnale di INT?E qual è la resistenza di ingresso delle porte usate dal convertitore analogico-digitale di un PIC?Grazie Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 24 giugno 2004 Segnala Share Inserita: 24 giugno 2004 Il PIC presenta interrupt sensibili al fronte o al livello del segnale di INT Link al commento Condividi su altri siti More sharing options...
wnc Inserita: 25 giugno 2004 Segnala Share Inserita: 25 giugno 2004 La resistenza di ingresso del tuo equivalente Thevening deve essere inferiore a 3,2k pena un trasferimento non corretto del segnale alla periferica ADC. Ciao Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 25 giugno 2004 Segnala Share Inserita: 25 giugno 2004 Il manuale del pic riporta come impedenza max in ingreggo 10K Link al commento Condividi su altri siti More sharing options...
wnc Inserita: 26 giugno 2004 Segnala Share Inserita: 26 giugno 2004 Non so che PIC usi ma per il 18Fxxx l'impendenza massima consigliata è 2,5k (manuale pag.184). Tutto dipende dalla velocità per caricare il S/H. 10k mi sembrano un pò troppi però...Saluti Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 27 giugno 2004 Segnala Share Inserita: 27 giugno 2004 Hai ragione , ho letto il data sheet del 16F87x che riporta i 10K 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