Francesco_Guerra Inserito: 2 dicembre 2004 Segnala Share Inserito: 2 dicembre 2004 Salve sono nuovo nel forum e vorre porvi una questione:dispongo di un pic16f876 e vorrei collegarvi un selettore a 4 vie e due pulsantini da pannello.il selettore (che a seconda della posizione "shifta" nelle varie modalità) dovrebbe funzionare in interrupt, quindi l'ho collegato ai pin RB4:RB7 con resistenza a massa da 12k; i pulsanti da pannello invece servono a incrementare o decrementare alcune variabili diverse a seconda della posizione del selettore e sono collegati ai pin RA0 e RA2 sempre con resistenza a massa da 12kAd es:selettore posizione 0: - pulsante 1 x = x+1 - pulsante 2 x = x-1selettore posizione 1: - pulsante 1 y = y+1 - pulsante 2 y = y-1e così via ho definito#byte port_a=0x05#byte port_b=0x06ho settato set_tris_a(0b00000101);set_tris_b(0b11110000);nel main ho abilitato prima gli interrupt global, poi int_rbma non funziona!!!!allego anche la porzione di codice di interesse*****************************************void main() { restart_wdt(); lcd_init(); // inizializza l'LCD delay_seconds(2); printf(lcd_putc,"\fWNG_SW1.0"); printf("\n\r wng sw 1.0"); delay_seconds(2); printf(lcd_putc,"\f"); enable_interrupts(GLOBAL); // Interruzioni abilitate enable_interrupts(int_rb); printf("abilitati interrupt\n"); set_tris_a(0b00000101); set_tris_b(0b11110000); printf("settate porte\n"); while (true) { restart_wdt(); if (overrun) { // serve per sbloccare la seriale se // si è verificato un overrun cren=0; cren=1; } printf(lcd_putc,"\f"); generazione(); }}**********************************************#INT_RBrb_isr(){ // memorizza i fronti di salita nela variabile modalita che funziona da // condizione dello switch if (bit_test(port_b,4)) // piedino NULL modalita = 0; if (bit_test(port_b,5)) // piedino ALGORITMO modalita = 1; if (bit_test(port_b,6)) // piedino SEED modalita = 2; if (bit_test(port_b,7)) // piedino PRODUZIONE modalita = 3; switch (modalita) { case 0: printf(lcd_putc,"\f"); printf(lcd_putc,"\n\r WGNG1.0"); printf("\n\r WGNG1.0 "); //hyperterminal break; case 1: printf(lcd_putc,"\f"); printf(lcd_putc,"\n\r select algo"); printf("\n\r select algo"); //hyperterminal if (bit_test(port_a,0)){ aumenta_config(); } if (bit_test(port_a,2)){ decrementa_config(); } break; case 2: printf(lcd_putc,"\f"); printf(lcd_putc,"\n\r select seed"); printf("\n\r select seed"); //hyperterminal if (bit_test(port_a,0)){ aumenta_seed(); } if (bit_test(port_a,2)){ decrementa_seed(); } break; case 3: printf(lcd_putc,"\f"); printf(lcd_putc,"\n\r start/stop"); printf("\n\r start/stop"); //hyperterminal if (bit_test(port_a,0)){ produzione_start(); } if (bit_test(port_a,2)){ produzione_stop(); } break; } 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