Es una estructura de control empleada dentro de las condiciones comunes como el famoso if. podría ser un reemplazo de los if anidados, por ejemplo si se requiere testear una variable la cual puede tomar múltiples valores, sera mas eficiente el uso del switch ya que emplear if anidados creara mayor cantidad de código.
Se puede utilizar para testear una sola variable por ejemplo switch(variable) donde esta puede tomar valores numéricos los cuales seleccionaremos mediante case, por ejemplo si sabemos que dentro de variable podría venir el valor 64, o 128, o 256, podemos utilizar case 64:, case 128: o case 256:, esto es para valores fijos. en nuestro ejemplo utilizamos intervalos abiertos, pero podrían ser abiertos, cerrados o ambos. esto nos sirve para tomar un delta.
notese que en la sintaxis se utiliza break; esto indica que ahí terminaran las operaciones dentro de la condición case.
A continuación se mostrara un ejemplo, el mismo encenderá los leds del puerto B gradualmente según el valor de entrada del adc.
#include <16F883.h>
#device adc=8
#FUSES NOWDT
#FUSES INTRC
#FUSES NOPUT
#FUSES NOMCLR
#FUSES NOPROTECT
#FUSES NOCPD
#FUSES NOBROWNOUT
#FUSES IESO
#FUSES FCMEN
#FUSES NOLVP
#FUSES NODEBUG
#FUSES NOWRT
#FUSES BORV40
#use delay(int=4000000)
void main()
{
setup_adc_ports(sAN0|sAN1|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
int16 salida;
while(true){
set_adc_channel(0);
delay_us(10);
salida = read_adc();
switch(true){
case (salida > 0 && salida < 32):
output_b(0b00000001);
break;
case (salida > 32 && salida < 64):
output_b(0b00000011);
break;
case (salida > 64 && salida < 96):
output_b(0b00000111);
break;
case (salida > 96 && salida < 128):
output_b(0b00001111);
break;
case (salida > 128 && salida < 160):
output_b(0b00011111);
break;
case (salida > 160 && salida < 192):
output_b(0b00111111);
break;
case (salida > 192 && salida < 224):
output_b(0b01111111);
break;
case (salida > 224 && salida < 256):
output_b(0b11111111);
break;
}
}
}
No hay comentarios.:
Publicar un comentario