我正在尝试使用 USART 通信执行一些命令并使用 ATmega32-A 读取一些值。看看我的代码。我的问题是我正在尝试添加一些案例(嵌套开关案例),但我没有得到我想要的。我希望我能提供解决我的问题所需的所有信息。
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
switch (c) {
case 1:
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
Command = 0;
break;
case 2:
/*-------------------*/
break;
}
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
问题是未定义的 c。而且我没有看到任何 muxselection 声明,可能缺少 "" ?现在是第二种方法。
void selcase(void) {
unsigned char c;
printf("muxselection");
while (rx_counter0) {
c = getchar();
switch (c) {
case 1:
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
Command = 0;
break;
case 2:
/*-------------------*/
break;
}
}
}
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
selcase();
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
}
我的问题是我正在执行我声明的所有命令,但我想在主开关案例命令“muxsel”之一中选择更多案例。为此,我编写了嵌套开关盒。如果我在超级终端上选择“muxsel”命令,那么它会像“muxselection”一样打印,然后如果我在第二个开关中输入 1 以选择“case '1'”,则不会打印任何内容。它正在打印“找不到命令”。问题是什么。我想执行嵌套开关,但我无法使用上面的代码来做到这一点,我也试过这样。
void selcase(void) {
unsigned char c;
printf("muxselection");
while (rx_counter0) {
c = getchar();
switch (c) {
case '1':
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
c= 0;
break;
case '2':
/*-------------------*/
break;
default;
break;
}
}
}
为嵌套开关盒创建一个函数并在主开关盒中调用,如下所示。
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
selcase();
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
}
这种方式也不起作用请建议我如何克服这个问题。我想在主开关案例中选择一个命令,例如“muxsel”,然后我使用案例语句选择多路复用通道。任何帮助表示赞赏。
提前致谢。
我已经解决了这个问题。