STC89C52与pycharm建串口通信,pycharm发送"open K0"P10口输出低电平,发送"close K0"P10口输出高电平,发送"open K1"P11口输出低电平,发送"close K1"P11口输出高电平,上位机代码,和下位机代码怎么写。
时间: 2023-12-21 09:23:04 浏览: 40
下位机代码(STC89C52):
```
#include <reg52.h>
sbit K0 = P1^0; // P10口
sbit K1 = P1^1; // P11口
void main()
{
TMOD = 0x20; // 设置定时器1为模式2
TH1 = 0xfd; // 波特率设置为9600
TL1 = 0xfd;
SCON = 0x50; // 串口模式1
TR1 = 1; // 启动定时器1
ES = 1; // 开启串口中断
EA = 1; // 开启总中断
K0 = 1; // 初始化K0口为高电平
K1 = 1; // 初始化K1口为高电平
while(1);
}
void serial() interrupt 4
{
if(RI) // 接收到数据
{
RI = 0; // 清除接收标志位
switch(SBUF)
{
case 'o': // 打开
if(RI) // 接收到第二个字符
{
RI = 0; // 清除接收标志位
switch(SBUF)
{
case 'p': // P10口
K0 = 0;
break;
case 'q': // P11口
K1 = 0;
break;
default:
break;
}
}
break;
case 'c': // 关闭
if(RI) // 接收到第二个字符
{
RI = 0; // 清除接收标志位
switch(SBUF)
{
case 'p': // P10口
K0 = 1;
break;
case 'q': // P11口
K1 = 1;
break;
default:
break;
}
}
break;
default:
break;
}
}
}
```
上位机代码(Python):
```
import serial
import time
ser = serial.Serial('COM1', 9600, timeout=0.5) # 打开串口
def send_command(command):
ser.write(command.encode()) # 发送命令
time.sleep(0.1) # 等待下位机执行完毕
return ser.read_all().decode().strip() # 返回下位机响应的信息
print(send_command('open K0')) # 打开P10口
print(send_command('close K0')) # 关闭P10口
print(send_command('open K1')) # 打开P11口
print(send_command('close K1')) # 关闭P11口
ser.close() # 关闭串口
```
阅读全文