数码之家
标题:
逆潮流而动、做一个另类的USB-TTL/STC_ISP自动下载线(多图、附源码)
[打印本页]
作者:
慕名而来
时间:
2022-11-16 11:57
标题:
逆潮流而动、做一个另类的USB-TTL/STC_ISP自动下载线(多图、附源码)
最近好多帖子都用到了STC的USB下载、调试,可以预见STC单片机通过USB来下载烧录、调试仿真应该会成为主要方法,而我仍然要做一个串口的STC_ISP下载线,所以算是“逆潮流而动”了。
一、制作原因:
STC_ISP下载线需要用到电源开关和对应不同电压芯片的电压转换开关,对于电源开关一般都是通过不同的方法进行自动控制,而电压切换却总是需要开关控制的。有许多USB-TTL模块上带有5V、3.3V的输出电压,通过调整插线就可以为不同电压的芯片烧录代码,但这种应用在台式电脑上需要用一根USB延长线来将电脑USB接口弄到桌面上来连接USB-TTL模块,而这种延长线的母座用一段时间后就经常会接触不良,本制作就是应对这种应用场景的,其他应用方式在此不做讨论。
二、设计方案:
方案很简单,就是将USB-TTL模块固定插接到电脑后侧的USB口,将串口线延长后与桌面上的这个小板子连接,而USB-TTL模块仅输出5V电源和5V电平的串口信号,电源电压和信号电平的变换由这个小板子来完成、选择不同的插针为不同电压的单片机烧录代码。
三、原理、PCB、制成品图片:
[attach]1663972[/attach]
[attach]1663974[/attach]
[attach]1663971[/attach]
[attach]1663973[/attach]
四、控制代码:
//代码原创wannenggong于2022年11月4日、应用或分享此代码时请标明出处
//下载监控芯片:STC15W204S(SOP8贴片)
//代码烧录时设置内部时钟频率为11.0592MHz
//控制原理:利用CH340G_RTS通讯期间出现的低电平信号触发监控单片机、控制目标STC单片机断电烧录
//目标芯片下载过程中LED闪烁、下载完成后蜂鸣器响三声提示音
#include<STC15W.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//--------------------------------------------------------------
sbit Power=P3^3; //电源开关控制端
sbit LED=P3^2; //电源指示灯
sbit Buzzer=P5^5; //5V有源蜂鸣器控制端、设置为推挽输出
sbit Signal=P5^4; //CH340G_RST低电平信号检测端、设置为高阻输入
bit flag,flag_BB; //flag-启动下载标志、flag_BB-蜂鸣器响3声标志
//----n个100毫秒延时函数----------------------------------------
void delay_100ms(uchar n)//@11.0592MHz
{
uchar i, j, k;
do
{
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
while (--n);
}
//----n微秒延时函数-----------------------
void delay_nus(uint n) //@11.0592MHz
{
do
{
_nop_();
_nop_();
_nop_();
}
while (--n);
}
//----下载完成后提示音(三声)-------------------------
void Buzzer_set(void)
{
uint a;//定义变量用于发声的长度设置
uchar b;
if(flag_BB)
{
flag_BB=0;
for(b=3; b>0; b--)
{
for(a=300; a>0; a--)
{
Buzzer = ~Buzzer;//取反扬声器驱动口,以产生音频
delay_nus(400);//单音长度设置
}
delay_100ms(1);
}
Buzzer = 0;
}
else
Buzzer = 0;//发声结束后扬声器关闭
}
//====主函数===========================================
void main(void)
{
P5M0=0x20;
P5M1=0x10; //设置P5.4为高阻输入、P5.5为推挽输出
P3M1=0x00;
P3M0=0x08; //p3.3推挽输出用于驱动NMOS
Power=1; //开关打开
LED=0; //点亮指示灯
Buzzer=0; //不发声
Signal=1; //置高电平等待检测低电平信号
flag_BB=1; //清除蜂鸣器标志
flag=0; //清除下载启动标志
while(1)
{
if(Signal==0)
{
delay_100ms(10);
if(Signal==0)
{
flag=1;
}
}
if(flag)
{
Power=0;
LED=1;
delay_100ms(5); //断电0.5s后为单片机上电
Power=1;
while(Signal==0)
{
LED=~LED; //下载过程中闪烁提示、等待操作完成
delay_100ms(1);
}
return;
}
LED=0;//电源指示灯亮起
Buzzer_set();//响三声提示下载结束
}
}
复制代码
焊接:
https://www.mydigit.cn/thread-393650-1-1.html
作者:
chinakimb
时间:
2022-11-17 17:35
感谢分享,虽然看不懂,但很震撼。
作者:
lailai518
时间:
2022-11-17 21:39
如果支持脱机下载就完美
作者:
STC32位8051
时间:
2022-11-18 09:31
提示:
作者被禁止或删除 内容自动屏蔽
作者:
by64214
时间:
2022-11-18 09:36
谢谢分享 一种很好的方法
作者:
STC32位8051
时间:
2022-11-18 09:58
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 数码之家 (https://www.mydigit.cn/)
Powered by Discuz! X3.4