楊偉
【摘 要】參數(shù)的動(dòng)態(tài)配置對(duì)于單片機(jī)控制設(shè)備而言至關(guān)重要。通過參數(shù)配置的需求分析,明確了參數(shù)的硬件相關(guān)性和參數(shù)數(shù)據(jù)量小的特點(diǎn),選擇C8051F120作為實(shí)現(xiàn)平臺(tái),在C8051F120上實(shí)現(xiàn)了對(duì)參數(shù)的讀寫及動(dòng)態(tài)配置,并通過了實(shí)際使用和測(cè)試,簡(jiǎn)單實(shí)用。
【關(guān)鍵詞】C8051F120 參數(shù)配置 FLASH
Design of Dynamic Parameter Configuration Based on C8051F120
YANG Wei
[Abstract] The dynamic parameter configuration is crucial for the control equipment of MCU. Based on the requirement analysis on parameter configuration, the features of hardware correlation and small amount of parameters were determined. C8051F120 selected as the implementation platform, the read-write and dynamic configuration of parameters was realized. The practical use and test demonstrate the simplicity and feasibility.
[Key words]C8051F120 parameter configuration FLASH
1 引言
對(duì)于單片機(jī)控制設(shè)備而言,或多或少都有些重要的參數(shù)需要配置。控制設(shè)備可以根據(jù)所配置的不同參數(shù),實(shí)現(xiàn)不同的功能和作用。在硬件平臺(tái)不改變的情況下,僅通過讀取所配置的數(shù)據(jù)就可以啟動(dòng)不同的程序,完成不同的任務(wù)。同樣,部分調(diào)試功能的程序也可以通過參數(shù)配置的方式進(jìn)行開啟或關(guān)閉。顯而易見,參數(shù)動(dòng)態(tài)配置對(duì)單片機(jī)控制設(shè)備極為重要。
在需要校準(zhǔn)和基準(zhǔn)需要調(diào)整的單片機(jī)控制設(shè)備上,校準(zhǔn)數(shù)據(jù)和基準(zhǔn)就是需要?jiǎng)討B(tài)保存的參數(shù)。通常情況下,需要?jiǎng)討B(tài)保存的參數(shù)的數(shù)據(jù)量較小。因此,在控制設(shè)備中實(shí)現(xiàn)參數(shù)的動(dòng)態(tài)更新和保存,并不需要選擇硬盤或光盤大容量的存儲(chǔ)方式,只需要選擇合適的平臺(tái)。這樣既可以簡(jiǎn)化設(shè)計(jì),又提高了可靠性。
2 配置參數(shù)的需求分析
在控制設(shè)備中需要保存的參數(shù)包括2個(gè)基準(zhǔn)值及3個(gè)補(bǔ)償值?;鶞?zhǔn)值和補(bǔ)償值均是和硬件電路特性相關(guān),受到濾波器、AD轉(zhuǎn)換器、混頻器等器件的影響。因此,在不同的硬件平臺(tái)上基準(zhǔn)值和補(bǔ)償值有所差異。其中,基準(zhǔn)值的范圍為-60~5,補(bǔ)充值的范圍為-10~10,均為有符號(hào)的數(shù)。根據(jù)需要選擇參數(shù)類型signed char。所需配置的參數(shù)一共5個(gè)字節(jié),數(shù)據(jù)量很小。定義參數(shù)語(yǔ)句如下:
signed char refValue//基準(zhǔn)值,
signed char compAD9874 //補(bǔ)償值。
3 實(shí)現(xiàn)平臺(tái)C8051F120的FLASH簡(jiǎn)介
C8051F120芯片具有DA/AD轉(zhuǎn)換器、片內(nèi)看門狗定時(shí)器、VDD監(jiān)視器和溫度傳感器等豐富的片內(nèi)資源,同時(shí)具有高速、低功耗、工業(yè)級(jí)等特點(diǎn),很適合用于控制場(chǎng)合。本文就選用C8051F120作為控制設(shè)備的實(shí)現(xiàn)平臺(tái)。
C8051F120內(nèi)部有128 kB的FLASH存儲(chǔ)器,可用于程序代碼和非易失性數(shù)據(jù)存儲(chǔ)。另外,F(xiàn)LASH存儲(chǔ)器中有兩個(gè)附加的128字節(jié)的扇區(qū)(共256字節(jié)),只能用于非易失性數(shù)據(jù)存儲(chǔ)。而且,F(xiàn)LASH寫/擦除壽命在-40 ℃~+85 ℃的工業(yè)溫度范圍內(nèi)保證在10 000次以上,適合多次配置。FLASH存儲(chǔ)器中256字節(jié)很適合用來存儲(chǔ)信息量小的數(shù)據(jù),可以簡(jiǎn)化設(shè)計(jì)和節(jié)省成本。
FLASH存儲(chǔ)器可以每次寫一個(gè)字節(jié),但必須首先擦除整個(gè)扇區(qū)。如果要修改一個(gè)多字節(jié)數(shù)據(jù)集中的某一個(gè)字節(jié),數(shù)據(jù)必須被移動(dòng)到臨時(shí)存儲(chǔ)區(qū)域。128字節(jié)的扇區(qū)規(guī)模使數(shù)據(jù)更新更加容易,可以不浪費(fèi)程序存儲(chǔ)器。這兩個(gè)128字節(jié)的扇區(qū)在128 k字節(jié)FLASH存儲(chǔ)器中是雙映射的,只能用MOVC讀和用MOVX寫,它們的地址范圍是0x00~0x7F和0x80~0xFF。要訪問這兩個(gè)128字節(jié)的扇區(qū),PSCTL寄存器中的SFLE位必須被設(shè)置為邏輯“1”。
SFLE位含義:臨時(shí)FLASH存儲(chǔ)器訪問允許位。當(dāng)該位為1時(shí),軟件對(duì)FLASH的讀/寫操作將指向兩個(gè)128字節(jié)的FLASH臨時(shí)存儲(chǔ)扇區(qū)。當(dāng)SFLE被設(shè)置為邏輯“1”時(shí),不應(yīng)訪問0x00~0xFF以外的地址范圍。
4 寫參數(shù)與讀參數(shù)的實(shí)現(xiàn)
參數(shù)的配置過程就是參數(shù)的寫入和讀出的反復(fù)過程。要實(shí)現(xiàn)參數(shù)的動(dòng)態(tài)配置,首先可以做到參數(shù)的寫入保存,再次做到參數(shù)的讀取,即先寫后讀。由于選用FLASH存儲(chǔ)器中的256字節(jié)作為參數(shù)保存區(qū),讀/寫參數(shù)也就是對(duì)FLASH的寫/讀操作。FLASH寫操作是用MOVX指令實(shí)現(xiàn)的,所以用于寫(或擦除)操作的FLASH指針必須是xdata類型。由于FLASH讀操作是用MOVC指令實(shí)現(xiàn)的,用于讀操作的FLASH指針必須是code類型。
4.1 寫參數(shù)操作
寫參數(shù)就是把參數(shù)寫到FLASH中。由于寫一個(gè)FLASH字節(jié)只能對(duì)各位寫入0,因此在寫一個(gè)FLASH字節(jié)之前,該字節(jié)必須被初始化為0xff。而一個(gè)FLASH擦除操作將一頁(yè)內(nèi)的所有字節(jié)初始化為0xff。即寫入FLASH前,需要對(duì)FLASH進(jìn)行擦除操作。flash_write是用C語(yǔ)言實(shí)現(xiàn)的寫參數(shù)操作,可以將l_len個(gè)字節(jié)的數(shù)據(jù)寫入到以0x00地址為開頭的FLASH內(nèi)。
4.2 讀參數(shù)操作
讀參數(shù)就是把參數(shù)從FLASH中讀取出來并賦值給指定的參數(shù)中。flash_read是用C語(yǔ)言實(shí)現(xiàn)的讀參數(shù)操作,可以將l_len個(gè)字節(jié)的數(shù)據(jù)讀取出來,并拷貝到以l_string為開頭的地址內(nèi)。
4.3 參數(shù)的動(dòng)態(tài)配置
參數(shù)的動(dòng)態(tài)配置是由上位機(jī)通過串口完成的,連接圖如圖2所示。上位機(jī)和控制設(shè)備的信息交互是按照預(yù)定的串口協(xié)議進(jìn)行的。上位機(jī)軟件是VC++6.0編寫的串口程序。配置參數(shù)時(shí),由上位機(jī)通過串口向單片機(jī)發(fā)送攜帶參數(shù)信息的指令。單片機(jī)接收到相關(guān)指令后,進(jìn)行解析,提取出基準(zhǔn)值和補(bǔ)償值,寫入FLASH,再?gòu)腇LASH中讀出,通過串口向外發(fā)送確認(rèn)信息。用戶在上位機(jī)通過反饋信息,就可以識(shí)別參數(shù)配置過程是否成功。
C8051F120具有兩個(gè)UART串行端口。通過軟件設(shè)置,串行口以115 200 bps的波特率和上位機(jī)進(jìn)行通信。串行口接收數(shù)據(jù)的方式采用中斷方式。
控制設(shè)備中涉及參數(shù)的動(dòng)態(tài)配置包括參數(shù)的首次寫入、參數(shù)的更改。參數(shù)的首次寫入指單片機(jī)程序剛下載時(shí)FLASH中數(shù)據(jù)不是預(yù)期的數(shù)據(jù),需要通過上位機(jī)發(fā)送設(shè)置指令,把參數(shù)保存到單片機(jī)的FLASH中。參數(shù)的更改指單片機(jī)的使用環(huán)境或硬件特性等發(fā)生改變時(shí),參數(shù)也需要隨之改變。
參數(shù)的動(dòng)態(tài)配置就是調(diào)用參數(shù)讀寫的過程。由于上面已經(jīng)實(shí)現(xiàn)了將參數(shù)寫入FLASH和從FLASH中讀取參數(shù)操作,這里主要介紹參數(shù)的解析和讀寫函數(shù)的調(diào)用。exec_data()將上位機(jī)發(fā)送過來的數(shù)據(jù)拷貝到write _buf數(shù)組中,并寫入FLASH中,再?gòu)腇LASH中讀取數(shù)據(jù)到read_buf,最后設(shè)置給參數(shù)refValue和comp_AD9874。
5 參數(shù)的有效性
考慮到參數(shù)的讀寫過程中可能會(huì)受到周圍干擾誤碼,進(jìn)而導(dǎo)致所獲取的參數(shù)超出預(yù)定范圍。所以,對(duì)讀取出來的參數(shù)進(jìn)行有效性判斷,采用范圍判斷和奇偶檢驗(yàn)判斷。范圍判斷指判斷讀取的參考值和補(bǔ)償值是否超出預(yù)定范圍,如果超出,則給出錯(cuò)誤提示,如亮燈指示。奇偶檢驗(yàn)判斷指對(duì)讀取出來的參數(shù)進(jìn)行奇偶檢驗(yàn)判斷,如果校驗(yàn)的結(jié)果不對(duì),表明所讀取的參數(shù)不正確,則給出錯(cuò)誤提示,如亮燈指示。
6 總結(jié)
本文根據(jù)參數(shù)配置的需求,選擇了C8051F120芯片作為平臺(tái),并介紹了如何在C8051F120芯片進(jìn)行參數(shù)的讀寫操作,實(shí)現(xiàn)了上位機(jī)對(duì)控制設(shè)備參數(shù)的動(dòng)態(tài)配置。該實(shí)現(xiàn)方法已在控制設(shè)備上使用,操作方便,且效果良好。
參考文獻(xiàn):
[1] SILABS. C8051F120芯片的datasheet[Z].
[2] 馮順萍,劉文澤,方昌始. 單片機(jī)系統(tǒng)運(yùn)行參數(shù)的保存及有效性判別[J]. 信息化研究, 2002,28(6): 1-3.
[3] 陳富安,張瑩. C8051F35X單片機(jī)內(nèi)部FLASH存儲(chǔ)器的擦寫方法[J]. 電子設(shè)計(jì)工程, 2010,18(2): 105-106.
[4] 江賢志,劉華章,張教育,等. 基于C8051F020單片機(jī)的RS485串行通信設(shè)計(jì)[J]. 電子測(cè)量技術(shù), 2014,37(3): 121-124.
[5] 張培仁,孫力. 基于C語(yǔ)言C8051F系列微控制器原理與應(yīng)用[M]. 北京: 清華大學(xué)出版社, 2007.
[6] 潘琢金,施國(guó)君. C8051FXXX高速SOC單片機(jī)原理及應(yīng)用[M]. 北京: 北京航空航天大學(xué)出版社, 2003.
[7] 王幸之,王雷,翟成,等. 單片機(jī)應(yīng)用系統(tǒng)抗干擾技術(shù)[M]. 北京: 北京航空航天大學(xué)出版社, 2000.
[8] 尹海宏,陳雷. 基于單片機(jī)技術(shù)的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J]. 信息技術(shù), 2008(12): 5-7.
[9] 傅務(wù)謹(jǐn). Flash存儲(chǔ)器在嵌入式系統(tǒng)設(shè)計(jì)中的應(yīng)用[J]. 福建電腦, 2008,7(22): 91-93.
[10] 趙海艦. 嵌入式系統(tǒng)的Flash編程技術(shù)研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2005,11(26): 3006-3008.