www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1 C8051Fxxx單片機(jī)簡(jiǎn)單介紹和Flash結(jié)構(gòu)  C8051Fxxx系列器件是Silicon Labs推出的一個(gè)高速單片機(jī)系列。這款單片機(jī)是完全集成的混合信號(hào)片上系統(tǒng)型MCU 芯片,具有高速、流水線結(jié)構(gòu)的8051 兼容的CIP51內(nèi)核;70%的指令

C8051Fxxx單片機(jī)簡(jiǎn)單介紹和Flash結(jié)構(gòu)

  C8051Fxxx系列器件是Silicon Labs推出的一個(gè)高速單片機(jī)系列。這款單片機(jī)是完全集成的混合信號(hào)片上系統(tǒng)型MCU 芯片,具有高速、流水線結(jié)構(gòu)的8051 兼容的CIP51內(nèi)核;70%的指令的執(zhí)行時(shí)間為1個(gè)或2個(gè)系統(tǒng)時(shí)鐘周期;片上有豐富的片內(nèi)外設(shè),根據(jù)型號(hào)的不同,包括ADC、DAC、UART、捕捉/比較模塊的可編程計(jì)數(shù)器/定時(shí)器陣列、SPI、SMBus等。

  C8051Fxxx單片機(jī)有大容量的Flash存儲(chǔ)器,用于程序代碼和非易失性數(shù)據(jù)存儲(chǔ),可在系統(tǒng)編程。Flash的結(jié)構(gòu)是以扇區(qū)為單位組織的(128 KB系列以1 024字節(jié)為1個(gè)扇區(qū),64 KB系列以512字節(jié)為1個(gè)扇區(qū))。非易失性Flash可以用來(lái)存儲(chǔ)系統(tǒng)的參數(shù),如軟件版本、生產(chǎn)日期等。Flash可以使用編程器擦寫,也可以在程序中使用MOVX指令來(lái)修改,從而使Flash 存儲(chǔ)器具有在系統(tǒng)重新編程能力,允許現(xiàn)場(chǎng)更新8051 固件程序。Flash的寫和擦除操作由硬件自動(dòng)定時(shí),以保證操作正確通過(guò)。C8051Fxxx的Flash保存下載的程序,在系統(tǒng)上電后,單片機(jī)從Flash讀出代碼數(shù)據(jù)到RAM,之后程序開始運(yùn)行。

2  程序丟失問(wèn)題的出現(xiàn)和原因

  在一些實(shí)際應(yīng)用中,系統(tǒng)重新上電后會(huì)出現(xiàn)程序不能正常運(yùn)行的問(wèn)題,常表現(xiàn)為“程序丟失”。通常是由于程序代碼被損壞或被修改造成的。

  造成程序丟失問(wèn)題的原因很多,可以歸結(jié)到一個(gè)基本原因,即對(duì)Flash的訪問(wèn)失敗而造成Flash保存的代碼出現(xiàn)錯(cuò)誤。對(duì)于所有包含有Flash寫/擦除子程序的系統(tǒng),當(dāng)CPU工作在規(guī)定的VDD、溫度、系統(tǒng)時(shí)鐘頻率范圍之外時(shí),對(duì)Flash進(jìn)行寫/擦除操作,都有可能出現(xiàn)Flash數(shù)據(jù)錯(cuò)誤的現(xiàn)象。

2.1  Flash數(shù)據(jù)錯(cuò)誤的硬件原因

  C8051Fxxx單片機(jī)的Flash操作由硬件控制,所以硬件上的不穩(wěn)定可能造成Flash操作錯(cuò)誤。硬件原因主要是能影響CPU正常運(yùn)行的因素,以及能影響Flash操作環(huán)境的因素。這些因素包括操作電壓、溫度以及外部干擾脈沖等,具體如下:

  ①  能影響CPU運(yùn)行可靠性的參數(shù)有系統(tǒng)時(shí)鐘源。如果系統(tǒng)時(shí)鐘由外部晶振提供,外部的電磁干擾引起尖脈沖,并耦合到系統(tǒng)時(shí)鐘上,則會(huì)導(dǎo)致不可預(yù)知的操作。
 ?、? 系統(tǒng)在單片機(jī)的工作電壓沒(méi)有穩(wěn)定(VDD上升時(shí)間低于規(guī)定的1 ms)時(shí)就已經(jīng)完成復(fù)位,由于系統(tǒng)復(fù)位時(shí)需要從Flash讀出代碼數(shù)據(jù),F(xiàn)lash電壓不穩(wěn)定會(huì)出現(xiàn)不可預(yù)測(cè)的錯(cuò)誤。
 ?、?nbsp; 在對(duì)Flash的操作過(guò)程中,如果溫度、電壓不穩(wěn)定,也可能造成Flash數(shù)據(jù)錯(cuò)誤。

