case之后应该是整形常量 |
加个断点看看收到的是什么值 |
重新输入 |
发送字符a,b都不能控制的原因是在串口助手里要选择文本模式。文本模式下'a'=0x41,'b'=0x42。中断函数这样写试试。 void Com_Int(void) interrupt 4 { RI = 0; cmd = SBUF; //这里接收到的是16进制 SBUF = cmd; //回传接收到的数据 while(!TI); //等待发送中断请求标志位为1 TI=0; //发送中断请求标志位清0 switch(cmd) { case('a'): SG1_count = 25;break; case('b'): SG1_count = 5 ;break; default: break; } } ![]() |
那啊啊啊 发表于 2018-11-1 23:09 cmd的类型吗 |
从编译后的汇编程序看,没有问题的,查查其他原因: 20: switch(cmd) C:0x0035 E502 MOV A,cmd(0x02) C:0x0037 249E ADD A,#0x9E C:0x0039 6008 JZ C:0043 C:0x003B 04 INC A C:0x003C 7008 JNZ C:0046 21: { 22: case 'a': 23: SG1_count = 25; C:0x003E 750319 MOV SG1_count(0x03),#0x19 24: break; C:0x0041 8003 SJMP C:0046 25: case 'b': 26: SG1_count = 5; C:0x0043 750305 MOV SG1_count(0x03),#0x05 27: break; 28: default: break; 29: } |
case(0): case(1): 这样试一下。 |
类型不对 |
qq948096770 发表于 2018-11-1 19:03 意思是要重新定义cmd的类型吗 |
case后面必须是整形常量 |
类型不对吧,switch(整数A)---case A的可能值 |