win10下CH340模块下载stc89c52程序

没想到读研究生了还有水课需要用上51单片机,本科的时候一直是用开发板烧录程序的,这次舍不得花钱买开发板只能瞎折腾了。

准备材料

1.ch340转接板,最普通的那种3~5块钱

在这里插入图片描述

2.买的是一个焊接好的小单片机系统

(BB一句,这个店家好坑,推荐我买一个下载器,然后我买回来才发现不是通用的,浪费了10几块!!!!)
在这里插入图片描述

3.烧录软件

stc-isp的也可以用,我偷懒用了单片机开发板的软件,没有的可以自行下载
链接:https://pan.baidu.com/s/1Ijt1jHBcvuH12Xi8JFXzDg
提取码:fei5
在这里插入图片描述

模块接线(超重要)

只接三根线,GND,TXD,RXD,电源全不接,保证在烧录之前是全断电状态
在这里插入图片描述
在这里插入图片描述

  • 安装CH340驱动(win10系统)
    链接:https://pan.baidu.com/s/1RJ3IlFgfYDim5G4JbrKoeg
    提取码:d5ob

1.安装成功后,插入模块(在插入模块时,51单片机在关机状态)

2.打开设备管理器

如下图则安装正常
在这里插入图片描述

烧录程序

1.先断电(超重要)

2.打开文件选择下载程序

在这里插入图片描述
如上图,马上打开电源
在这里插入图片描述
就可以成功了!

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STC89C52是一种常用的8051系列单片机,其串口通信程序实现步骤如下: 1. 配置串口参数:波特率、数据位、停止位、校验位等。一般使用Timer1来作为波特率发生器,可以根据需要配置波特率。 2. 初始化串口:开启串口中断,使能全局中断。 3. 发送数据:将要发送的数据放入串口发送缓存区中,等待发送完成中断。 4. 收数据:当收到数据后,会触发串口收中断,在中断函数中将收到的数据放入收缓存区中。 5. 处理数据:可以通过轮询或者中断方式来读取收缓存区中的数据,并进行相应的处理。 6. 清空缓存区:在每次使用完缓存区后需要清空,以便下次使用。 以下是STC89C52的串口通信程序示例: ```c #include <reg52.h> #include <stdio.h> #define BAUDRATE 9600 // 波特率 #define TIMER1_RELOAD 0xFD // Timer1重载值 unsigned char send_buffer[32]; // 发送缓存区 unsigned char recv_buffer[32]; // 收缓存区 unsigned char send_ptr; // 发送指针 unsigned char recv_ptr; // 收指针 void init_uart() { TMOD |= 0x20; // 设置Timer1为工作模式2 TH1 = TIMER1_RELOAD; TL1 = TIMER1_RELOAD; TR1 = 1; // 启动Timer1 SCON = 0x50; // 8位数据位,可变波特率,允许收 ES = 1; // 开启串口中断 EA = 1; // 开启全局中断 } void send_char(unsigned char ch) { send_buffer[send_ptr++] = ch; TI = 1; // 触发发送中断 } void send_string(unsigned char *str) { while (*str) { send_char(*str++); } } void clear_send_buffer() { for (int i = 0; i < 32; i++) { send_buffer[i] = 0; } send_ptr = 0; } void clear_recv_buffer() { for (int i = 0; i < 32; i++) { recv_buffer[i] = 0; } recv_ptr = 0; } void main() { init_uart(); while (1) { // 处理收到的数据 if (recv_ptr > 0) { // TODO: 处理收到的数据 clear_recv_buffer(); } // 发送数据 send_string("Hello, world!\r\n"); clear_send_buffer(); } } // 串口中断函数 void uart_isr() interrupt 4 { if (RI) { // 收中断 recv_buffer[recv_ptr++] = SBUF; RI = 0; // 清除中断标志位 } if (TI) { // 发送中断 if (send_ptr > 0) { SBUF = send_buffer; for (int i = 0; i < send_ptr - 1; i++) { send_buffer[i] = send_buffer[i + 1]; } send_ptr--; } else { TI = 0; // 没有数据需要发送,清除中断标志位 } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值