2.2  Flash數(shù)據(jù)錯(cuò)誤的軟件原因

  代碼設(shè)計(jì)的缺陷是程序丟失的主要原因,因?yàn)閱纹瑱C(jī)的Flash是由硬件來(lái)控制的,不能由軟件來(lái)控制操作的細(xì)節(jié),所以程序的不完善可能造成Flash的訪問(wèn)出錯(cuò),從而使Flash數(shù)據(jù)出現(xiàn)錯(cuò)誤。 這些操作包括: 在PSWE位(PSCTL.0)置1時(shí)CPU執(zhí)行中斷服務(wù)程序中的MOVX寫操作,該中斷服務(wù)程序要使用xdata 或pdata 的易失性存儲(chǔ)區(qū)單元,這樣可能導(dǎo)致向xdata 或pdata存儲(chǔ)區(qū)寫的數(shù)據(jù)寫到Flash中了,從而出現(xiàn)問(wèn)題。另外,如果使用外部晶振作系統(tǒng)時(shí)鐘,在時(shí)鐘沒(méi)有穩(wěn)定時(shí)就對(duì)Flash進(jìn)行寫操作,也可能造成程序丟失。

3  程序丟失問(wèn)題的解決方法

  針對(duì)以上可能的原因,可以從軟硬件兩個(gè)方面來(lái)解決程序丟失問(wèn)題。在硬件方面,主要是給系統(tǒng)提供穩(wěn)定的工作環(huán)境,并避免外部干擾對(duì)CPU運(yùn)行環(huán)境的影響;在軟件方面,主要是規(guī)范對(duì)Flash的操作。

3.1  從硬件方面預(yù)防程序丟失

  注意,以下的方法不是對(duì)所有的器件都適用,要根據(jù)具體的硬件情況選擇相應(yīng)的方法:

 ?、? 在RST引腳安裝VDD監(jiān)測(cè)電路,并將VDD監(jiān)視設(shè)置為一個(gè)復(fù)位源(置RSTSRC.1為1)。這樣如果系統(tǒng)電壓不穩(wěn)定,系統(tǒng)將自動(dòng)復(fù)位,從而避免在電壓不穩(wěn)時(shí)訪問(wèn)Flash。
 ?、? 對(duì)外部晶振時(shí)鐘2分頻,更好的方法是使用內(nèi)部振蕩器,這樣能提高系統(tǒng)時(shí)鐘的抗干擾能力。
 ?、?nbsp; 如果使用外部晶振提供系統(tǒng)時(shí)鐘,信號(hào)線應(yīng)盡量靠近單片機(jī)的輸入端,同時(shí)晶振外殼接地。
 ?、?nbsp; 對(duì)于使用外部晶振作時(shí)鐘源的系統(tǒng),應(yīng)盡量增強(qiáng)晶振的驅(qū)動(dòng)能力,這樣也能在一定程度上預(yù)防程序丟失。

3.2  從軟件方面預(yù)防程序丟失

  程序丟失的主要原因是程序設(shè)計(jì)的缺陷,所以合理的程序代碼設(shè)計(jì)能極大地預(yù)防該問(wèn)題的出現(xiàn)。在代碼中可以用多種方法來(lái)預(yù)防Flash數(shù)據(jù)丟失:

  ①  在PSWE=1下禁止中斷,使得程序中的MOVX寫指令是對(duì)Flash而不是對(duì)XRAM。
 ?、?nbsp; 在PSWE=1下盡可能少地訪問(wèn)變量。在PSWE=0下執(zhí)行地址譯碼操作,并用間接尋址方式執(zhí)行MOVX寫操作。例如,向Flash寫多個(gè)字節(jié),間接尋址和寫PSWE過(guò)程如下:

  unsigned char xdata * idata pwrite;//使用idata指針指向Flash
  unsigned char *source;
  unsigned char mydata;
  for (addr = 0; addr < 100; addr++) {
    //PSWE =0時(shí)獲取要寫入的數(shù)據(jù)
    mydata = *source++;
    //PSWE =0時(shí)修改寫入數(shù)據(jù)的目標(biāo)地址
    pwrite = (unsigned char xdata *) addr;
    PSCTL = 0x01;//PSWE=1
    //賦值方式寫入數(shù)據(jù),此時(shí)不執(zhí)行目標(biāo)地址的修改操作
    *pwrite = mydata;
    PSCTL = 0x00;//PSWE=0
  }

  以上代碼中,當(dāng)PSWE = 1時(shí)只執(zhí)行寫Flash操作(*pwrite = mydata);其他操作,如修改addr的值、獲取源數(shù)據(jù)和目的地址,都是在PSWE = 0時(shí)執(zhí)行的。


 

③  將Flash寫/擦除指針指向data或idata區(qū)。
 ?、?nbsp; 減少將PSWE置1的指令操作。理想的情況是只有兩個(gè)操作將PSWE置1,即寫1個(gè)Flash字節(jié)和擦除1個(gè)Flash字節(jié)。
  ⑤  在Flash寫/擦除函數(shù)中,使能VDD監(jiān)視并設(shè)置復(fù)位源。使能和設(shè)置操作必須在實(shí)際的寫操作發(fā)生之前,置PSWE=1之后完成。
 ?、?nbsp; 代碼中所有的對(duì)RSTSRC的寫操作均用直接賦值方式完成(如RSTSRC = 0x02),不能用讀/寫指令(如ORL或ANL)來(lái)完成。例如,代碼“RSTSRC |= 0x02”是非法的。
 ?、?nbsp; 對(duì)于能用PORSF位來(lái)設(shè)置VDD為復(fù)位源的器件,保證在寫RSTSRC時(shí)置PORSF=1,即先使能VDD為復(fù)位源,再使能其他復(fù)位源的操作,如時(shí)鐘丟失監(jiān)測(cè)(missing clock detector)、比較單元和軟件復(fù)位。

