在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)實(shí)現(xiàn)軟件復(fù)位(軟復(fù)位)的方法及討論

            單片機(jī)實(shí)現(xiàn)軟件復(fù)位(軟復(fù)位)的方法及討論

            作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
            單片機(jī)軟復(fù)位有什么好的方法?如從機(jī)收到復(fù)位命令(軟件命令),程序怎么使機(jī)器復(fù)位?雖然要使軟件始終處于可控狀態(tài),最好不要用"復(fù)位",因?yàn)閺?fù)位是純硬件過(guò)程,軟件是不可控的.但是我們還是要討論方法,一般流傳的方法如下:

            1、放狗;

            本文引用地址:http://www.biyoush.com/article/201611/321824.htm

            2、((void(code*)(void))0x0000)();

            3、用單片機(jī)一個(gè)引腳控制點(diǎn)一下RSTRST;

            4、用單片機(jī)一個(gè)引腳控制重新加電;

            5、用單片機(jī)自帶的軟件復(fù)位指令或內(nèi)狗指令;

            6、goto大法;

            天堂雨林博客對(duì)以上方法的意見(jiàn):

            方法1:“放狗”是單片機(jī)軟復(fù)位的最好辦法,也基本上是唯一的一個(gè)辦法。但并不是所有單片機(jī)都具備看門(mén)狗的功能,也不是一個(gè)萬(wàn)全之策。

            辦法2:這不是復(fù)位,只是把程序轉(zhuǎn)到地址0去執(zhí)行,不如用一個(gè)JMP更直接。目前可能極少數(shù)單片機(jī)或者用戶已經(jīng)自行添加Bootload時(shí)用戶程序的程序開(kāi)始地址并不為0x0000,所以需要查找這些特定單片機(jī)的啟動(dòng)地址。
            keilC51下面可以這樣實(shí)現(xiàn):
            voidsoft_reset(void)
            {
            ((void(code*)(void))0x0000)();
            }
            在需要軟件復(fù)位的地方使用語(yǔ)句:
            soft_reset();
            一般可實(shí)現(xiàn)軟件復(fù)位。

            辦法3:用軟件實(shí)現(xiàn)的硬復(fù)位。需要犧牲一個(gè)單片機(jī)引腳,且增加了單片機(jī)外部電路構(gòu)造的復(fù)雜性,很不可取。

            辦法4:類似辦法3,同樣需要犧牲一個(gè)單片機(jī)引腳,且增加了單片機(jī)外部電路構(gòu)造的復(fù)雜性,很不可取。但不能把它單單地當(dāng)成是復(fù)位,應(yīng)該叫上電復(fù)位。

            辦法5:Atmel89C不帶內(nèi)狗,S的有內(nèi)狗,只是一條指令就行。如STC的單片機(jī)有軟件復(fù)位指令,即ISP_CONTR,地址在0E7H單元(即strISP_CONTR=0xE7),MOVISP_CONTR,#00100000B(C語(yǔ)言為ISP_CONTR=0x20),內(nèi)狗也是一條指令MOVWDT_CONTR,#00111100B!
            STC51系列單片機(jī)Datasheet中指出:傳統(tǒng)的8051單片機(jī)由于硬件上未支持此功能,用戶必須用軟件模擬實(shí)現(xiàn),實(shí)現(xiàn)起來(lái)較麻煩?,F(xiàn)STC新推出的增強(qiáng)型8051根據(jù)客戶要求增加了ISP_CONTR特殊功能寄存器,實(shí)現(xiàn)了此功能。用戶只需簡(jiǎn)單的控制ISP_CONTR特殊功能寄存器的其中兩位SWBS/SWRST就可以系統(tǒng)復(fù)位了。

            辦法6:程序從頭(上電復(fù)位處)開(kāi)始運(yùn)行,且只有一個(gè)循環(huán)這種情況,當(dāng)然可以用goto,如在main()的開(kāi)頭設(shè)一個(gè)start:,在程序的唯一循環(huán)中設(shè)定一個(gè)條件,然后goto命令。但需要注意,如果是在中斷例程里,那么中斷掛號(hào)寄存器仍置位,同級(jí)中斷不能執(zhí)行。所以必須先使中斷掛號(hào)寄存器清零,EA=0。只有RETI指令可以使中斷掛號(hào)寄存器清零。51單片機(jī)有兩級(jí)中斷優(yōu)先級(jí),所以需要執(zhí)行兩次RETI指令。這用匯編是很簡(jiǎn)單的事,而C則比較難以實(shí)現(xiàn)。但是,goto命令盡量不要用,因?yàn)間oto會(huì)到處亂竄,而且goto不能跑到函數(shù)外面去執(zhí)行一個(gè)命令。

            最后總結(jié)如下:最好使用辦法5最為簡(jiǎn)潔方便,使用辦法2實(shí)現(xiàn)也不失為一種好方法。



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