Vai al contenuto
PLC Forum


Istruzione Switch Case - problema di funzionamente


sfinge

Messaggi consigliati

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 16f876

Ecco 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;

}

}

}

}

Link al commento
Condividi su altri siti


manca forse il break?

senza di questo esegue tutte le istruzioni del case

switch (espressione) {

case elem1:

istruzione1;

break; opt

case elem2:

istruzione2;

break; opt

...

case elemn:

istruzionen;

break; opt

default:

istruzione;

break; opt

}

Link al commento
Condividi su altri siti

grazie Giorgio323,

proverò ad inserire i break,leggendo il manuale triky c mi era parso di capire che fossero optional.

grazie ancora ciao

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...