日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

stc單片機(jī)自動(dòng)下載程序原理和代碼實(shí)現(xiàn)

 印度阿三17 2020-01-27

1/stc單片機(jī)下載程序的原理

首先我們要理解stc單片機(jī)下載程序的原理。在stc單片機(jī)中有兩個(gè)程序區(qū):用戶(hù)程序區(qū)和ISP監(jiān)控程序區(qū)。

這是stc89c52單片機(jī)數(shù)據(jù)手冊(cè)中的內(nèi)容。
在這里插入圖片描述
根據(jù)數(shù)據(jù)手冊(cè),我們可以知道,當(dāng)冷啟動(dòng)或者對(duì)ISP_CONTR寄存器送入60H產(chǎn)生復(fù)位以后,單片機(jī)會(huì)從ISP監(jiān)控程序區(qū)開(kāi)始執(zhí)行程序。

如果這時(shí)候檢測(cè)到合法的ISP下載命令流(后面會(huì)說(shuō)什么是ISP的合法下載流),則ISP監(jiān)控程序開(kāi)始與ISP下載軟件通信(如stc-isp),軟件也會(huì)進(jìn)入編程模式,向監(jiān)控程序發(fā)送程序碼,監(jiān)控程序接收程序碼,并將其寫(xiě)入用戶(hù)程序區(qū)中。成功后,用戶(hù)程序立即生效,開(kāi)始運(yùn)行用戶(hù)程序。

如果這時(shí)候沒(méi)有檢測(cè)到合法的ISP下載命令流,單片機(jī)就會(huì)從用戶(hù)程序區(qū)開(kāi)始執(zhí)行程序。

2/冷啟動(dòng)下載

我們剛開(kāi)始接觸stc單片機(jī)一般采用的都是冷啟動(dòng)來(lái)下載程序。但是這樣做有一定的缺點(diǎn)。

首先,單片機(jī)頻繁的上電掉電會(huì)影響單片機(jī)的壽命,且一些特殊的外圍電路要求一直保持有電狀態(tài)。

其次,也是我主要想說(shuō)的一點(diǎn)是,市面上的USB轉(zhuǎn)TTL模塊質(zhì)量參差不齊,絕大多數(shù)模塊都沒(méi)有做好隔離,導(dǎo)致電流會(huì)從模塊的TX和RX倒灌進(jìn)單片機(jī),如果此時(shí)單片機(jī)上的電壓高于單片機(jī)的上電復(fù)位檢測(cè)門(mén)檻電壓的話(huà),就會(huì)導(dǎo)致單片機(jī)無(wú)法冷啟動(dòng),進(jìn)而無(wú)法成功下載程序。

摘自stc15數(shù)據(jù)手冊(cè)
我測(cè)量了市面上購(gòu)買(mǎi)的兩款USB轉(zhuǎn)TTL模塊(PL2303)(ch340系列沒(méi)有做好隔離的話(huà)也會(huì)出現(xiàn)同樣的情況),一款模塊會(huì)給單片機(jī)提供3.3V電壓,這時(shí)候5V單片機(jī)的冷啟動(dòng)就很可能失敗。另一款模塊會(huì)給單片機(jī)提供2V電壓,可見(jiàn)這兩款USB轉(zhuǎn)TTL模塊都是無(wú)法正常給3.3V單片機(jī)燒錄程序的。

大廠的單片機(jī)開(kāi)發(fā)板上下載電路的隔離一般是做的非常好的,我用做測(cè)試的是郭天祥的TX-1C開(kāi)發(fā)板,USB只能給單片機(jī)提供0.02V的電壓。

數(shù)據(jù)手冊(cè)中給我們提供了一個(gè)簡(jiǎn)單的PL2303下載電路,其中紅色箭頭指向的那個(gè)電阻和二極管就是起隔離作用的。當(dāng)然,如果對(duì)隔離要求更為嚴(yán)格的話(huà),還是要去查看芯片(PL2303,CH340,FT232等)的數(shù)據(jù)手冊(cè),設(shè)計(jì)最為合適的下載電路。

在這里插入圖片描述

3/自動(dòng)下載程序

說(shuō)是自動(dòng)下載程序,其實(shí)是和冷啟動(dòng)下載程序相對(duì)的,也就是可以不掉電下載程序。

講解原理之前我們先要說(shuō)一下什么是“合法的ISP下載命令流”。

在這里插入圖片描述
在我們按下“下載/編程”后,電腦會(huì)通過(guò)串口給單片機(jī)發(fā)送一系列數(shù)據(jù)。

如果我們?cè)趕tc-isp上勾選了發(fā)送自定義命令的話(huà),stc-isp首先會(huì)按照我們?cè)O(shè)置的波特率、停止位等配置向單片機(jī)發(fā)送我們自定義的命令。

然后stc-isp會(huì)以我們?cè)O(shè)置的最低波特率和默認(rèn)配置向單片機(jī)不斷發(fā)送0x7F,這通常就是我們說(shuō)的“合法的ISP下載命令流”。

