STC單片機(jī)免斷電下載程序的另一種更簡(jiǎn)單的方法
看到網(wǎng)上有一些STC單片機(jī)免斷電下載程序的例子。但是都是要用串口中斷來(lái)完成。以下是一個(gè)程序片斷
拿來(lái)說(shuō)明
在調(diào)試程序中加入串口初始化代碼,串口中斷代碼即可實(shí)現(xiàn)不斷電下載程序
TMOD|=0x20;
SCON=0x50;
TH1=0xfd; //12T時(shí)鐘9600bps
TL1=0xfd;
TR1=1;
ES=1;
EA=1;
AUXR=AUXR|0x40; //定時(shí)器1使用1T時(shí)鐘 9600*12=115200bps
void uart(void) interrupt 4
{
uchar cdd;
if(RI)
{
RI=0;
cdd=SBUF;
if(cdd==0xaa)
{
ISP_CONTR=0x60;//軟復(fù)位,從ISP監(jiān)控區(qū)啟動(dòng)
}
else if(cdd==0x55)
{
ISP_CONTR=0x20; //軟復(fù)位,從用戶程序區(qū)啟動(dòng)
}
else
{
senddata(cdd);
}
}
else
{
TI=0;
}
}
另外還要在stc下載軟件中進(jìn)行自定義下載設(shè)置才能完成面是一個(gè)操作視頻
http://v.youku.com/v_show/id_XMTk2MTE5MTgw.html
從上面可以看出比較麻煩,那么有沒(méi)有一種更為簡(jiǎn)單的方法呢,從上面的視頻得知只要對(duì)0xe7這個(gè)地址賦予0x60就可以完成下載程序的功能了,那么我就想,stc下載軟件用的是串口,用串口就必然用要發(fā)送數(shù)據(jù)到單片機(jī),而單片機(jī)接收引腳是P3^0,那么我們只要檢測(cè)這個(gè)引腳有沒(méi)有電平的變化,如果有變化那么就對(duì)0xe7這個(gè)地址賦予0x60,就會(huì)完成自動(dòng)下載的命令了,有了思路就開(kāi)始驗(yàn)證。經(jīng)過(guò)調(diào)試結(jié)果成功,說(shuō)明本人只是對(duì)STC89C52RC做過(guò)測(cè)試,其它芯片能否可行請(qǐng)自行測(cè)試,以下為完整的程序,在stc下載軟件中不需要做任何的設(shè)置,就像平常下載程序一樣就行。
/*** STC單片機(jī)免斷電下載程序的另一種更簡(jiǎn)單的方法*******************************************************************
**程序功能:STC單片機(jī)免斷電下載程序
**芯片型號(hào):STC89C52RC
**晶振頻率:11.0592M
**編寫(xiě)日期:2010年11月23日
**編寫(xiě)人員:wang QQ:349259818 Email:hongfadg@163.com
**備注說(shuō)明:
*******************************************************************/
//以下為所需的頭文件
//#include<absacc.h>
//#include<string.h>
//#include<stdio.h>
//#include <INTRINS.H>
#include <reg52.H>
//定義關(guān)鍵字方便使用
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sfr iap=0xe7; //定義下載命令
sbit p30=P3^0; //串口接收引腳
/* 主函數(shù)
*******************************************************************
**函數(shù)原型:main()
**函數(shù)功能:
**輸入?yún)?shù):無(wú)
**輸出參數(shù):無(wú)
**備注說(shuō)明:完成程序的主要功能
*******************************************************************/
main()
{
while(1) //主循環(huán)
{
if(!p30) //判斷串口是不是有數(shù)據(jù)
{
iap=0x60; //執(zhí)行自動(dòng)下載的命令
}
}
}