《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > 單片機(jī)應(yīng)用策略(1):設(shè)計(jì)常用方法及應(yīng)對(duì)策略

單片機(jī)應(yīng)用策略(1):設(shè)計(jì)常用方法及應(yīng)對(duì)策略

2012-06-04

一,、單片機(jī)開(kāi)發(fā)過(guò)程中硬件調(diào)試技巧

  在單片機(jī)開(kāi)發(fā)過(guò)程中,,從硬件設(shè)計(jì)到軟件設(shè)計(jì)幾乎是開(kāi)發(fā)者針對(duì)本系統(tǒng)特點(diǎn)親自完成的,。這樣雖然可以降低系統(tǒng)成本,,提高系統(tǒng)的適應(yīng)性,,但是每個(gè)系統(tǒng)的調(diào)試占去了總開(kāi)發(fā)時(shí)間的2/3,,可見(jiàn)調(diào)試的工作量比較大,。單片機(jī)系統(tǒng)的硬件調(diào)試和軟件調(diào)試是不能分開(kāi)的,許多硬件錯(cuò)誤是在軟件調(diào)試中被發(fā)現(xiàn)和糾正的,。但通常是先排除明顯的硬件故障以后,,再和軟件結(jié)合起來(lái)調(diào)試以進(jìn)一步排除故障??梢?jiàn)硬件的調(diào)試是基礎(chǔ),,如果硬件調(diào)試不通過(guò),軟件設(shè)計(jì)則是無(wú)從做起,。本文結(jié)合作者在單片機(jī)開(kāi)發(fā)過(guò)程中體會(huì),,討論硬件調(diào)試的技巧。

  當(dāng)硬件設(shè)計(jì)從布線到焊接安裝完成之后,,就開(kāi)始進(jìn)入硬件調(diào)試階段,,調(diào)試大體分為以下幾步。

  1 硬件靜態(tài)的調(diào)試

  1.1排除邏輯故障

  這類故障往往由于設(shè)計(jì)和加工制板過(guò)程中工藝性錯(cuò)誤所造成的,。主要包括錯(cuò)線,、開(kāi)路、短路,。排除的方法是首先將加工的印制板認(rèn)真對(duì)照原理圖,,看兩者是否一致。應(yīng)特別注意電源系統(tǒng)檢查,,以防止電源短路和極性錯(cuò)誤,,并重點(diǎn)檢查系統(tǒng)總線(地址總線、數(shù)據(jù)總線和控制總線)是否存在相互之間短路或與其它信號(hào)線路短路,。必要時(shí)利用數(shù)字萬(wàn)用表的短路測(cè)試功能,,可以縮短排錯(cuò)時(shí)間。

  1.2排除元器件失效

  造成這類錯(cuò)誤的原因有兩個(gè):一個(gè)是元器件買來(lái)時(shí)就已壞了;另一個(gè)是由于安裝錯(cuò)誤,,造成器件燒壞,。可以采取檢查元器件與設(shè)計(jì)要求的型號(hào),、規(guī)格和安裝是否一致,。在保證安裝無(wú)誤后,用替換方法排除錯(cuò)誤,。

  1.3排除電源故障

  在通電前,,一定要檢查電源電壓的幅值和極性,否則很容易造成集成塊損壞。加電后檢查各插件上引腳的電位,,一般先檢查VCC與GND之間電位,,若在5V~4.8V之間屬正常。若有高壓,,聯(lián)機(jī)仿真器調(diào)試時(shí),,將會(huì)損壞仿真器等,有時(shí)會(huì)使應(yīng)用系統(tǒng)中的集成塊發(fā)熱損壞,。

  2 聯(lián)機(jī)仿真調(diào)試

  聯(lián)機(jī)仿真必須借助仿真開(kāi)發(fā)裝置,、示波器、萬(wàn)用表等工具,。這些工具是單片機(jī)開(kāi)發(fā)的最基本工具,。

  信號(hào)線是聯(lián)絡(luò)8031和外部器件的紐帶,如果信號(hào)線連結(jié)錯(cuò)誤或時(shí)序不對(duì),,那么都會(huì)造成對(duì)外圍電路讀寫(xiě)錯(cuò)誤,。51系列單片機(jī)的信號(hào)線大體分為讀、寫(xiě)信號(hào)線,、片選信號(hào)線,、時(shí)鐘信號(hào)線、外部程序存貯器讀選通信號(hào)(PSEN),、地址鎖存信號(hào)(ALE),、復(fù)位信號(hào)等幾大類。這些信號(hào)大多屬于脈沖信號(hào),,對(duì)于脈沖信號(hào)借助示波器(這里指通用示波器)用常規(guī)方法很難觀測(cè)到,,必須采取一定措施才能觀測(cè)到。應(yīng)該利用軟件編程的方法來(lái)實(shí)現(xiàn),。例如對(duì)片選信號(hào),,運(yùn)行下面的小程序就可以檢測(cè)出譯碼片選信號(hào)是否正常。

  MAIN:MOVDPTR,,#DPTR

  ;將地址送入DPTR

  MOVXA,,@DPTR

  ;將譯碼地址外RAM中的內(nèi)容送入ACC

  NOP;適當(dāng)延時(shí)

  SJMPMAIN;循環(huán)

  執(zhí)行程序后,就可以利用示波器觀察芯片的片選信號(hào)引出腳(用示波器掃描時(shí)間為1μs/每格檔),,這時(shí)應(yīng)看到周期為數(shù)微秒的負(fù)脈沖波形,,若看不到則說(shuō)明譯碼信號(hào)有錯(cuò)誤。

  對(duì)于電平類信號(hào),,觀測(cè)起來(lái)就比較容易。例如對(duì)復(fù)位信號(hào)觀測(cè)就可以直接利用示波器,,當(dāng)按下復(fù)位鍵時(shí),,可以看到8031的復(fù)位引腳將變?yōu)楦唠娖?一旦松開(kāi),電平將變低。

  總而言之,,對(duì)于脈沖觸發(fā)類的信號(hào)我們要用軟件來(lái)配合,,并要把程序編為死循環(huán),再利用示波器觀察;對(duì)于電平類觸發(fā)信號(hào),,可以直接用示波器觀察,。

  下面結(jié)合在自動(dòng)配料控制系統(tǒng)中鍵盤(pán)、顯示部分的調(diào)試過(guò)程來(lái)加以說(shuō)明,。本系統(tǒng)中的鍵盤(pán),、顯示部分都是由并行口芯片8155擴(kuò)展而成的。8155屬于可編程器件,,因而很難劃分硬件和軟件,,往往在調(diào)試中即使電路安裝正確沒(méi)有一定的指令去指揮它工作,也是無(wú)法發(fā)現(xiàn)硬件的故障,。因此要使用一些簡(jiǎn)單的調(diào)試程序來(lái)確定硬件的組裝是否正確,、功能是否完整。在本系統(tǒng)中采取了先對(duì)顯示器調(diào)試,,再對(duì)鍵盤(pán)調(diào)試,。

  (1)顯示器部分調(diào)試為了使調(diào)試順利進(jìn)行,首先將8155與LED顯示分離,,這樣就可以用靜態(tài)方法先測(cè)試LED顯示,,分別用規(guī)定的電平加至控制數(shù)碼管段和位顯示的引腳,看數(shù)碼管顯示是否與理論上一致,。不一致,,一般為L(zhǎng)ED顯示器接觸不良所致,必須找出故障,,排除后再檢測(cè)8155電路工作是否正常,。對(duì)8155應(yīng)進(jìn)行編程調(diào)試時(shí),分為兩個(gè)步驟:第一,,對(duì)其進(jìn)行初始化(即寫(xiě)入命令控制字,,最好定義為輸出方式)后,分別向PA,、PB,、PC三個(gè)口送入#0FFH,這時(shí)可以利用萬(wàn)用表測(cè)試各口的位電壓為3.8 V左右,,若送入#00H,,這時(shí)各口的位電壓應(yīng)為0.03 V;第二,將8155與LED結(jié)合起來(lái),,借助開(kāi)發(fā)機(jī),,通過(guò)編制程序(最好采用“8”字循環(huán)程序)進(jìn)行調(diào)試。若調(diào)試通過(guò)后,就可以編制應(yīng)用程序了,。

  (2)鍵盤(pán)調(diào)試一般顯示器調(diào)試通過(guò)后,,鍵盤(pán)調(diào)試就比較簡(jiǎn)單,完全可以借助于顯示器,,利用程序進(jìn)行調(diào)試,。利用開(kāi)發(fā)裝置對(duì)程序進(jìn)行設(shè)置斷點(diǎn),通過(guò)斷點(diǎn)可以檢查程序在斷點(diǎn)前后的鍵值變化,,這樣可知鍵盤(pán)工作是否正常,。

  以上討論了借助簡(jiǎn)單工具對(duì)單片機(jī)硬件調(diào)試的方法,這些方法如果利用得好,,就

  可以大大縮短單片機(jī)的開(kāi)發(fā)周期,。