4  一個(gè)實(shí)際應(yīng)用方案

  在有的應(yīng)用場(chǎng)合,由于需要較快的執(zhí)行速度,不能使用單片機(jī)的內(nèi)部時(shí)鐘作系統(tǒng)時(shí)鐘源,所以使用外部晶振來(lái)提供時(shí)鐘。在這種情況下,首先要在硬件上確保系統(tǒng)工作參數(shù)正常。

  在軟件上,由于最常見的Flash丟失原因是程序問(wèn)題,所以可以在代碼中用多種方法來(lái)預(yù)防Flash數(shù)據(jù)丟失。首先,在初始化單片機(jī)時(shí),使能VDD檢測(cè),并設(shè)置VDD和時(shí)鐘丟失為復(fù)位源。如果程序中有寫/擦除Flash的代碼,則在寫/擦除操作前切換系統(tǒng)時(shí)鐘,將系統(tǒng)時(shí)鐘切到內(nèi)部時(shí)鐘或?qū)ν獠繒r(shí)鐘2分頻;寫/擦除操作完成之后,再恢復(fù)系統(tǒng)時(shí)鐘,通過(guò)增加Flash修改操作時(shí)的時(shí)間開銷來(lái)實(shí)現(xiàn)系統(tǒng)的穩(wěn)定[2]。以下以C8051F126為例,給出了系統(tǒng)時(shí)鐘切換的程序清單:

  void SYSCLKAdjust(unsigned char select) {
    EA_Save=EA;
    SFRPAGE=0x0f;
    switch(select) {
      case 0x01:
        OSCICN_Save = OSCICN;
        CLKSEL_Save = CLKSEL;
        OSCICN = 0xc3;//內(nèi)部時(shí)鐘,不分頻
        CLKSEL = 0x00;
        break;
      case 0x02:
        OSCXCN_Save = OSCXCN;
        OSCXCN |= 0x70;//外部時(shí)鐘2分頻
        break;
      default://選擇內(nèi)部時(shí)鐘
        OSCICN_Save = OSCICN;
        CLKSEL_Save = CLKSEL;
        OSCICN = 0xc3;
        CLKSEL = 0x00;
        break;
    }
  }

  要恢復(fù)系統(tǒng)時(shí)鐘到Flash操作前的狀態(tài),只需將CLKSEL_Save、OSCICN_Save、OSCXCN_Save重新寫回到CLKSEL、OSCIN、OSCXCN。

  C8051F126的系統(tǒng)時(shí)鐘(SYSCLK)可以在內(nèi)部時(shí)鐘和外部時(shí)鐘之間自由切換,切換時(shí)的操作要求如下:

 ?、? 在切換過(guò)程中,先設(shè)置所選時(shí)鐘的屬性,再用CLKSEL將其設(shè)置為SYSCLK。
 ?、? 在還原過(guò)程中,先用CLKSEL選擇時(shí)鐘源,再設(shè)置其屬性。
 ?、?nbsp; 如果切換過(guò)程中關(guān)閉外部晶振,要再恢復(fù)外部時(shí)鐘,啟動(dòng)后至少要等1 ms,再去讀XTLVLD(OSCXCN.7)來(lái)判斷晶振時(shí)鐘是否穩(wěn)定。否則,可能讀到錯(cuò)誤值。
 ?、? 在外部時(shí)鐘穩(wěn)定運(yùn)行后,再對(duì)其分頻,不必插入等待周期。
  ⑤  在切換過(guò)程中,可以保持外部時(shí)鐘繼續(xù)運(yùn)行,這樣在還原過(guò)程中就不必等待外部時(shí)鐘穩(wěn)定,從而節(jié)省時(shí)間開銷,代價(jià)是系統(tǒng)功耗有所增加。

5  總結(jié)

  程序丟失會(huì)帶來(lái)各種不良的后果,最嚴(yán)重時(shí)致使程序無(wú)法正常運(yùn)行,從而造成整個(gè)系統(tǒng)崩潰,給產(chǎn)品的應(yīng)用帶來(lái)麻煩。在系統(tǒng)的硬件設(shè)計(jì)和代碼編寫過(guò)程中,通過(guò)對(duì)以上問(wèn)題的注意,可以有效地防止程序丟失問(wèn)題的出現(xiàn)。另外,由于系統(tǒng)時(shí)鐘的切換只發(fā)生在Flash的寫/擦除過(guò)程中,操作結(jié)束后又恢復(fù)成原來(lái)的設(shè)置,因而對(duì)系統(tǒng)運(yùn)行速度的影響很小,從而保證了系統(tǒng)其他功能的實(shí)現(xiàn)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉
關(guān)閉