项目中遇到需要用电脑通过串口来控制单片机IO口,查询了一些资料,可以使用python来实现简单的串口通信,
所以用python实现了一个简单的单片机串口助手,可以将串口助手发往单片机的字符回传给串口助手。也可以
将配合单片机程序对单片机进行控制。
python实现的串口助手代码如下:
import time; #需要调用延时函数
import serial #需要调用串口库
import binascii #需要将传送的字符进行转换
if __name__ == '__main__':
ser = serial.Serial(); #生成串口
ser.baudrate = 4800 #设置串口波特率
ser.port = 'COM4' #设置串口号
ser.timeout = 0.1 #设置串口通信超时时间
ser.close() #先关闭串口,以免串口被占用
ser.open() #打开串口
print(ser.is_open) #打印串口状态
strSerial = '' #初始化串口传输字符串
if(ser.is_open):
while(strSerial != '0'): #判断输入是否为'0',为'0'则退出循环
strSerial = raw_input('Input:') #输入传输字符串
strHex = binascii.b2a_hex(strSerial) #将传输字符串转换为16进制
strhex = strHex.decode("hex") #以十六进制解码,这两行必须有,不然会回传乱码
ser.write(strhex) #将传输字符串写入串口
time.sleep(1) #延时1s,时间可以设置,最好设置大点,以免传输字符过多,传输
#时间过长,回传失败
n = ser.inWaiting(); #求取串口缓存中回传的字符个数
print 'n=',n #打印字符个数
if n:
data = '';
data = ser.read(1000); #读取缓存中1000个字符,值越大越好,如果该值小于传输字
#符总长度,多余的字符会被抛弃
print 'get data from serial port:',data; #打印回传的字符
ser.close() #程序结束时关闭串口,以免串口被占用
print not ser.is_open
单片机下位机程序如下:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 receiveData;
void UsartInit()//初始化串口
{
TMOD = 0X20;
TH1 = 0XF3;
TL1 = 0XF3;
PCON = 0X80;
TR1 = 1;
SCON = 0X50;
ES = 1;
EA = 1;
}
void main()
{
UsartInit();
while(1)
{
};
}
void uSART() interrupt 4 //用中断处理串口通信
{
receiveData = SBUF; //将单片机接收缓存中的字符存入receiveData
RI = 0;
SBUF= receiveData; //将receiveData中的字符存入单片机发送缓存
while(!TI); //等待回传完成
TI = 0;
}
程序运行结果如下:
对单片机下位机处理函数加以扩展,根据接收到的不同字符做出不同的动作,就可以通过串口助手对单片机
加以控制,以下程序可以通过串口控制单片机的IO口,将单片机的IO口与发光二极管相连,就可以控制二极管亮灭
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit SUNROOF_OPEN = P2^0;
sbit SUNROOF_CLOSE = P2^1;
sbit SUNSHADE_OPEN = P2^2;
sbit SUNSHADE_CLOSE = P2^3;
u8 receiveData;
void UsartInit()
{
TMOD = 0X20;
TH1 = 0XF3;
TL1 = 0XF3;
PCON = 0X80;
TR1 = 1;
SCON = 0X50;
ES = 1;
EA = 1;
}
void main()
{
UsartInit();
P2 = 0; //P2口先置0,发光二极管全灭
while(1)
{
switch(receiveData)//根据接收到的值控制对应的IO口输出高低电平
{
case 'A'
SUNROOF_OPEN = 1;
break;
case 'B':
SUNROOF_OPEN = 0;
break;
case 'C':
SUNROOF_CLOSE = 1;
break;
case 'D':
SUNROOF_CLOSE = 0;
break;
case 'E':
SUNSHADE_OPEN = 1;
break;
case 'F':
SUNSHADE_OPEN = 0;
break;
case 'G':
SUNSHADE_CLOSE = 1;
break;
case 'H':
SUNSHADE_CLOSE = 0;
break;
default:
break;
}
};
}
void uSART() interrupt 4
{
receiveData = SBUF;
RI = 0;
SBUF= receiveData;
while(!TI);
TI = 0;
}
程序运行结果如下:
串口助手发送命令:
单片机做出响应:
串口再次发送命令:
单片机再次做出响应:
可以对单片机和串口助手程序加以扩展,实现更复杂的功能
上一篇:51单片机之IO口扩展——74HC595芯片串行转并行实验
下一篇:KEIL软件使用方法,创建一个工程
推荐阅读最新更新时间:2024-11-06 10:10
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD46301 的参考设计
- 立创航顺物联网开发板
- 基于VL53L3CX的多目标测距传感器扩展板,适用于STM32 Nucleo
- 基于KP1071非隔离LED恒流驱动
- 三轴霍尔传感器验证板ALS31300EEJASR-2000
- LDK120C15R 1.5V低压降稳压器典型应用(可调版)电路
- 用于数据采集系统的 12 位、188KSPS、8 通道 ADC
- LT1171HVIT 的典型应用,2.5A 外部电流限制
- DRAGONBOARD AUDIO MEZZ,音频夹层板是创建需要外部音频的多媒体系统的最简单方法
- 使用 Semtech 的 SC1202 的参考设计
- TE 物联网专属平台齐上线,您值得拥有的专业全能助手
- 芯(E)币兑换Nucleo扩展板:让你的Nucleo变身成pyboard
- ST有奖直播:智能功率开关在工业自动化行业的应用
- 【评论有礼!】Sleepace RestOn 智能睡眠监测仪拆解
- 月度原创精选评选2018年5月(总第4期)
- NI白皮书下载《如何克服复杂待测设备的生产测试挑战》
- 有奖直播|5G多场景终端应用对连接器的新要求及Molex的5G连接方案
- 【EEWORLD第三十九届】2012年06月社区明星人物揭晓!
- 25美分实现25种功能的TI MSP430铁电超值微控制器方案即将直播!快来报名围观!
- 有奖直播|多款MSP430™片上Sigma-Delta ADC助力高精度信号检测应用 报名中