二、單片機(jī)破解的常用方法及應(yīng)對(duì)策略

 ?。薄∫?/p>

  單片機(jī)(Microcontroller)一般都有內(nèi)部ROM/EEPROM/FLASH供用戶存放程序,。為了防止未經(jīng)授權(quán)訪問(wèn)或拷貝單片機(jī)的機(jī)內(nèi)程序,大部分單片機(jī)都帶有加密鎖定位或者加密字節(jié),,以保護(hù)片內(nèi)程序,。如果在編程時(shí)加密鎖定位被使能(鎖定),就無(wú)法用普通編程器直接讀取單片機(jī)內(nèi)的程序,,這就是所謂拷貝保護(hù)或者說(shuō)鎖定功能,。事實(shí)上,這樣的保護(hù)措施很脆弱,,很容易被破解,。單片機(jī)攻擊者借助專用設(shè)備或者自制設(shè)備,利用單片機(jī)芯片設(shè)計(jì)上的漏洞或軟件缺陷,,通過(guò)多種技術(shù)手段,,就可以從芯片中提取關(guān)鍵信息,獲取單片機(jī)內(nèi)程序,。因此,,作為電子產(chǎn)品的設(shè)計(jì)工程師非常有必要了解當(dāng)前單片機(jī)攻擊的最新技術(shù),做到知己知彼,,心中有數(shù),,才能有效防止自己花費(fèi)大量金錢和時(shí)間辛辛苦苦設(shè)計(jì)出來(lái)的產(chǎn)品被人家一夜之間仿冒的事情發(fā)生。

 ?。病纹瑱C(jī)攻擊技術(shù)

  目前,,攻擊單片機(jī)主要有四種技術(shù),分別是:

 ?。ǎ保┸浖?/p>

  該技術(shù)通常使用處理器通信接口并利用協(xié)議,、加密算法或這些算法中的安全漏洞來(lái)進(jìn)行攻擊,。軟件攻擊取得成功的一個(gè)典型事例是對(duì)早期ATMEL AT89C 系列單片機(jī)的攻擊。攻擊者利用了該系列單片機(jī)擦除操作時(shí)序設(shè)計(jì)上的漏洞,,使用自編程序在擦除加密鎖定位后,停止下一步擦除片內(nèi)程序存儲(chǔ)器數(shù)據(jù)的操作,,從而使加過(guò)密的單片機(jī)變成沒(méi)加密的單片機(jī),,然后利用編程器讀出片內(nèi)程序。

 ?。ǎ玻?電子探測(cè)攻擊

  該技術(shù)通常以高時(shí)間分辨率來(lái)監(jiān)控處理器在正常操作時(shí)所有電源和接口連接的模擬特性,,并通過(guò)監(jiān)控它的電磁輻射特性來(lái)實(shí)施攻擊。因?yàn)閱纹瑱C(jī)是一個(gè)活動(dòng)的電子器件,,當(dāng)它執(zhí)行不同的指令時(shí),,對(duì)應(yīng)的電源功率消耗也相應(yīng)變化。這樣通過(guò)使用特殊的電子測(cè)量?jī)x器和數(shù)學(xué)統(tǒng)計(jì)方法分析和檢測(cè)這些變化,,即可獲取單片機(jī)中的特定關(guān)鍵信息,。

  (3)過(guò)錯(cuò)產(chǎn)生技術(shù)

  該技術(shù)使用異常工作條件來(lái)使處理器出錯(cuò),,然后提供額外的訪問(wèn)來(lái)進(jìn)行攻擊,。使用最廣泛的過(guò)錯(cuò)產(chǎn)生攻擊手段包括電壓沖擊和時(shí)鐘沖擊。低電壓和高電壓攻擊可用來(lái)禁止保護(hù)電路工作或強(qiáng)制處理器執(zhí)行錯(cuò)誤操作,。時(shí)鐘瞬態(tài)跳變也許會(huì)復(fù)位保護(hù)電路而不會(huì)破壞受保護(hù)信息,。電源和時(shí)鐘瞬態(tài)跳變可以在某些處理器中影響單條指令的解碼和執(zhí)行。

 ?。ǎ矗┨结樇夹g(shù)

  該技術(shù)是直接暴露芯片內(nèi)部連線,,然后觀察、操控,、干擾單片機(jī)以達(dá)到攻擊目的,。

  為了方便起見(jiàn),人們將以上四種攻擊技術(shù)分成兩類,,一類是侵入型攻擊(物理攻擊),,這類攻擊需要破壞封裝,然后借助半導(dǎo)體測(cè)試設(shè)備,、顯微鏡和微定位器,,在專門(mén)的實(shí)驗(yàn)室花上幾小時(shí)甚至幾周時(shí)間才能完成。所有的微探針技術(shù)都屬于侵入型攻擊,。另外三種方法屬于非侵入型攻擊,,被攻擊的單片機(jī)不會(huì)被物理?yè)p壞。在某些場(chǎng)合非侵入型攻擊是特別危險(xiǎn)的,,這是因?yàn)榉乔秩胄凸羲柙O(shè)備通??梢宰灾坪蜕?jí),,因此非常廉價(jià)。

  大部分非侵入型攻擊需要攻擊者具備良好的處理器知識(shí)和軟件知識(shí),。與之相反,,侵入型的探針攻擊則不需要太多的初始知識(shí),而且通??捎靡徽紫嗨频募夹g(shù)對(duì)付寬范圍的產(chǎn)品,。因此,對(duì)單片機(jī)的攻擊往往從侵入型的反向工程開(kāi)始,,積累的經(jīng)驗(yàn)有助于開(kāi)發(fā)更加廉價(jià)和快速的非侵入型攻擊技術(shù),。

  3 侵入型攻擊的一般過(guò)程

  侵入型攻擊的第一步是揭去芯片封裝,。有兩種方法可以達(dá)到這一目的:第一種是完全溶解掉芯片封裝,,暴露金屬連線。第二種是只移掉硅核上面的塑料封裝,。第一種方法需要將芯片綁定到測(cè)試夾具上,,借助綁定臺(tái)來(lái)操作。第二種方法除了需要具備攻擊者一定的知識(shí)和必要的技能外,,還需要個(gè)人的智慧和耐心,,但操作起來(lái)相對(duì)比較方便。

  芯片上面的塑料可以用小刀揭開(kāi),,芯片周圍的環(huán)氧樹(shù)脂可以用濃硝酸腐蝕掉,。熱的濃硝酸會(huì)溶解掉芯片封裝而不會(huì)影響芯片及連線。該過(guò)程一般在非常干燥的條件下進(jìn)行,,因?yàn)樗拇?/p>

  在可能會(huì)侵蝕已暴露的鋁線連接,。

  接著在超聲池里先用丙酮清洗該芯片以除去殘余硝酸,然后用清水清洗以除去鹽分并干燥,。沒(méi)有超聲池,,一般就跳過(guò)這一步。這種情況下,,芯片表面會(huì)有點(diǎn)臟,,但是不太影響紫外光對(duì)芯片的操作效果。

  最后一步是尋找保護(hù)熔絲的位置并將保護(hù)熔絲暴露在紫外光下,。一般用一臺(tái)放大倍數(shù)至少100倍的顯微鏡,,從編程電壓輸入腳的連線跟蹤進(jìn)去,來(lái)尋找保護(hù)熔絲,。若沒(méi)有顯微鏡,,則采用將芯片的不同部分暴露到紫外光下并觀察結(jié)果的方式進(jìn)行簡(jiǎn)單的搜索。操作時(shí)應(yīng)用不透明的紙片覆蓋芯片以保護(hù)程序存儲(chǔ)器不被紫外光擦除,。將保護(hù)熔絲暴露在紫外光下5~10分鐘就能破壞掉保護(hù)位的保護(hù)作用,,之后,,使用簡(jiǎn)單的編程器就可直接讀出程序存儲(chǔ)器的內(nèi)容。

  對(duì)于使用了防護(hù)層來(lái)保護(hù)EEPROM單元的單片機(jī)來(lái)說(shuō),,使用紫外光復(fù)位保護(hù)電路是不可行的,。對(duì)于這種類型的單片機(jī),一般使用微探針技術(shù)來(lái)讀取存儲(chǔ)器內(nèi)容,。在芯片封裝打開(kāi)后,,將芯片置于顯微鏡下就能夠很容易的找到從存儲(chǔ)器連到電路其它部分的數(shù)據(jù)總線。由于某種原因,,芯片鎖定位在編程模式下并不鎖定對(duì)存儲(chǔ)器的訪問(wèn)。利用這一缺陷將探針?lè)旁跀?shù)據(jù)線的上面就能讀到所有想要的數(shù)據(jù),。在編程模式下,,重啟讀過(guò)程并連接探針到另外的數(shù)據(jù)線上就可以讀出程序和數(shù)據(jù)存儲(chǔ)器中的所有信息。

  還有一種可能的攻擊手段是借助顯微鏡和激光切割機(jī)等設(shè)備來(lái)尋找保護(hù)熔絲,,從而尋查和這部分電路相聯(lián)系的所有信號(hào)線,。由于設(shè)計(jì)有缺陷,因此,,只要切斷從保護(hù)熔絲到其它電路的某一根信號(hào)線,,就能禁止整個(gè)保護(hù)功能。由于某種原因,,這根線離其它的線非常遠(yuǎn),,所以使用激光切割機(jī)完全可以切斷這根線而不影響臨近線。這樣,,使用簡(jiǎn)單的編程器就能直接讀出程序存儲(chǔ)器的內(nèi)容,。

  雖然大多數(shù)普通單片機(jī)都具有熔絲燒斷保護(hù)單片機(jī)內(nèi)代碼的功能,但由于通用低檔的單片機(jī)并非定位于制作安全類產(chǎn)品,,因此,,它們往往沒(méi)有提供有針對(duì)性的防范措施且安全級(jí)別較低。加上單片機(jī)應(yīng)用場(chǎng)合廣泛,,銷售量大,,廠商間委托加工與技術(shù)轉(zhuǎn)讓頻繁,大量技術(shù)資料外瀉,,使得利用該類芯片的設(shè)計(jì)漏洞和廠商的測(cè)試接口,,并通過(guò)修改熔絲保護(hù)位等侵入型攻擊或非侵入型攻擊手段來(lái)讀取單片機(jī)的內(nèi)部程序變得比較容易。

 ?。?應(yīng)對(duì)單片機(jī)破解的幾點(diǎn)建議

  任何一款單片機(jī)?從理論上講,,攻擊者均可利用足夠的投資和時(shí)間使用以上方法來(lái)攻破。所以,,在用單片機(jī)做加密認(rèn)證或設(shè)計(jì)系統(tǒng)時(shí),,應(yīng)盡量加大攻擊者的攻擊成本和所耗費(fèi)的時(shí)間,。這是系統(tǒng)設(shè)計(jì)者應(yīng)該始終牢記的基本原則。除此之外,,還應(yīng)注意以下幾點(diǎn):

 ?。ǎ保┰谶x定加密芯片前,要充分調(diào)研,,了解單片機(jī)破解技術(shù)的新進(jìn)展,,包括哪些單片機(jī)是已經(jīng)確認(rèn)可以破解的。盡量不選用已可破解或同系列,、同型號(hào)的芯片,。

  (2)盡量不要選用MCS51系列單片機(jī),,因?yàn)樵搯纹瑱C(jī)在國(guó)內(nèi)的普及程度最高,,被研究得也最透。

 ?。ǎ常┊a(chǎn)品的原創(chuàng)者,,一般具有產(chǎn)量大的特點(diǎn),所以可選用比較生僻,、偏冷門(mén)的單片機(jī)來(lái)加大仿冒者采購(gòu)的難度,。

  (4)選擇采用新工藝,、新結(jié)構(gòu),、上市時(shí)間較短的單片機(jī),如ATMEL AVR系列單片機(jī)等,。

 ?。ǎ担┰谠O(shè)計(jì)成本許可的條件下,應(yīng)選用具有硬件自毀功能的智能卡芯片,,以有效對(duì)付物理攻擊,。

  (6)如果條件許可,,可采用兩片不同型號(hào)單片機(jī)互為備份,,相互驗(yàn)證,從而增加破解成本,。

 ?。ǎ罚┐蚰サ粜酒吞?hào)等信息或者重新印上其它的型號(hào),以假亂真,。

  當(dāng)然,,要想從根本上防止單片機(jī)被解密,程序被盜版等侵權(quán)行為發(fā)生,,只能依靠法律手段來(lái)保障,。

