STC89C52与pycharm建串口通信,pycharm发送"open K0"P10口 输出低电压, 发送"close K0"P10口 输出高电平,发送"open K1"P11口 输出低电压, 发送"close K1"P11口 输出高电平,电压上位机代码,和下位机代码怎么写。

时间: 2023-12-24 14:47:28 浏览: 23
下位机代码: ```c #include <reg52.h> #include <string.h> // 定义串口通信相关参数 #define UART_BAUD_RATE 9600 #define TIMER1_PRESCALER 12 #define TIMER1_RELOAD_VALUE (65536 - (11059200 / TIMER1_PRESCALER / UART_BAUD_RATE)) // 定义控制 IO 口的宏 #define K0 P1_0 #define K1 P1_1 // 定义接收缓存区和接收缓存区指针 #define BUFFER_SIZE 16 volatile char buffer[BUFFER_SIZE]; volatile unsigned char buffer_pointer = 0; // 定义函数 void init_timer1(); void init_uart(); void uart_send_char(unsigned char c); void uart_send_string(char *s); void process_command(char *command); // 主函数 void main() { // 初始化定时器 1 和串口 init_timer1(); init_uart(); // 主循环 while (1) { // 如果接收缓存区有数据 if (buffer_pointer > 0) { // 处理接收到的命令 process_command(buffer); // 清空接收缓存区 memset(buffer, 0, BUFFER_SIZE); buffer_pointer = 0; } } } // 初始化定时器 1 void init_timer1() { // 设置定时器 1 的模式为 16 位自动重载模式 TMOD &= 0xF0; TMOD |= 0x10; // 设置定时器 1 的预分频器为 12 CKCON &= 0xF0; CKCON |= 0x02; // 设置定时器 1 的重载值 TH1 = TIMER1_RELOAD_VALUE >> 8; TL1 = TIMER1_RELOAD_VALUE & 0xFF; // 启动定时器 1 TR1 = 1; } // 初始化串口 void init_uart() { // 设置串口的工作模式和波特率 SCON = 0x50; TMOD &= 0x0F; TMOD |= 0x20; TH1 = 0xFD; TL1 = 0xFD; // 开启串口中断 ES = 1; // 开启全局中断 EA = 1; } // 串口发送一个字符 void uart_send_char(unsigned char c) { SBUF = c; while (!TI); TI = 0; } // 串口发送一个字符串 void uart_send_string(char *s) { while (*s) { uart_send_char(*s++); } } // 处理接收到的命令 void process_command(char *command) { // 如果命令是 "open K0" if (strcmp(command, "open K0") == 0) { K0 = 0; uart_send_string("P10 output low\r\n"); } // 如果命令是 "close K0" else if (strcmp(command, "close K0") == 0) { K0 = 1; uart_send_string("P10 output high\r\n"); } // 如果命令是 "open K1" else if (strcmp(command, "open K1") == 0) { K1 = 0; uart_send_string("P11 output low\r\n"); } // 如果命令是 "close K1" else if (strcmp(command, "close K1") == 0) { K1 = 1; uart_send_string("P11 output high\r\n"); } } // 串口中断服务程序 void uart_isr() interrupt 4 { if (RI) { // 读取接收到的字符 char c = SBUF; // 如果接收缓存区未满 if (buffer_pointer < BUFFER_SIZE - 1) { // 将接收到的字符添加到接收缓存区中 buffer[buffer_pointer++] = c; } RI = 0; } } ``` 上位机代码: ```python import serial import time # 定义串口通信相关参数 BAUD_RATE = 9600 PORT = "COM1" # 定义命令字符串 OPEN_K0 = "open K0" CLOSE_K0 = "close K0" OPEN_K1 = "open K1" CLOSE_K1 = "close K1" # 初始化串口 ser = serial.Serial(PORT, BAUD_RATE, timeout=0.1) # 输出低电压 ser.write(OPEN_K0.encode()) print(ser.readline().decode()) # 输出高电压 ser.write(CLOSE_K0.encode()) print(ser.readline().decode()) # 输出低电压 ser.write(OPEN_K1.encode()) print(ser.readline().decode()) # 输出高电压 ser.write(CLOSE_K1.encode()) print(ser.readline().decode()) # 关闭串口 ser.close() ```

相关推荐

最新推荐

recommend-type

pycharm下python使用yolov3/yolov3-tiny训练好的权重文件.weights进行行人检测,批量测试自定义文件夹下的图片并输出至指定文件夹

python使用yolov3/yolov3-tiny训练好的权重文件.weights进行行人检测,批量测试自定义文件夹下的图片并输出至指定文件夹 目录 python使用yolov3/yolov3-tiny训练好的权重文件.weights进行行人检测,批量测试自定义...
recommend-type

Pycharm添加源与添加库

Pycharm添加源与添加库Pycharm添加源1.点击file,选择settings进入到package添加界面2.点击右上角加号3.点击左下角manage repositories4.点击右上角加号5.输入你需要的源添加库1.前两步跟上面一样2.搜索框输入你要的...
recommend-type

Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题)

主要介绍了Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题),本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

pycharm操纵excel(萌新教程)

pycharm(python)对excel进行一些基本操作 第一次在csdn上写博客,花了我一个上午/(ㄒoㄒ)/~~,不过还是写好了。如果有不对的地方,希望大佬们批评指正。 一定要看到最后!!直接看最后也行! 前期的一点小准备 ...
recommend-type

Pycharm编辑器功能之代码折叠效果的实现代码

 在一些情况下,如果某些代码显得不太重要,我们可以通过Pycharm的代码折叠功能将其折叠为一行。在接下来的部分我们将介绍代码折叠功能基本用法。  2、代码可折叠轮廓线以及折叠开关  首先,我们观察一下代码左侧...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。