當(dāng)需要清0操作的字節(jié)單元的個(gè)數(shù)增加時(shí),程序中MOV指令的個(gè)數(shù)也會(huì)隨之增加。為了降低程序中重復(fù)代碼的數(shù)量,縮短程序的長(zhǎng)度,可以采用循環(huán)程序結(jié)構(gòu)進(jìn)行程序設(shè)計(jì)。
分支結(jié)構(gòu)程序的指令執(zhí)行順序與指令在ROM中的存放順序不同,其中某些具有判斷功能的指令會(huì)根據(jù)判斷結(jié)果改變接下來(lái)的指令執(zhí)行順序,從而使程序產(chǎn)生一個(gè)或多個(gè)分支流向??捎糜诜种ЫY(jié)構(gòu)程序設(shè)計(jì)的判斷指令主要包括JZ、CJNE和JB等有條件轉(zhuǎn)移指令。根據(jù)程序分支的數(shù)量,可以將分支程序分為三類(lèi):?jiǎn)畏种?、一般多分支和散轉(zhuǎn)多分支。
目前,結(jié)構(gòu)化是程序設(shè)計(jì)的基本要求,可以使程序結(jié)構(gòu)清晰、易于讀寫(xiě)且方便調(diào)試,也能夠提高程序設(shè)計(jì)的效率。在結(jié)構(gòu)化程序設(shè)計(jì)中,程序的基本結(jié)構(gòu)有三種,即順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)。而子程序(也被稱為函數(shù)或過(guò)程)是一種提高程序模塊化程度和重復(fù)利用率的程序設(shè)計(jì)技巧,有時(shí)也被當(dāng)作一種基本的程序結(jié)構(gòu)。
AT89C2051單片機(jī)內(nèi)部有2KB的閃速存儲(chǔ)器陣列,一片新的AT89C2051,其存儲(chǔ)陣列處于擦除狀態(tài)(FFH),此時(shí)可對(duì)其編程,存儲(chǔ)陣列一次編程1字節(jié),若編程任何非空字節(jié)時(shí),需對(duì)整個(gè)存儲(chǔ)陣列進(jìn)行片擦除。
AT89C系列與MCS 51系列單片機(jī)相比有兩大優(yōu)勢(shì):第一,片內(nèi)程序存儲(chǔ)器采用閃速存儲(chǔ)器,使程序的寫(xiě)入更加方便;第二,提供了更小尺寸的芯片(AT89C2051/1051),使整個(gè)硬件電路的體積更小。
前面列舉的各項(xiàng)措施只解決了如何發(fā)現(xiàn)系統(tǒng)受到干擾和如何捕捉“跑飛”的程序,但僅此還不夠,還要能夠讓單片機(jī)根據(jù)被破壞的殘留信息自動(dòng)恢復(fù)到正常的工作狀態(tài)。硬件復(fù)位是使單片機(jī)重新恢復(fù)正常工作狀態(tài)的一個(gè)簡(jiǎn)單有效的方法。硬件復(fù)位后CPU被重新初始化,所有被激活的中斷標(biāo)志都被清除,程序從0000H地址重新開(kāi)始執(zhí)行。
前面幾項(xiàng)抗干擾措施都是針對(duì)I/O通道而言的。若干擾信號(hào)還未作用到CPU本身,則CPU還能正確地執(zhí)行各種抗干擾程序;若干擾信號(hào)已經(jīng)通過(guò)某種途徑作用到CPU上,則CPU就不能按正常狀態(tài)執(zhí)行程序,從而引起混亂,這就是通常所說(shuō)的程序“跑飛”。程序“跑飛”后使其恢復(fù)正常最簡(jiǎn)單的方法是讓CPU復(fù)位,讓程序從頭開(kāi)始重新運(yùn)行。這種方法雖然簡(jiǎn)單,但需要人的參與,而且復(fù)位不及時(shí)。人工復(fù)位一般是在整個(gè)系統(tǒng)已經(jīng)癱瘓,無(wú)計(jì)可施的情況下才不得已而為之的。因此在進(jìn)行軟件設(shè)計(jì)時(shí)就要考慮到萬(wàn)一程序“跑
由于數(shù)字量輸入過(guò)程中干擾的作用時(shí)間較短,因此在采集數(shù)字信號(hào)時(shí),可多次重復(fù)采集,直到若干次采樣結(jié)果一致時(shí),才認(rèn)為其有效。例如通過(guò)A/D轉(zhuǎn)換器測(cè)量各種模擬量時(shí),如果有干擾作用于模擬信號(hào)上,就會(huì)使A/D轉(zhuǎn)換結(jié)果偏離真實(shí)值。這時(shí)如果只采樣一次A/D轉(zhuǎn)換結(jié)果,就無(wú)法知道其是否真實(shí)可靠,而必須進(jìn)行多次采樣,得到一個(gè)A/D轉(zhuǎn)換結(jié)果的數(shù)據(jù)系列,對(duì)這些數(shù)據(jù)系列進(jìn)行各種數(shù)字濾波處理,最后才能得到一個(gè)可信度較高的結(jié)果值。
8XC51系列單片機(jī)是Intel公司生產(chǎn)的8位增強(qiáng)型單片機(jī),它是以80C51為核心的一種8位微控制器,也是一種面向事件控制應(yīng)用的優(yōu)選芯片,它與現(xiàn)有MCS 51系列單片機(jī)的指令系統(tǒng)兼容,下面以8XC51GB為代表對(duì)8XC51系列單片機(jī)作一簡(jiǎn)要闡述。
開(kāi)關(guān)量輸入/輸出通道和模擬量輸入/輸出通道,都是干擾竄入的渠道,要切斷這些渠道,就要去掉外部與輸入/輸出通道之間的公共地線,實(shí)現(xiàn)彼此電氣隔離以抑制干擾脈沖。最常用的隔離器是光電耦合器,其內(nèi)部結(jié)構(gòu) 圖 9.5(a), 圖 9.5(b) 為接入光電耦合器的數(shù)字電路。
從事單片機(jī)應(yīng)用的開(kāi)發(fā)人員都有過(guò)這樣的經(jīng)歷:將調(diào)試好的樣機(jī)投入現(xiàn)場(chǎng)進(jìn)行實(shí)際運(yùn)行時(shí),總會(huì)出現(xiàn)這樣或那樣的問(wèn)題。有的一開(kāi)機(jī)就失靈,有的時(shí)好時(shí)壞,讓人不知所措。為什么實(shí)驗(yàn)室能正常工作,到了現(xiàn)場(chǎng)就有問(wèn)題呢? 主要原因是系統(tǒng)沒(méi)有采取抗干擾措施,或措施不力。為此,本文專(zhuān)門(mén)介紹單片機(jī)應(yīng)用系統(tǒng)的抗干擾技術(shù),以增強(qiáng)產(chǎn)品在實(shí)際環(huán)境中的生存能力。
在完成應(yīng)用系統(tǒng)的硬件組裝和軟件設(shè)計(jì)以后,便進(jìn)入系統(tǒng)調(diào)試階段。這個(gè)階段的任務(wù)是排除樣機(jī)中的硬件故 障和糾正軟件中的設(shè)計(jì)錯(cuò)誤,并解 決硬件和軟件之間的不協(xié)調(diào)問(wèn)題 。下面介紹幾種調(diào)試方法。
單片機(jī)以其體積小、重量輕、價(jià)格低及功能強(qiáng)等特點(diǎn)得到了廣泛的應(yīng)用,但單片機(jī)上一般僅集成 CPU 、RAM 和 I/O 接口,而無(wú)用戶接口 (鍵盤(pán)和顯示器) 及監(jiān)控程序,因而單片機(jī)自身無(wú)編程功能,必須依賴單片機(jī)開(kāi)發(fā)工具(又稱單片機(jī)仿真器)。單片機(jī)開(kāi)發(fā)工具有輸入程序、編輯程序和調(diào)試程序的功能,目前國(guó)內(nèi)使用較多的有 WAVE 、KeilC、MedWin 等,在此就 WAVE 仿真器作一簡(jiǎn)介。
共模干擾指的是干擾電壓在信號(hào)線及其回線(一般稱為信號(hào)地線)上的幅度相同,這里的電壓以附近任何一個(gè)物體(大地、金屬機(jī)箱、參考地線板等)為參考電位,干擾電流回路則是在導(dǎo)線與參考物體構(gòu)成的回路中流動(dòng)。
單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)主要包括五部分內(nèi)容:方案論證,硬件系統(tǒng)的設(shè)計(jì),系統(tǒng)軟件的設(shè)計(jì),系統(tǒng)仿真調(diào)試和脫機(jī)運(yùn)行。各部分詳細(xì)內(nèi)容如圖 8.1 所示。