三,、MCS-51單片機(jī)定時(shí)中斷不同應(yīng)用情況

  根據(jù)定時(shí)中斷的不同應(yīng)用情況,應(yīng)選擇不同的精確定時(shí)編程方法,。MCS-51單片機(jī)的中斷響應(yīng)延遲時(shí)間,,取決于其它中斷服務(wù)程序是否在進(jìn)行,或取決于正在執(zhí)行的是什么樣的指令,。單中斷系統(tǒng)中的中斷響應(yīng)時(shí)間為3~8個(gè)機(jī)器周期.文中以定時(shí)器T1工作在定時(shí)方式1為例,,晶振頻率為12MHz 。

  1 方法1

  在定時(shí)器溢出中斷得到響應(yīng)時(shí),,停止定時(shí)器計(jì)數(shù),,讀出計(jì)數(shù)值(反映了中斷響應(yīng)的延遲時(shí)間),根據(jù)此計(jì)數(shù)值算出到下一次中斷時(shí),,需多長(zhǎng)時(shí)間,,由此來(lái)重裝載和啟動(dòng)定時(shí)器。例如定時(shí)周期為1ms,,則通常定時(shí)器重裝載值為-1000(0FC18H)。下面的程序在計(jì)算每個(gè)定時(shí)周期的精確重裝載值時(shí),,考慮了由停止計(jì)數(shù)(CLR TR1)到重新啟動(dòng)計(jì)數(shù)(SETB TR1)之間的7個(gè)機(jī)器周期時(shí)間,。程序中#LOW(-1000+7)和#HIGH(-1000+7)是匯編符號(hào),分別表示-1000+7=0FC1FH這個(gè)立即數(shù)的低位字節(jié)(1FH)和高位字節(jié)(0FCH),。

  ……

  CLR EA ;禁止所有中斷

  CLR TR1 ;停止定時(shí)器T1

  MOV A,,#LOW(-1000+7) ;期望數(shù)的低位字節(jié)

  ADD A,TL1 ;進(jìn)行修正

  MOV TL1,,A ;重裝載低位字節(jié)

  MOV A,,#HIGH(-1000+7) ;對(duì)高位字節(jié)處理

  ADDC A,TH1

  MOV TH1,,A

  SETB TR1 ;重啟動(dòng)定時(shí)器

  SETB EA ;重開(kāi)中斷

  ……

  此方法適用于各種原因造成的定時(shí)誤差的情況,,為通用方法。

  2 方法2

  假如定時(shí)周期為10ms,,通常定時(shí)器重裝載值為0D8F0H,,中斷子程序如下[2]:

  ORL TL1,#0F0H

  MOV TH1,,#0D8H

  ……

  這里用ORL TL1,,#0F0H代替MOV TL1,#0F0H 可提高定時(shí)精度,。此方法只適用于重裝載值低位字節(jié)的低4位為零,,且中斷響應(yīng)的延遲時(shí)間小于16個(gè)機(jī)器周期的情況。類似的定時(shí)器重裝載值有0FFF0H,,0FFE0H等,。

  3 方法3

  假如定時(shí)周期為1ms,,通常定時(shí)器重裝載值為0FC18H,中斷子程序如下:

  MOV A,,#LOW(-1000+4) ;期望數(shù)的低位字節(jié)

  ADD A,,TL1

  MOV TL1,A

  MOV A,,#HIGH(-1000+4) ;對(duì)高位字節(jié)處理

  ADDC A,,TH1

  MOV TH1,A

  DEC TL1 ;恢復(fù)提前了的2個(gè)機(jī)器周期

  ……


 

