這個玩意其實很簡單的。就是靠監控MCU檢測到STCISP開啟時發送的0x7F,然后重啟。
我的設計是接到10個連續的0x7F然后重啟MCU。因為在別的波特率下可能會有不連續,類似0X7F的波形出現。為了避免誤重啟。所以需要連續的。
上代碼:http://m.zg4o1577.cn/f/1stc2.zip
先上電路圖。
然后就是艱苦(?)的制作過程了。
先在Eagle里面Layout……
然后拿起洞洞板……裁出一小塊……飛線……
反面
上正面,監控芯片STC15F104E,調整到11.0592M RC 振蕩器
上面的燈作為電源指示。收到信號后將斷開鏈接,也就是閃下。
插在板子上的效果:
hwconfig的代碼是:
#include <at89x52.h> //設置 #define BAUD_RELOAD 0xFD //9600Baud #define START_CMD_NUMBER 10 //接受到連續X個7F就重啟STC單片機 #define PW_SWITCH P3_4 //P3_4控制8550電源開關 #define CRYSTAL_12M 1 #define RXD P3_0 //沒有串口要靠模擬 #define RXB P3_0 //沒有串口要靠模擬 #define TXB P3_1 //沒有串口要靠模擬 //BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (SYSclk/3/BAUDRATE) must be greater than 98, (RECOMMEND GREATER THAN 110) //串口模擬部分抄STC官方程序 //另外SDCC的庫要使用修改板本的。否則MCU會因為MOVX,MOVP2指令不停復位。˙UG) //#define BAUD 0xF400 // 2400bps @ 22.1184MHz #define BAUD 0xFA00 // 2400bps @ 11.0592MHz //#define BAUD 0xFD00 // 4800bps @ 11.0592MHz __sfr __at 0x8E AUXR;
萬致遠原創。這里是這個東東的第二版http://m.zg4o1577.cn/mcu/1576.html