Vicus Inserita: 18 giugno 2016 Autore Segnala Inserita: 18 giugno 2016 MikroC, me lo hai suggerito tu. Il codice ce l'ho sull'altro pc, appena lo finisco lo pubblico.
dott.cicala Inserita: 18 giugno 2016 Segnala Inserita: 18 giugno 2016 //############################################################################## // Main Loop //############################################################################## while(1){ if (((portb&0X0F)!=0X0F)&((portb&0X0F)!=MASK)) { porta=0; MASK= portb&0X0F; delay_ms(100); } switch (MASK){ case 14: porta=1; break; case 13: porta=2; break; case 11: porta=4; break; case 7: porta=8; break; } } Il codice pubblicato mesi fa era corretto. Non andava d'accordo con lo schema che prevedeva i pulsanti su ingressi diversi. Dimenticavo che lavoriamo in logica negata per via del pull up e quindi il pulsante chiude verso massa, di conseguenza il valore da riconoscere è lo zero. Qui sopra ho introdotto il ritardo richiesto. I valori della maschera andranno adattai allo schema elettrico adottato.
Vicus Inserita: 21 giugno 2016 Autore Segnala Inserita: 21 giugno 2016 Ecco il codice che utilizzerò se avete consigli sono i benvenuti. //****************************************************************************** // Project : PlcForum Switcher // Author : S.T. // Date : 26/03/2016 // MCU : PIC16F88 - INT.OSC. 4MHz // Compiler: MikroC PRO for PIC V6.6.2 //****************************************************************************** //****** TAGs ****************************************************************** // Inputs sbit P1 at RB4_BIT; sbit P2 at RB5_BIT; sbit P3 at RB6_BIT; sbit P4 at RB7_BIT; // Stat unsigned int MASK; unsigned int MASK_OLD; //****************************************************************************** //****************************************************************************** // Main program //****************************************************************************** void main() { //****************************************************************************** // Registro configurazione Oscillatore //****************************************************************************** OSCCON = 0x4D; // Int Osc 4 MHz //****************************************************************************** // Registri configurazione PORT[A] - PORT[B] //****************************************************************************** ADCON0 = 0x00; // Ingressi Anaogici OFF ADCON1 = 0x00; // Ingressi Anaogici OFF ANSEL = 0x00; // Ingressi Anaogici OFF TRISA = 0xF0; // RA0-RA3=OUT TRISB = 0xF0; // RB4-RB7=INPUT RB0-RB3=OUTPUT PORTA = 0x00; // Clear PORT[A] all'accensione PORTB = 0x00; // Clear PORT[B] all'accensione //****************************************************************************** // OPTION REGISTER //****************************************************************************** OPTION_REG = 0X07; //****************************************************************************** // INTCON REGISTER //****************************************************************************** INTCON = 0X00; //****************************************************************************** // Registri configurazione INTERRUPTS //****************************************************************************** PIE1 = 0X00; // PERIPHERAL INTERRUPT ENABLE REGISTER 1 PIE2 = 0X00; // PERIPHERAL INTERRUPT ENABLE REGISTER 2 PIR1 = 0X00; // PERIPHERAL INTERRUPT REQUEST REGISTER 1 PIR2 = 0X00; // PERIPHERAL INTERRUPT REQUEST REGISTER 2 PCON = 0X00; // POWER CONTROL REGISTER //############################################################################## // Main Loop //############################################################################## while(1){ MASK= portb & 0xf0; if (MASK==MASK_OLD) MASK=0; switch (MASK){ case 224: porta=0; delay_ms(10); porta=1; portb=portb&0xF0; portb=portb|0x0E; MASK_OLD=MASK; break; case 208: porta=0; delay_ms(10); porta=2; portb=portb&0xF0; portb=portb|0x0D; MASK_OLD=MASK; break; case 176: porta=0; delay_ms(10); porta=4; portb=portb&0xF0; portb=portb|0x0B; MASK_OLD=MASK; break; case 112: porta=0; delay_ms(10); porta=8; portb=portb&0xF0; portb=portb|0x07; MASK_OLD=MASK; break; } } }
gabri-z Inserita: 21 giugno 2016 Segnala Inserita: 21 giugno 2016 Consigli ? Ecco uno : Fa andare 'sto coso prima che mi dimentichi cosa diceva il tuo primo messaggio !
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