方法4

假如定時(shí)周期不確定,,只知道定時(shí)器重裝載值存放在寄存器R3,、R2中,中斷子程序如下:

MOV A,,#05H ;3個(gè)機(jī)器周期裝載TL1,,2個(gè)周期提前

ADD A,TL1

ADD A,,R2

MOV TL1,,A

MOV A,R3 ;處理高位字節(jié)

ADDC A,,TH1

MOV TH1,,A

DEC TL1 ;恢復(fù)提前了的2個(gè)機(jī)器周期

……

此法適用于定時(shí)周期不確定的情況,其它同方法3,。

5 方法5

當(dāng)定時(shí)中斷發(fā)生的位置可預(yù)知時(shí),,通常出現(xiàn)在主程序的AJMP $ (或SJMP $)等待指令處,中斷延遲時(shí)間為3個(gè)或4個(gè)機(jī)器周期,。取固定值4可簡(jiǎn)化補(bǔ)償程序,。以定時(shí)周期1ms為例,中斷子程序如下:

ORG 001BH

MOV TL1,,#LOW(-1000+4)

MOV TH1,,#HIGH(-1000+4)

……

此方法適用于定時(shí)中斷總發(fā)生在同一條指令位置,且無(wú)其它中斷源的情況,。

                                          

四,、單片機(jī)低功耗控制與設(shè)計(jì)的幾個(gè)要點(diǎn)

  降低功耗不光能夠大大的節(jié)約電能還能簡(jiǎn)化電源部分的設(shè)計(jì),甚至可以用于手持設(shè)備上面使用,,這些都已經(jīng)越來(lái)越成為未來(lái)產(chǎn)品的設(shè)計(jì)方向了,。

  1 降低功耗從MCU選型開(kāi)始。一開(kāi)始選型的時(shí)候就應(yīng)該考慮選擇低功耗的MCU比如MSP430一類的為低功耗設(shè)計(jì)的CPU,。

  強(qiáng)烈不建議使用51一方面是因?yàn)?1速度慢,,另外一方面是因?yàn)?1的IO是有上拉電阻的,雖然當(dāng)IO為高電平是上拉電阻不費(fèi)電,但是下拉電流的時(shí)候卻也有不小的功耗產(chǎn)生,。還有一點(diǎn)就是51的運(yùn)算速度實(shí)在是太慢了~~~~~很多運(yùn)算用51都需要很高的主頻而主頻高了就意味著高的功耗,。

  2 選擇器件用電電壓。很明顯降低器件的用電電壓能夠明顯的降低器件的耗電比如說(shuō)ATmega8和ATmega88雖然芯片大致內(nèi)部結(jié)構(gòu)一致但是后者可以工作在1.8V的超低電壓下而前者就不行,,綜合考慮下當(dāng)然還是選擇后者,。

  3 盡量降低器件的工作頻率。大家都知道CMOS電路的工作電流主要來(lái)此于開(kāi)關(guān)轉(zhuǎn)換時(shí)對(duì)后一級(jí)輸入端的電容充放電,,如果能夠降低MCU的工作頻率自然耗電也就下來(lái)了,,要知道當(dāng)AVR工作在32.768Hz時(shí)和工作在20Mhz時(shí)的工作電流差異可不是一般的小啊。

  4 盡量使用中斷讓處理器進(jìn)入更深的睡眠,。眾所周知睡眠模式和掉電模式能夠大大的降低MCU的工作電流,,聰明的單片機(jī)設(shè)計(jì)師能夠充分的利用MCU的中斷功能讓MCU周期性的工作和睡眠從而大大的降低MCU的工作電流。

  5 盡量關(guān)閉MCU內(nèi)部不用的資源,。這個(gè)嗎地球人都知道的好處,,我說(shuō)這個(gè)有點(diǎn)像廢話一樣,不用的東西你干嗎開(kāi)著呢,?比如ATmega8內(nèi)部的模擬比較器,,默認(rèn)是開(kāi)著的還有ATmega88內(nèi)部的大多數(shù)資源都可以在不用的時(shí)候用軟件關(guān)閉。

  6 盡量使用VMOS做為外部功率擴(kuò)展器件,。道理很簡(jiǎn)單VMOS驅(qū)動(dòng)的時(shí)候是電壓行器件驅(qū)動(dòng)是幾乎不產(chǎn)生功耗,,要比普通的晶體管省電多了,而且由于VMOS的導(dǎo)通內(nèi)阻低通常只有幾十個(gè)毫歐,,在小電流的時(shí)候器件自身發(fā)熱也小,尤其是小電流是效率遠(yuǎn)比傳統(tǒng)晶體管要高的多的多,。這里還是建議使用高速VMOS,,因?yàn)楦咚賄MOS在開(kāi)關(guān)速度相當(dāng)高的PWM時(shí)效率會(huì)更高。

  7 片外IC的電源最好都能由MCU的IO控制比如說(shuō)我們常用的24C02,。由于它是掉電記憶的,,所以我們完全可以在它不工作的時(shí)候?qū)λP(guān)電源,以節(jié)約電流,。還有比如說(shuō)我們常用的6116的SRAM,,我們完全可以用單片機(jī)來(lái)控制它的片選端口來(lái)控制它的工作與休眠從而節(jié)約電流。

  8 這招也是最毒辣的一招,。通常我們驅(qū)動(dòng)一些LED器件,,完全可以通過(guò)PWM來(lái)控制從而省略限流電阻,要知道當(dāng)器件選定后它的內(nèi)阻也就已經(jīng)確定,,而當(dāng)電源電壓也確定的時(shí)候,,就可以通過(guò)占空比來(lái)確定器件上的電壓,從而節(jié)約了限流電阻同時(shí)也就節(jié)約了限流電阻上面的功耗,如果用戶使用的是電池,,我們完全還可以不定期的對(duì)電池電壓進(jìn)行檢測(cè)然后改變占空比,,從而恒定負(fù)載上面的電壓,達(dá)到電源的最大利用率,。


