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 (piaoyunsoft@163.com)
# @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;
	}
	}
}


你可能感兴趣的文章

评论区

已有1位网友发表了看法:

1L 访客  2021-07-11 10:01:08 回复
想问一下具体如何操作的,就是如何实现串口发送

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。