STC89C52与pycharm建串口通信,pycharm发送"open K0"P10口输入低压,发送"close K0"P10口输出高压,发送"open K1"P11口输入低压, 发送"close K1"P11口输出高电压,电压上位机代码,和下位机代码怎么写。
时间: 2023-10-22 11:10:15 浏览: 162
用python和C语言完成,包含一个上位机界面编程和STM3232编程 上位机完成参数设置,通过串口通信将控制指令下达给STM3
下位机代码(STC89C52):
```
#include <reg52.h>
#include <string.h>
#define FOSC 11059200UL
#define BAUD 9600
#define TIMER_1MS_RELOAD_VALUE (65536UL - (FOSC / 1000UL))
sbit P10 = P1^0; // 控制K0的引脚
sbit P11 = P1^1; // 控制K1的引脚
void init_uart() {
TMOD &= 0x0F;
TMOD |= 0x20; // 设置定时器1为模式2
TH1 = TL1 = -(FOSC / BAUD / 12);
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1
ES = 1; // 允许串口中断
EA = 1; // 允许总中断
}
void init_timer() {
TF1 = 0;
ET1 = 1;
TR1 = 1; // 启动定时器1
}
void timer_1ms() interrupt 3 {
static unsigned int count = 0;
count++;
if (count >= 1000) {
count = 0;
// 每隔1秒检测一次输入口状态
if (P10 == 0) {
SBUF = '1'; // 发送高电平
while (!TI);
TI = 0;
}
if (P11 == 0) {
SBUF = '2'; // 发送高电平
while (!TI);
TI = 0;
}
}
TH1 = TL1 = TIMER_1MS_RELOAD_VALUE >> 8; // 重新设置定时器1的重载值
TF1 = 0;
}
void main() {
init_uart();
init_timer();
while (1);
}
void uart() interrupt 4 {
static char buffer[16];
static unsigned char count = 0;
if (RI) {
RI = 0;
buffer[count] = SBUF;
count++;
if (count >= sizeof(buffer)) {
count = 0;
}
}
if (TI) {
TI = 0;
}
}
```
上位机代码(Python):
```python
import serial
import time
ser = serial.Serial('COM3', 9600, timeout=1)
def set_pin_high(pin):
cmd = f'close K{pin}'
ser.write(cmd.encode())
time.sleep(0.1)
cmd = f'open K{pin}'
ser.write(cmd.encode())
time.sleep(0.1)
def set_pin_low(pin):
cmd = f'close K{pin}'
ser.write(cmd.encode())
time.sleep(0.1)
while True:
# 控制P10口输入低电平
set_pin_low(0)
time.sleep(1)
# 控制P10口输出高电平
set_pin_high(0)
time.sleep(1)
# 控制P11口输入低电平
set_pin_low(1)
time.sleep(1)
# 控制P11口输出高电平
set_pin_high(1)
time.sleep(1)
# 接收下位机发来的电平值,并输出
while ser.in_waiting:
data = ser.read(1).decode()
if data == '1':
print('P10口状态:高电平')
elif data == '2':
print('P11口状态:高电平')
```
阅读全文