- Messaggi: 1222
- Ringraziamenti ricevuti 104
Interrupt multipli
11 Anni 1 Mese fa #11
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Interrupt multipli
i 4 pin della porta b...RB4-RB7 hanno un interrupt unico, cioè quando premi uno dei pulsanti scatta l'interrupt per la porta b ma non sai quale pulsante lo ha fatto scattare.
Per saperlo dovresti salvarti lo stato dei pulsanti e poi quando hai l'interrupt confrontarlo con l'attuale.
In alternativa puoi mettere dei pulsanti sugli interrupt esterni INT0, INT1 ecc. quelli scattano singolarmente.
Inoltre gli interrupt per pic18F4550 hanno la possibilità di essere impostati con due priorità, alta e bassa.
Ste
Per saperlo dovresti salvarti lo stato dei pulsanti e poi quando hai l'interrupt confrontarlo con l'attuale.
In alternativa puoi mettere dei pulsanti sugli interrupt esterni INT0, INT1 ecc. quelli scattano singolarmente.
Inoltre gli interrupt per pic18F4550 hanno la possibilità di essere impostati con due priorità, alta e bassa.
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
11 Anni 1 Mese fa #12
da firstcolle
Risposta da firstcolle al topic Interrupt multipli
esatto, nel mio esempio non sono gestiti gli interrupt INT0 INT1 ecc, ma per questi, come ti avevo scritto ieri, esiste un flag per ogni PIN da verificare (INTxIF)
Si prega Accedi o Crea un account a partecipare alla conversazione.
- firstcolle
- Platinum Member
Riduci
Di più
- Messaggi: 362
- Ringraziamenti ricevuti 39
11 Anni 1 Mese fa #13
da bassfender
Risposta da bassfender al topic Interrupt multipli
Ciao ragazzi, stavo leggendo l'articolo di mauro laurenti sul compliatore XC8 e leggevo che per la dichiarazione degli interuppt si sono semplificate le cose, quindi non bisogna più scrivere tutto quello che è scritto sul C18 step by step ?
Io avevo visto che bisognava scrivere:
// Prototipo di funzione
void High_Int_Event (void);
#pragma code high_vector = 0x08
void high_interrupt (void) {
// Salto per la gestione dell'interrupt
_asm GOTO High_Int_Event _endasm
}
#pragma code
#pragma interrupt High_Int_Event
void High_Int_Event (void) {
// Programma per la gestione dell'interruzione
}
invece ora si fa così ? non ho trovato esempi per capire meglio:
__interrupt(low_priority) void nome_funzione_a(void) {
// gestione delle interruzioni a bassa priorità
}
__interrupt(high_priority) void nome_funzione_b(void) {
// gestione delle interruzioni ad alta priorità
}
ciao
Io avevo visto che bisognava scrivere:
// Prototipo di funzione
void High_Int_Event (void);
#pragma code high_vector = 0x08
void high_interrupt (void) {
// Salto per la gestione dell'interrupt
_asm GOTO High_Int_Event _endasm
}
#pragma code
#pragma interrupt High_Int_Event
void High_Int_Event (void) {
// Programma per la gestione dell'interruzione
}
invece ora si fa così ? non ho trovato esempi per capire meglio:
__interrupt(low_priority) void nome_funzione_a(void) {
// gestione delle interruzioni a bassa priorità
}
__interrupt(high_priority) void nome_funzione_b(void) {
// gestione delle interruzioni ad alta priorità
}
ciao
Si prega Accedi o Crea un account a partecipare alla conversazione.
- bassfender
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 73
- Ringraziamenti ricevuti 0
11 Anni 1 Mese fa #14
da firstcolle
Risposta da firstcolle al topic Interrupt multipli
esatto..
infatti gli esempi che ti avevo messo (in XC8) sono così...
infatti gli esempi che ti avevo messo (in XC8) sono così...
Si prega Accedi o Crea un account a partecipare alla conversazione.
- firstcolle
- Platinum Member
Riduci
Di più
- Messaggi: 362
- Ringraziamenti ricevuti 39
11 Anni 1 Mese fa #15
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Interrupt multipli
si, adesso basta la funzione...
__interrupt(low_priority) void nome_funzione_a(void)
{
// qui scrivi tutto il codice da eseguire quando scatta l'interrupt a bassa priorità
}
la parte in verde puoi chiamarla come vuoi.
Stesso discorso per l'interrupt ad alta priorità
Ste
__interrupt(low_priority) void nome_funzione_a(void)
{
// qui scrivi tutto il codice da eseguire quando scatta l'interrupt a bassa priorità
}
la parte in verde puoi chiamarla come vuoi.
Stesso discorso per l'interrupt ad alta priorità
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.