Python与C51单片机交互,嘿嘿,其实是在OSX下用串口交互了~~
1.首先装上CH340/CH341 For Mac USB转串口驱动程序
2.安装Python串口模块 pip install pySerial
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2016-08-14 19:47:05 # @Author : PiaoYun ([email protected]) # @Link : http://www.dllhook.com import serial import time def test(): # 连接单片机 ser = serial.Serial('/dev/tty.wchusbserial1420', 9600) # 查看状态 if ser.isOpen(): # 发送指令 -- 方便测试 写个死循环 while True: for x in xrange(0, 3): ser.write(str(x)) #图片上面忘记写读取单片机传回来数据的代码了,这里补上... s = ser.read(10) print s time.sleep(2) # 端口连接 ser.close() if __name__ == '__main__': test()
// 单片机程序
#include <reg52.h>
uint8 c;
uint8 flag;
void initUART(void)
{
TMOD = 0x20; // 定时器工作方式2
//SCON = 0x50; // 打开串口为方式1-如下分解:
SM0 = 0;
SM1 = 1;
SM2 = 0;
REN = 1;
TH1 = 0xFD; // 波特率6900
TL1 = TH1;
EA = 1; // 打开中断总开关
ES = 1; // 打开串口中断开关
TR1 = 1; // 启动定时器1
}
// 发送一个字节数据
void sendOneByte(uint8 c)
{
SBUF = c;
while(!TI); // 等待数据发送结束
TI = 0;
}
// 串口中断
void serial() interrupt 4
{
flag = 1;
c = SBUF;
if(RI)
{
RI = 0;
//P1 = c;
// 这里随便写了两个功能
switch (c)
{
case '1':
P1 = 0xAA;
break;
case '2':
P1 = 0x55;
break;
default:
P1 = 0xFE;
break;
}
}
else
TI = 0;
}
void main(void)
{
initUART();
P1 = 0x7F;
while(1){
if (flag == 1)
{
ES = 0; // 关闭串口中断
flag = 0; // 复位标记
sendOneByte('p');
sendOneByte('i');
sendOneByte('a');
sendOneByte('o');
sendOneByte('y');
sendOneByte('u');
sendOneByte('n');
ES = 1;
}
}
}

已有871位网友发表了看法:
发表评论