需要將晶振頻率設置為11.0592MHz(ISP下載軟件中設置)ISP最新軟件最低波特率設置為2400(軟件默認)
工作原理:【STC15F104W單片機沒有硬件串口,所以只能模擬串口】
因為ISP在下載程序之前會以最低波特率向目標單片機連續發送0X7F握手信號,基于此,在STC15F104W
單片機中模擬串口接收上位機發送的0X7F,當連續檢測到有16個0X7F時候就認為是需要下載程序了,此時
P34腳輸出高電平,而使外部的S8550三極管截至,目標單片機失電(模仿給單片機斷電),延時600ms后再
給單片機上電,就可以下載程序了。此制作在不下載以及下載完程序時目標單片機一直得電,并且不妨礙
串口調試,不占用單片機硬件串口。供電用三極管采用S8550,最大工作電流1.5A,而電腦USB輸出電流最
大500ma左右,所以正常情況下電路不會出現問題。【T0模擬串口時鐘,T2用作延時計數器】
實物圖
從家里找了一片STC89C52RC單片機,連續寫了1000多次,沒有一次失敗,下面是視頻
單片機源程序如下:
- #include "init.h"
- extern u8 cnt7f; //連續接收到0X7F的次數計數器
- extern u16 t2cnt; //T2定時計數值
- extern u8 RBUF; //接收緩沖區
- extern u8 RDAT; //接收數據
- extern u8 RCNT; //接收計數器
- extern u8 RBIT; //接收位數
- extern bit RING; //正在接收標志
- extern bit REND; //接收完成標志
- /*T2初始化*/
- void Timer2Init(void) //1毫秒@11.0592MHz
- {
- AUXR |= 0x04; //定時器時鐘1T模式
- T2L = T1MS; //初始化計時值
- T2H = T1MS >> 8;
- IE2 |= 0x04; //使能定時器2中斷
- }
- /*全局初始化*/
- void all_init(void)
- {
- TMOD=0x00; //定時器0在16位自動重裝模式
- AUXR=0x80; //定時器0在1T模式
- TL0=65536-FOSC/3/BAUD;
- TH0=(65536-FOSC/3/BAUD)>>8;//初始化定時器0并設定重裝值
- TR0=1; //定時器0開始運行
- ET0=1; //使能定時器0中斷
- PT0=1; //定時計數器0中斷高優先級
- EA=1; //開總中斷
-
- RING=0;
- REND=0;
- RCNT=0;
- Timer2Init();
- cnt7f=0;
- P3M1 &= 0XEF; //1110 1111設置P3.4為強推挽輸出
- P3M0 |= 0X10; //0001 0000設置P3.4為強推挽輸出
- enable = 0; //確定給目標單片機供電
-
- AUXR |= 0x10; //定時器2開始計時
- while(t2cnt<300); //等待 使系統穩定
- AUXR &= 0xEF; //關定時器2計時
- t2cnt = 0; //清零T2計數值
- }
復制代碼
所有資料51hei提供下載:
STC15F104W模擬串口實現自動下載.rar
(394.15 KB, 下載次數: 116)
2019-12-10 08:30 上傳
點擊文件名下載附件
程序及電路圖
|