单片机串口通信C语言编程问题
if(RI){RI=0;Rev_Data=SBUF;SBUF=Rev_Data;while(!TI);TI=0;if(Rev_Data=="t"){Sector_eras...
if(RI)
{
RI = 0;
Rev_Data = SBUF;
SBUF = Rev_Data;
while(!TI);
TI = 0;
if(Rev_Data == "t")
{
Sector_erase(0x2000); //扇区擦除
P1 = 0x55;
delay(5);
flag = 1;
i = 0;
}
else if(flag)
{
Byte_program(0x2000 + i ,Rev_Data); //写EEPROM
delay(2);
i++;
}
上面这个程序片段实现:从串口调试助手发送字符“t”到单片机,然后单片机的8个LED灯(由P1控制)应该为0101 0101的显示,但是结果表明并没有如此的现象,请问为什么呢?同时,串口初始化函数正确无误,芯片为STC89C52RC,内置2KB的EEPROM,同时EEPROM的各个子函数也是正确的。求解!!! 展开
{
RI = 0;
Rev_Data = SBUF;
SBUF = Rev_Data;
while(!TI);
TI = 0;
if(Rev_Data == "t")
{
Sector_erase(0x2000); //扇区擦除
P1 = 0x55;
delay(5);
flag = 1;
i = 0;
}
else if(flag)
{
Byte_program(0x2000 + i ,Rev_Data); //写EEPROM
delay(2);
i++;
}
上面这个程序片段实现:从串口调试助手发送字符“t”到单片机,然后单片机的8个LED灯(由P1控制)应该为0101 0101的显示,但是结果表明并没有如此的现象,请问为什么呢?同时,串口初始化函数正确无误,芯片为STC89C52RC,内置2KB的EEPROM,同时EEPROM的各个子函数也是正确的。求解!!! 展开
2个回答
展开全部
你看看接收并回传给串口助手的数据是否正确
if(Rev_Data == "t")
{
Sector_erase(0x2000); //扇区擦除。。。。把这一句注释掉,再看看结果
P1 = 0x55;
delay(5);
flag = 1;
i = 0;
}
if(Rev_Data == "t")
{
Sector_erase(0x2000); //扇区擦除。。。。把这一句注释掉,再看看结果
P1 = 0x55;
delay(5);
flag = 1;
i = 0;
}
更多追问追答
追问
你好,刚才观察过了,注释掉以后,串口助手返回的数据也是“t”,但是P1口还是没反应,也就是说根本没有运行到这句语句。。。。好坑爹的。。。
追答
if(Rev_Data == "t")这里 t 是单引号
2013-03-25
展开全部
首先你应该先确认STC(死得惨)的串口波特率是否与电脑的波特率一致,
RS-232连接是否正确。
另外一个字符应该是‘t’,而不是“t”吧?
RS-232连接是否正确。
另外一个字符应该是‘t’,而不是“t”吧?
追问
嗯。。。哥子,谢了,我把“t”换为‘t’之后就 成功了。。。随便 问一下,我这个上位机需要在短时间发送很多的十六进制数据到下位机,但是我上面这个程序运行也需要时间,所以有可能存在接收不到所有的数据的问题,我想请问一下,有没有什么方法可以让所有的数据都能接收到?
追答
采用中断方式就可以实现了,在接收中断中把接收到的数据拷贝到buf中,马上干其它活是可以的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询