自己在学51单片机时选用的是AT89S5X系列的单片机,后来接触到STC89C5X系列和STC12、15系列后因为丰富的内部资源和合适的价格,而且直接用串口就能下载程序,大多数基本选用了STC的单片机。
但是STC单片机有个说麻烦不麻烦,但说不麻烦又挺烦的问题。就是下载程序时需要重启电源,在写程序验证过程中不断修改程序在所难免,于是重启电源就成了不小的负担,而且影响心情还伤电源开关,这点就足以让我还对ATMEL的SPI烧写余情未了!人家多方便,一键OK。
于是乎!百度看看有没有可以解决这个问题的方法,果然这STC单片机的这个不方便大家都有共识,但是真正有人愿意共享出来的资料,要么程序一看就有错误,分明STC15F104W没有串口模块偏写个串口中断,贴个电路图和程序都不搭边。。。我无语,看了文库里的资料那叫一个内牛满面。。。发资料的人你就不能不嘚瑟嘛,把他的心路历程有感情的看完后才发现人家也是COPY的,而且经过美化完全不成样子。。。
于是乎!还是自力更生吧。。主控芯片选用STC15F104W。我喜欢STC15F104W这块单片机,因为它只有8个脚,小巧玲珑的东西就是看着喜欢。但为什么不给它装个UART模块,老姚(网上都这么叫)实在是太小气了!
虽然说网上资料很坑,但是起码思路还有那么一丝靠谱。原理很简单,无非就是STC_ISP这个软件在加载完HEX文件后点击“下载”后,软件会给选中串口发送一连串相同的数据,我叫他握手信号吧,这个握手信号其实就是一个固定的波形,无非我用2400bps的波特率读出是“0x7F”,用9600bps读出的是“0xF8”,我程序就是9600bps的波特率。或者其他波特率读出是啥。。。自己看看就知道了。。。
STC的单片机上电后首先是执行一小段验证程序,判断是否要进入烧写程序过程,如果没有这个验证信号就执行ROM里的程序,当然这个验证的程序是STC单片机生产时就定义了的我们没法改变。
我要实现不用手动上电,那必须需要一个“电子开关”来帮我上电,三极管、继电器、MOS管。。。。随便你。
我用的是继电器来给需要编程的STC单片机重新上电的。电路很简单,就一个8550加个电阻驱动一个小继电器再加个续流二极管,继电器控制电源正极对待编程单片机的供电,选择常闭那对接口。
整个程序很简单,就是利用IO口来模拟串口接收数据,判断当连续接收到若干个握手信号后判断,断开待编程单片机的电源一段时间后重新接通电源,整个过程监控芯片(STC15F104W)没有输出数据到串口线,不影响STC单片机的烧写。
最终效果很不错,达到预期的效果了。。。。感兴趣的你也试试!
大体原理就这样,不喜欢藏着掖着,下面是所有资料:STC15F104免上电下载线.rar
上测试图,虽然这个效果在图片上完全不能体现,但还是喜欢贴子里有图片。