sfinge Inserito: 25 agosto 2009 Segnala Inserito: 25 agosto 2009 Grazie anticipatamente della vostra attenzione.Ho un problema con appunto l'istruzione Case.Vorrei che la PORTB del mio pic assumesse valori diversi a seconda del valore contenuto nella variabile char xtest.La variabile viene incrementata correttamente ad intervalli da 1sec,attraverso una routine ad interrupt (che funziona).L'istruzione Switch/Case è all'interno di un loop infinito.Il programma sembra ignorare i valori specificati nei case è scrive comunque valori sulla PORTB.Il compilatore è PICCCOMPILER lite integrato in MPLAB ed il pic è un 16f876Ecco il programma #include<htc.h> #include<pic1687x.h> char xtest =0; unsigned int xcount =0;void main (){ //Setup porte di I/O TRISC=255; TRISB=0; //Setup registri speciali OPTION=0b00000110; GIE=1; T0IE=1; TMR0=128; while(1){ switch(xtest) { case 0: PORTB=0b00000000; case 1: PORTB=0b00000001; case 2: PORTB=0b00000010; case 3: PORTB=0b00000100; case 4: PORTB=0b00001000; case 5: PORTB=0b00010000; case 6: PORTB=0b00100000; case 7: PORTB=0b01000000; case 8: PORTB=0b10000000; case 9: PORTB=0b10000000; case 10: PORTB=0b01000000; case 11: PORTB=0b00100000; case 12: PORTB=0b00010000; case 13: PORTB=0b00001000; case 14: PORTB=0b00000100; case 15: PORTB=0b00000010; case 16: PORTB=0b00000001; }//end switch }//Fine programma principale }static void interrupt timer (void){ //Test su interrupt tmr0 avvenuto if(T0IF==1){ T0IF=0; TMR0=128; xcount++; if (xcount>=100){ //E' trascorso 1 secondo... xcount=0; xtest++; if (xtest>=16){ xtest=0; } } }}
giorgio323 Inserita: 25 agosto 2009 Segnala Inserita: 25 agosto 2009 manca forse il break?senza di questo esegue tutte le istruzioni del caseswitch (espressione) {case elem1: istruzione1; break; optcase elem2: istruzione2; break; opt...case elemn: istruzionen; break; optdefault: istruzione; break; opt}
sfinge Inserita: 25 agosto 2009 Autore Segnala Inserita: 25 agosto 2009 grazie Giorgio323,proverò ad inserire i break,leggendo il manuale triky c mi era parso di capire che fossero optional.grazie ancora ciao
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