⑴ 单片机通过串口向PC不间断发送变化的数据,PC接收总是延迟
这个问题很常见了,解决方法:
如果你能更改上位机软件,将上位机软件接收数据那块改为"一旦接收缓冲区有数据,立刻读出来显示".
如果你没办法更改上位机软件,那么你可以间隔发送,比如两包数据间隔为0.5S,或者找一款可以实时显示的调试助手,推荐使用ttermpro测试下
⑵ 单片机串口发送数据不及时怎么处理
不是很明白你要实现的功能。
你的中断函数里写的是如果接收到串口信息时,就将标志位置1,同时获取此时P1口的按键状态。
然后主程序检测到标志位被置1,就将刚刚获取的P1口按键状态发回给上位机是这样吗?
不用说了,肯定是这样。
我说说你程序的问题吧,首先你的P1口到底接了些什么外围电路我不知道,如果是按键,还分哪类按键呢,比如拔动开关,或者是普通按键。如果是拔动开关的话,那麽这个程序也没多大问题。因为拔动开关是可以让你的按键电平锁定在高电平或低电平的,但如果是普通按键的话,那麽你的程序就很大问题了。
首先要产生RX信号,让程序进入中断,同时你的按键要按下。两步要同时。所以导致你要不断地按,狂按。
其实如果你的单片机不接收上位机传来的串口信号,可以直接去掉中断的。
while(1)
{
if(P1!=0XFF) // 证明有按键按下
{
pd1=P1; //将值取出。
while(P1!=0xff) ; //直到松手。
SBUF=pd1; //SUBF接受/发送缓冲器
P2=pd1;
//delay(); 这句delay没多大意义。
while(TI==0);
TI=0;
Flag=0;
}
}
也可能是我误解了你的意思,有什么问题欢迎一起探讨,希望我的回答对你有帮助。
⑶ 单片机串口通信,发送数据感觉不对,请大佬帮看看
你的主循环转得太快,前一个数据还没发送完就把SBUF又填充新数值,这样很容易破坏发送的帧。
既然你不开中断,就应当采用查询工作方式,查询TI标志位确认发送完成之后再进行下一步工作。
⑷ 51单片机 开启串口TI后时钟变慢
第一:这种情况只有在开串口中断才会出现,你的程序中有IE=0x90;的语句吗?
第二:开启串口发送,是向SBUF中送数,如SBUF=0x8AH;但不能人为地TI=1,这样做是错误的,当串口发送一个字节后会自动置TI=1的,表示已发送完一个字节,这样,要由软件清TI=0,再发送下一个字节。
第三,人为地置TI=1,就会出现在没有发送数据的情况下也会产生中断,如果还没有串口中断子函数,也没有清TI=0的语句,就会不停地中断,当然就会影响执行延时子函数,那延时的时间肯定要长了。
⑸ stc8h单片机串口通讯数据不发送
stc8h单片机串口通讯数据不发送如果都配置检测没什么问题,能够正常的发送数据但是不能够接收数据的话就要考虑是不是IO没有配置好。将指指基RX的端口配置成设置I/O口为准双向口模式,唯谨再次逗好进行尝试。