【Python串口通信理解】
【Python串口通信指令】
Python3以上串口通信需要安装pyserial包,我用到的操作比较简单,涉及串口打开、写数据、读数据、关闭串口等操作。
串口打开:ser=serial.Serial(端口名,波特率,……)
写数据:ser.write(内容.encode('utf-8'))
读数据:ser.read(1)
关闭串口:ser.close()
【Python上位机代码】
import easygui as gui
import sys
import serial
#代码行执行打开串口及发送内容时,打开串口与发送内容之间要间隔0.5秒以上,不然无法发出内容
def main():
stflag='s'
gui.msgbox('上位机程序:波特率4800,COM5')
ser = serial.Serial('COM5', 4800)
if gui.ccbox('确定开始吗', '启动',choices=['确定','取消']):
if ser.isOpen():
ser.write(stflag.encode("utf-8"))#发送信息编解码可以utf-8,也可以使用ascii编码
_=ser.read(1)#初次读取串口为0,第一次读取删去
rec = ser.read(1)
print(rec.decode("utf-8"))
else:
print('串口未正常开启')
sys.exit(0)
else:
ser.close()
sys.exit(0) # 选择取消,退出程序
if __name__ == "__main__":
main()
【C51代码】
#include <REGX52.H>
void UART_Init()//4800 @11.0592 波特率不加倍
{
PCON |= 0x80;
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TL1 = 0xF4;
TH1 = 0xF4;
ET1 = 0;
TR1 = 1;
EA=1;//允许中断
ES=1;
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
unsigned char serialflag=0;//定义串口交互成功标志位
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4
{
if(serialflag==0) //初次接收上位机启动交互信息
{
if (SBUF==0x73)
{
P1=0x00;
UART_SendByte('y');
serialflag=1;
}
}
else
P1=SBUF;//标志位变更,后续连续接收上位机信息
RI=0;
}
参考链接:
python库之pyserial用法,pyserial和serial的区别_Electrical_IT的博客-CSDN博客_pyserial