你这程序,应该是先由上位机向单片机发送1,2,或其它字符吧,
下面是单片机的接收程序
void ser()interrupt 4
{
RI = 0;//接受完成置1这里清0
a = SBUF;
flag_uart = 1;
if(a == 1)
flag_on = 0;
else if (a == 2)
flag_on = 1;
else
flag_on = 2;
}
那问题来了,电脑是用什么向单片机发送字符的,是串口调试助手吗?那发送的字符1,2或其它的,以是字符形式发送吧,那就是ASCII码,单片机收到的可就不是1,2了,而是ASCII的1,2。
所以,if 语句的判断就不对了。应该是这样的
void ser()interrupt 4
{
RI = 0;//接受完成置1这里清0
a = SBUF;
flag_uart = 1;
if(a == ‘1’) //这才是ASCII码的形式
flag_on = 0;
else if (a == ‘2’)
flag_on = 1;
else
flag_on = 2;
}