标题:
求助关于单片机串口与PYTHON上位机传递信息
[打印本页]
作者:
birdzhyli
时间:
2021-5-2 21:56
标题:
求助关于单片机串口与PYTHON上位机传递信息
我的程序中PYTHON上位机通过串口发送数据给单片机,每次发送10行,每发送一行单片机会给上位机返回一个字符,上位机收到字符后发送下一行,10行发送完成后等待单片机处理完毕后,单片机会再发送一个字符给上位机,上位机继续传递下10行数据,如此循环至数据发送完成。
上位机代码如下:
try:
#端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="COM7"
#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
timex=5
# 打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
# 写数据到串口
j=0
for i in range(len(data1)):
j=j+1
print(data1[ i],end="")
ser.write(data1[ i].encode('UTF-8'))
msg=ser.read(1)
while(msg!=b'A'):#等待一行发送完成得到回应A
msg=ser.read(1)
if(j ==10 ):
print("%d条代码发送完,正在处理"%(i+1))
while(msg!=b'B'):#发完10行等待再次发送的指令B
msg=ser.read(1)
j=0
ser.write('$'.encode('UTF-8'))#写完完毕,发结束信号
print("传送完成完毕")
ser.close()#关闭串口
单片机串口接收程序如下:
if(RI)
{
if(recf==1)//接收g指令
{
if(SBUF)
{
recbuf[compos][recpos]=SBUF;
recpos++;
}
if(SBUF=='\n')
{
compos++;
recpos=0;
SBUF='A';//收完一行返回一个A
while(!TI)
TI=0;
if(compos==10)
{
recf=0;//暂停接收
wrif=1;//开始执行
}
}
if(SBUF=='$')//传送结束标志
{
recbuf[compos][recpos]=0;
recf=0;//暂停接收
wrif=1;//开始执行
}
RI=0;
}
}
下面是主函数while循环中的处理完10行返回一个字符给上位机
4.jpg
(14.41 KB, 下载次数: 49)
下载附件
2021-5-2 21:53 上传
下面是问题:
每次单片机运行开始,等待上位机传递数据。每次传送不一定成功,偶尔会出现只传送2行就卡住不动了,单片机复位或重启,再重新传送才能成功。
不是每次都出现,有时出现有时不出现,故障率30%左右,自查没找到原因,求教大佬,谢谢
作者:
birdzhyli
时间:
2021-5-2 21:57
单片机用的是独立波特率发生器
void uart1_init()//使用独立波特率发生器
{
SCON=0x50; //[bit6:5]SM1 SM2 = 1 0;[bit4]REN=1
AUXR=0x15; //[bit4]BRTR=1,允许独立波特率发生器运行;[bit0]SIBRS=1,独立波特率作为串口1的波特率发生器,此时定时器1释放,[bit2]BRT*12=1,工作在1T
BRT=0XFD; //独特波特率发生器定时器(产生波特率9600*12=115200)
EA=1; //开启总中断
ES=1;
}
作者:
birdzhyli
时间:
2021-5-2 21:58
与上位机的通信是否有好的方法?我都是一个人在家里闭门造车,请大佬们指路
作者:
birdzhyli
时间:
2021-5-5 22:02
自己顶一下,大佬们有时间给点建议
作者:
2627687547
时间:
2022-6-9 21:22
请问题主有用pythonmodbus协议通讯相关的经验吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1