Python上位机与C51单片机串口通信

本文介绍了如何使用Python进行串口通信,包括打开串口、写入数据、读取数据和关闭串口的基本操作。同时展示了Python上位机代码,通过pyserial库实现与C51单片机的通信。C51代码中实现了串口初始化、发送和接收数据的中断处理。通过上位机发送特定字符,C51设备将响应并进行后续通信。
摘要由CSDN通过智能技术生成

【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

Python 实现串口调试助手_felix_fang_xin的博客-CSDN博客_python 串口助手

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值