|
本帖最后由 慕名而来 于 2025-6-23 15:55 编辑
玩了太久的二手价签墨水屏,烦了,十多天不焊东西手痒、心痒、浑身不舒服,忽然想起来手里还有一个前年打好的PCB小板子没有焊件,于是有了这个制作。玩STC单片机十好几年了,从开始上手到现在也做了五六个下载线了,本坛的老站、新站也都有发帖显摆过,我真的不缺这东西,仅厂家免费送的就有:1.USB-Link 1D。2.一箭双雕之USB转双串口。3.USB转双串口@AI8H2KUV-1.1。这些多功能下载线、实验板因为有厂家固件加成工作稳定使用方便。除了这些“标准件”还有已经退役的那些网购的HC340G-TTL小板、自制的MAX232烧录线。
综上,本次DIY对于我而言就是一个打发无聊的制作,记录于此仅供消遣。而有对于这个制作感兴趣的新手朋友对这个烧录线有疑问的话可以跟帖讨论,至于用电脑原生COM口给单片机烧录代码的稳定性就毋庸置疑了,只是现在很多电脑早已经没有了这个9针接口,而有些电脑虽然没有外置接口但某些主板却仍旧保留了插针,喜欢玩的就找找吧,这个烧录线做成后我测试了手里的几种STC单片机,除AI8051U需要降低一点最高波特率以外其他都是一蹴而就成功完成。
原理很简单,一片8脚的STC15W204S单片机做监控芯片,它的INT0端口实时监控电脑COM口的DTR线信号,一旦该信号出现高电平跳变就输出控制信号操控继电器断开负载电源,并且延时一段时间后重新给负载上电,而后再等待一段时间后重新恢复监控功能,在监控芯片的等待过程中电脑完成了对目标单片机的程序下载,电路中配置了一个自锁按键开关、一个轻触按键、一个拨动开关,其中:自锁开关做5V、3.3V供电输出的转换,也正是由于这个开关的限制使得本系统输出电流不大于300mA,在此也提醒一下:如果仿制请在输出电压的正极回路添加一个500ma的自恢复保险元件,既可以保护开关更可以避免负载因意外反接引起的电流超载。轻触开关可以直接控制负载电源的通断。拨动开关常态位时系统工作在烧录工作状态,拨动开关换位后系统工作在串口通讯工作状态,此状态下每次打开串口时系统不做断电操作,其他详见下图:
PCB图:
制成品图:
程序的控制原理在代码中有详细注释
- //代码编写于2025/06/15
- //下载监控用单片机:STC15W204S
- //程序烧录时设定时钟频率11.0592MHz
- //控制方式为:COM1_DTR信号触发监控芯片外部中断INT0(P3.2)控制负载断电/延时通电
- //COM1_DTR引脚信号经二极管整流及10K+2K电阻分压得到0-2.4V的信号电平
- //对目标板进行二次烧录的间隔时间应大于3秒钟等待监控芯片阻塞结束
- //1.自锁开关可以切换5V/3V供电
- //2.轻触开关可以手动断电
- //3.拨动开关可以切换串口烧录/串口通讯,解决打开串口时自动断电的问题
- //----------------------------------------------------------------------------
- #include "STC15.h"
- #include <intrins.h>
- //========================================
- sbit power_reset = P5 ^ 4; //继电器驱动端
- sbit STC_isp = P3 ^ 3; //烧录/串口通讯控制端,浮空=烧录、下拉=串口通讯
- bit flag;
- unsigned char n;
- //========================================
- void Delay_1ms(unsigned int t)//11.0592MHz@t毫秒
- {
- unsigned char i, j;
- while(t--)
- {
- _nop_();
- _nop_();
- i = 12;
- j = 168;
- do
- {
- while(--j);
- } while(--i);
- }
- }
- //====外部中断INT0响应COM口DTR信号中断函数========
- void INT0_ser()interrupt 0
- {
- if(INT0 == 1)
- {
- flag = 1;
- }
- else
- {
- flag = 0;
- }
- }
- //====主函数=======================================
- void main()
- {
- P5M0 = 0x10; //P5.4推挽输出
- P5M1 = 0x00;
- INT0 = 1; //P3.2口置1
- IT0 = 0; //配置INT0响应上升沿&下降沿中断
- EX0 = 1; //使能INT0中断
- EA = 1;
- power_reset = 0; //继电器断开状态、常闭接点为目标板供电
- flag = 0;
- while(1)
- {
- if(flag && STC_isp)
- {
- EX0 = 0; //关闭外部中断
- flag = 0;
- power_reset = 1; //目标板单片机断电
- Delay_1ms(1500);
- power_reset = 0; //目标板单片机得电复位开始烧录
- Delay_1ms(3000); //监控芯片阻塞3秒钟等待目标板烧录完成、规避串口断开时COM1_DTR的下降沿二次触发中断
- EX0 = 1; //重开外部中断响应下次操持
- }
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|