我們?cè)倩貞浺幌聅tc單片機(jī)下載程序需要什么。第一是需要程序沖ISP監(jiān)控程序區(qū)運(yùn)行,第二是需要檢測(cè)到合法的ISP下載命令流。由于ISP下載命令流是stc-isp提供給我們的,所以我們其實(shí)可以檢測(cè)到合法的ISP下載命令流以后進(jìn)行一個(gè)軟復(fù)位,復(fù)位到ISP監(jiān)控程序區(qū),這樣便可以避免冷啟動(dòng),直接下載程序了。

4/代碼實(shí)現(xiàn)

作者這里使用的是STC89C52單片機(jī),不同的單片機(jī)的寄存器不太一樣,但原理相通,只需要根據(jù)數(shù)據(jù)手冊(cè)稍作修改即可。

作者將自動(dòng)下載的代碼封裝成函數(shù)方便調(diào)用。

首先是serve.c中的代碼:

//配置串口
void uart_init(void)
{
		TMOD = 0x20;    
		TH1 = 0xfd;     
		TL1 = 0xfd;     
		TR1 = 1;       
		REN = 1;       
		SM0 = 0;      
		SM1 = 1;       
		EA = 1;         					
		ES = 1;        
}

serve.h:

/*
funtion:automatic download
explanation:			
		switch:#define _DOWNLOAD_(before #include"serve.h")
		remember to use uart_init before!				
*/
					
#ifdef _DOWNLOAD_
					
#include<reg52.h>

sfr ISP_CONTR = 0xe7;
uint8_t uart_ser_n = 0;
		
void uart1_ser() interrupt 4
{ 
		RI = 0;        //清空接收標(biāo)志位
		if(SBUF == 0x7f)  //STC下載指令0X7F
		{ 
				uart_ser_n  ;   //判斷位自加
				if(uart_ser_n == 10) //如果收到10次0X7F
				{
						uart_ser_n = 0;   //判斷位清0
						ISP_CONTR = 0x60;//復(fù)位命令  
				}
		}
		else
		{
				uart_ser_n = 0;	
		}
}
				


#endif

/*
explanation:
    crystal frequency:11.0592MHz
    bps:9600
	timer1:mode2
	UART:mode1
*/

extern void uart_init(void);

下面是main.c中的一個(gè)小示例:

#define _DOWNLOAD_
#include"serve.h"
#include<reg52.h>

int main()
{
	uart_init();
    while(1)
	{
		P1 = ~P1;
		delay_ms(100);
	}
}

5/補(bǔ)充說(shuō)明

1.這里作者并沒(méi)有選擇使用stc-isp上的發(fā)送自定義命令,因?yàn)椴还馨l(fā)送不發(fā)送自定義命令,stc-isp最后總是要不斷發(fā)送0x7F的ISP下載流,作者偷了個(gè)懶,就不用配置自定義命令了,這樣別人拿過(guò)我的單片機(jī)也可以直接自動(dòng)下載了。

那可能有人會(huì)問(wèn):既然總是要發(fā)送0x7F的ISP下載流,那為什么stc-isp還要設(shè)置”發(fā)送自定義命令“這樣一個(gè)功能呢?

因?yàn)樵诎l(fā)送自定義命令時(shí)我們可以自主選擇串口通信的波特率、校驗(yàn)位、停止位等參數(shù),且可以自主設(shè)置命令,這樣就使得自動(dòng)下載這個(gè)功能非常靈活,在比較復(fù)雜的項(xiàng)目里面使用自主設(shè)置命令會(huì)更加合適。

2.關(guān)于stc不同單片機(jī)型號(hào)之間的區(qū)別,stc12、stc15和stc8支持更多復(fù)位方式,可以通過(guò)配置寄存器設(shè)置更多種“自動(dòng)下載”,大家有興趣可以自行翻閱數(shù)據(jù)手冊(cè)。

3.網(wǎng)上還有很多種“自動(dòng)下載”的辦法。有人使用外部中斷來(lái)實(shí)現(xiàn)“自動(dòng)下載”。工作流程是這樣的:點(diǎn)擊下載程序后按下按鍵,單片機(jī)進(jìn)入外部中斷。在中斷服務(wù)函數(shù)中給單片機(jī)一個(gè)復(fù)位信號(hào),實(shí)現(xiàn)“自動(dòng)下載”。

這種方式的優(yōu)點(diǎn)是占用的資源少(一個(gè)外部中斷),缺點(diǎn)是還需要按按鍵。其實(shí)不管怎么變形,我們只要理解了前面說(shuō)的單片機(jī)下載程序的原理之后,所有的"自動(dòng)下載"都是一樣的。

4.很有意思的是硬件的自動(dòng)下載,通過(guò)硬件電路,在點(diǎn)擊下載程序之后,改進(jìn)過(guò)的USB轉(zhuǎn)TTL模塊自動(dòng)實(shí)現(xiàn)冷啟動(dòng)復(fù)位,實(shí)現(xiàn)自動(dòng)下載,這個(gè)思路和我們前面說(shuō)的都不太一樣,但是還是需要冷啟動(dòng)是硬傷。大家有興趣可以自行搜索。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多