五,、提高單片機(jī)設(shè)計(jì)硬件可靠性的一般方法

  1、電路設(shè)計(jì)

  影響單片機(jī)測(cè)控系統(tǒng)可靠性的因素,,有45%來(lái)自系統(tǒng)設(shè)計(jì),。為了保證測(cè)控系統(tǒng)的可靠性,在對(duì)電路設(shè)計(jì)時(shí),,應(yīng)進(jìn)行最壞情況的設(shè)計(jì),。

  各種電子元件的特性不可能是一個(gè)恒定值,總是在其標(biāo)注值的上下有一個(gè)變化的范圍,。同時(shí),,電源電壓也有一個(gè)波動(dòng)范圍,最壞的設(shè)計(jì)(指工作環(huán)境最壞情況下)方法是考慮所有元件的公差,,并取其最不利的數(shù)值,。核算電路的每一個(gè)規(guī)定的特性。如果這一組參數(shù)值都能保證正常工作,,那么在公差范圍內(nèi)的其它所有元件值都能使電路可靠地工作,。在設(shè)計(jì)應(yīng)用系統(tǒng)電路時(shí),還要根據(jù)元件的失效率特征及其使用場(chǎng)所采取相應(yīng)措施:

  在元件級(jí),,對(duì)那些容易產(chǎn)生短路的部件,,以串聯(lián)方式復(fù)制;對(duì)那些容易產(chǎn)生斷路的部件,以并聯(lián)方式復(fù)制,,并在這些部分設(shè)置報(bào)警和保護(hù)裝置,。

  2、元器件選擇

  (1)型號(hào)與公差 在確定元件參數(shù)之后,,還要確定元器件的型號(hào),,這主要取決于電路所允許的公差范圍。對(duì)于電容器,,如果用于常溫環(huán)境中,,一般的電解電容就可以滿足要求,對(duì)于電容公差要求較高的電路系統(tǒng),,則電解電容就不宜選用,。

  (2)降額使用 元件的失效率隨工作電壓成倍的增加。因此,,系統(tǒng)供電電源的容量就大于負(fù)載的最大值,,元器件的額定工作條件是多方面的,,如電流電壓頻率、功率,、機(jī)械強(qiáng)度以及環(huán)境溫度等,。所說(shuō)的降額使用,就是要降低以上這些參數(shù),,在電路設(shè)計(jì)中,,首先考慮的是降低它的功效。選用電容器時(shí)要降低它的工作電壓,,使用電壓一般小于額定電壓的60%,。選用二級(jí)管以及可控硅時(shí),應(yīng)使其工作電流低于額定電流,,對(duì)于晶體管,、穩(wěn)壓管等應(yīng)考慮工作時(shí)的耗散功率。

  集成電路的降額使用同樣是從電氣參數(shù)及環(huán)境因素上來(lái)考慮,。在電氣上要降低功耗,,對(duì)CMOS芯片和線性集成電路在滿足輸出要求的前提下,應(yīng)降低電源電壓或減少下級(jí)負(fù)載,。而TTL電路對(duì)電源電壓要求比較嚴(yán),,這時(shí)應(yīng)注意它們的帶負(fù)載能力,民用元器件的溫度使用范圍較窄,,如果用于工業(yè)控制中,,在整體設(shè)計(jì)時(shí)應(yīng)降額使用。

  3,、結(jié)構(gòu)設(shè)計(jì)

  結(jié)構(gòu)可靠性設(shè)計(jì)是硬件可靠性設(shè)計(jì)的最后階段,,結(jié)構(gòu)設(shè)計(jì)時(shí)首先應(yīng)注意元器件及設(shè)備的安裝方式;其次是控制系統(tǒng)工作的環(huán)境條件,如通風(fēng),、除濕,、防塵等。

  4,、噪聲抑制

  噪聲對(duì)模擬電路會(huì)影響系統(tǒng)的精度,,對(duì)數(shù)字電路會(huì)造成誤動(dòng)作,,因此在工程設(shè)計(jì)中,,必須采用抑制措施。干擾信號(hào)可分為串模干擾和共模干擾兩大類,。針對(duì)這兩類干擾成熟的電路以及專題著作也不少,,下面將常用的方法介紹如下:

  4.1 抗串模干擾的措施

  (1)光電隔離,在輸入和輸出通道上采用光耦合器件來(lái)進(jìn)行信息傳輸,,以免上一級(jí)干擾竄到下一級(jí),。

  (2)硬件濾波電路,常用RC低通道濾波器接在一些低頻信號(hào)傳送電路中(如熱電偶輸入線路等),它可大大削弱各類高頻干擾信號(hào)(如各類“毛刺”干擾),。

  (3)過(guò)壓保護(hù)電路,,在輸入輸出通道上應(yīng)采用一定的過(guò)壓保護(hù)電路,以防止引入高電壓傷害單片機(jī)系統(tǒng),。

  (4)采用抗干擾穩(wěn)壓電源,,微機(jī)系統(tǒng)的供電線路是干擾的主要入侵途徑。通常采用以下幾種措施:

 ?、賳纹瑱C(jī)系統(tǒng)的供電線路和產(chǎn)生干擾的用電設(shè)備分開(kāi)供電;

 ?、谕ㄟ^(guò)低通濾波器和隔離變壓器接入電網(wǎng);

  ③整流元件上并接濾波電容,,如圖1所示,,選用高質(zhì)量的穩(wěn)壓電路。


  4.2 抗共模干擾措施

  共模干擾通常是針對(duì)平衡輸入信號(hào)而言的,,抗共模干擾的方法有以下幾種:

  (1)平衡對(duì)稱輸入,,在設(shè)計(jì)信號(hào)源時(shí),通常是各類信號(hào)盡可能做到平衡對(duì)稱,。

  (2)選用高質(zhì)量的差動(dòng)放大器,。

  (3)要有良好的接地系統(tǒng)。

  (4)系統(tǒng)接地點(diǎn)要正確連接;系統(tǒng)中的大功率的元件地線與小功率的信號(hào)地線也要分開(kāi)布線或加粗地線,,數(shù)字地與模擬地必須分開(kāi),,最后只在一點(diǎn)相連。如果系統(tǒng)中的數(shù)字地與模擬地不分,,則數(shù)字信號(hào)電流在模擬系統(tǒng)的地線中形成干擾(地電位改變),,使模擬信號(hào)失真,這一點(diǎn)請(qǐng)初學(xué)者特別注意,。

  (5)屏蔽,,用金屬外殼或金屬匣將整機(jī)或部分元器件包圍起來(lái),再將金屬外殼或金屬匣接地,,就能起到屏蔽作用,。對(duì)于各種通過(guò)電磁感應(yīng)引起的干擾,特別注意的是屏蔽外殼的接地點(diǎn),,一定與信號(hào)的參考點(diǎn)相接,。

  以上介紹的幾項(xiàng)是十分必要的硬件抗干擾措施。


 

 

 

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。