版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第10章章 系系 統(tǒng)統(tǒng) 實(shí)實(shí) 用用 程程 序序本章將介紹主程序、子程序的概念本章將介紹主程序、子程序的概念以及應(yīng)用系統(tǒng)的一些實(shí)用程序。以及應(yīng)用系統(tǒng)的一些實(shí)用程序。10.1 主程序和子程序主程序和子程序10.2 數(shù)據(jù)采集及簡單控制程序數(shù)據(jù)采集及簡單控制程序10.3 數(shù)據(jù)處理程序數(shù)據(jù)處理程序10.4 代碼轉(zhuǎn)換程序代碼轉(zhuǎn)換程序10.5 軟件抗干擾軟件抗干擾10.6 最短程序最短程序10.1.1 主程序主程序 主程序是單片機(jī)系統(tǒng)控制程主程序是單片機(jī)系統(tǒng)控制程序的主框架。序的主框架。 是一個(gè)順序執(zhí)行的無限循環(huán)是一個(gè)順序執(zhí)行的無限循環(huán)的程序的程序 運(yùn)行過程必須構(gòu)成一運(yùn)行過程必須構(gòu)成一個(gè)圈。個(gè)圈。10.1
2、 主程序和子程序主程序和子程序10.1.2 子程序及參數(shù)傳遞子程序及參數(shù)傳遞 在程序設(shè)計(jì)中,有時(shí)需反復(fù)執(zhí)在程序設(shè)計(jì)中,有時(shí)需反復(fù)執(zhí)行某段程序。通常行某段程序。通常把具有一定功把具有一定功能的公用程序段作為子程序能的公用程序段作為子程序。 在主程序需要執(zhí)行這種操作的地在主程序需要執(zhí)行這種操作的地方執(zhí)行一條調(diào)用指令,轉(zhuǎn)到子程方執(zhí)行一條調(diào)用指令,轉(zhuǎn)到子程序去執(zhí)行;序去執(zhí)行; 完成規(guī)定操作以后,再返回到完成規(guī)定操作以后,再返回到原來的程序原來的程序(主程序主程序)繼續(xù)執(zhí)行。繼續(xù)執(zhí)行。子程序調(diào)用中的參數(shù)傳遞問題子程序調(diào)用中的參數(shù)傳遞問題 常用工作寄存器、累加器、地址指針寄存器或堆棧來傳遞參數(shù)。常用工作寄
3、存器、累加器、地址指針寄存器或堆棧來傳遞參數(shù)。v用工作寄存器用工作寄存器 Rn 或累加器或累加器 A 來傳遞參數(shù)來傳遞參數(shù)【例例10-1】用程序?qū)崿F(xiàn)用程序?qū)崿F(xiàn) c=a+b。 設(shè):設(shè):a、b和和c分別存于內(nèi)部分別存于內(nèi)部RAM的的DA、DB和和DC 3個(gè)單元中。個(gè)單元中。 通過兩次調(diào)用子程序查平方表,結(jié)果在主程序中相加得到。通過兩次調(diào)用子程序查平方表,結(jié)果在主程序中相加得到。 其入口條件是:其入口條件是:(A)=待查表的數(shù);出口條件是待查表的數(shù);出口條件是(A)=平方平方值。值。 主程序片段:主程序片段:STAR:MOV A,DA ;取第一操作數(shù);取第一操作數(shù) ACALL SQR ;調(diào)用查表程序
4、;調(diào)用查表程序 MOV R1,A ;a暫存暫存R1中中 MOV A,DB ;取;取b ACALL SQR ;第;第2次調(diào)用查表程序次調(diào)用查表程序 ADD A,R1 ;a MOV DC,A ;結(jié)果存于;結(jié)果存于DC中中 SJMP ;等待;等待子程序片段:子程序片段:SQR:INC A ;偏移量調(diào)整;偏移量調(diào)整(RET一字節(jié)一字節(jié)) MOVC A,A+PC ;查平方表;查平方表 RETTAB:DB 0,1,4,9,16 DB 25,36,49,64,81 END2. 用指針寄存器來傳遞參數(shù)用指針寄存器來傳遞參數(shù) 如果參數(shù)在片內(nèi)如果參數(shù)在片內(nèi)RAM中,則可用中,則可用 R0 或或 R1 作指針;作指
5、針; 如參數(shù)在片外如參數(shù)在片外RAM或程序存儲(chǔ)器中,則可用或程序存儲(chǔ)器中,則可用 DPTR 作指針。作指針。【例【例10-2】 將將R0和和R1指出的內(nèi)部指出的內(nèi)部RAM中兩個(gè)中兩個(gè)3字節(jié)無符號(hào)整數(shù)相加,字節(jié)無符號(hào)整數(shù)相加,結(jié)果送到由結(jié)果送到由R0指出的內(nèi)部指出的內(nèi)部RAM中。中。 入口時(shí),入口時(shí),R0和和R1分別指向加數(shù)和被加數(shù)的低位字節(jié);分別指向加數(shù)和被加數(shù)的低位字節(jié); 出口時(shí),出口時(shí),R0指向結(jié)果的高位字節(jié)。低字節(jié)在低地址。指向結(jié)果的高位字節(jié)。低字節(jié)在低地址。 NADD: MOV R7,#3 ;3字節(jié)加法字節(jié)加法 CLR C NADD1:MOV A,R0 ;取加數(shù)低字節(jié);取加數(shù)低字節(jié) A
6、DDC A,R1 ;取被加數(shù)低字節(jié)并加到;取被加數(shù)低字節(jié)并加到A MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET 10.1.3 中斷服務(wù)子程序中斷服務(wù)子程序 主程序調(diào)用子程序與主程序被中斷而去執(zhí)行中斷服主程序調(diào)用子程序與主程序被中斷而去執(zhí)行中斷服務(wù)子程序的過程是務(wù)子程序的過程是不同不同的:的: 調(diào)用子程序是當(dāng)主程序運(yùn)行到調(diào)用子程序是當(dāng)主程序運(yùn)行到 “LCALL DIS” 指令時(shí),指令時(shí),先自動(dòng)壓入斷點(diǎn)先自動(dòng)壓入斷點(diǎn)2003H,再進(jìn)入中斷服務(wù)子程序;,再進(jìn)入中斷服務(wù)子程序; 程序中斷是隨機(jī)的。當(dāng)主程序運(yùn)行時(shí),遇到中斷申請(qǐng),程序中斷是隨機(jī)的。當(dāng)主程序
7、運(yùn)行時(shí),遇到中斷申請(qǐng),則則CPU執(zhí)行完當(dāng)前指令后,首先自動(dòng)壓入斷點(diǎn)執(zhí)行完當(dāng)前指令后,首先自動(dòng)壓入斷點(diǎn)1002H,然后轉(zhuǎn)去執(zhí)行中斷服務(wù)子程序。然后轉(zhuǎn)去執(zhí)行中斷服務(wù)子程序。上述兩個(gè)過程的上述兩個(gè)過程的共同點(diǎn)共同點(diǎn)都是自動(dòng)壓入斷點(diǎn)。都是自動(dòng)壓入斷點(diǎn)。 當(dāng)執(zhí)行子程序到最后一條指令當(dāng)執(zhí)行子程序到最后一條指令RET時(shí),自動(dòng)彈出斷點(diǎn)時(shí),自動(dòng)彈出斷點(diǎn)2003H送送PC,返回主程序;,返回主程序; 當(dāng)中斷服務(wù)程序執(zhí)行到最后一條指令當(dāng)中斷服務(wù)程序執(zhí)行到最后一條指令RETI 時(shí),同樣彈時(shí),同樣彈出斷點(diǎn)出斷點(diǎn)1002H送送PC,返回主程序。,返回主程序。 除此之外,兩種子程序都需要保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。除此之外,兩種子
8、程序都需要保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。10.2 數(shù)據(jù)采集及簡單控制程序數(shù)據(jù)采集及簡單控制程序10.2.1 3 位數(shù)據(jù)采集程序位數(shù)據(jù)采集程序 雙積分型雙積分型 3 3 位位A AD MC14433D MC14433芯片功能:芯片功能: 輸出數(shù)值范圍:輸出數(shù)值范圍: 01999(三位半(三位半BCD碼)碼) 分辨率分辨率 : 約為約為11位(二進(jìn)制)位(二進(jìn)制) 電壓輸入范圍:電壓輸入范圍: 199.0mv1.999V兩檔兩檔 相應(yīng)的基準(zhǔn)電壓:為相應(yīng)的基準(zhǔn)電壓:為200 mv2V 轉(zhuǎn)換速度:轉(zhuǎn)換速度:3次次10次秒次秒 自動(dòng)極性轉(zhuǎn)換;自動(dòng)極性轉(zhuǎn)換; 過量程欠量程標(biāo)志。過量程欠量程標(biāo)志。引腳功能引腳功能VR
9、EFVREF: 參考電壓輸入?yún)⒖茧妷狠斎隫XVX: 模擬信號(hào)電壓輸入模擬信號(hào)電壓輸入R1R1、R1R1C1C1、C1C1: 外接積分阻容元件外接積分阻容元件CO1CO1、CO2CO2: 外接補(bǔ)償電容外接補(bǔ)償電容0.1F0.1FDUDU: 輸出控制,正脈沖使轉(zhuǎn)換結(jié)果輸出控制,正脈沖使轉(zhuǎn)換結(jié)果A/DA/D結(jié)果寄存器結(jié)果寄存器EOCEOC: 轉(zhuǎn)換結(jié)束,轉(zhuǎn)換結(jié)束時(shí)發(fā)正脈沖(一般與轉(zhuǎn)換結(jié)束,轉(zhuǎn)換結(jié)束時(shí)發(fā)正脈沖(一般與DUDU相連)相連)CLK1CLK1、CLKOCLKO: 外接時(shí)鐘信號(hào)輸入輸出外接時(shí)鐘信號(hào)輸入輸出OROR: 過量程標(biāo)志,過量程標(biāo)志,VX VX VREFVREF時(shí),時(shí),OROR0 0DS4
10、DS4DS1DS1: 個(gè)、十、百、千位輸出選通正脈沖個(gè)、十、百、千位輸出選通正脈沖Q3Q3Q0Q0: BCDBCD碼碼A AD D轉(zhuǎn)換結(jié)果輸出轉(zhuǎn)換結(jié)果輸出VAGVAG: 模擬地模擬地VEEVEE: 模擬負(fù)電源模擬負(fù)電源VDDVDD: 正電源正電源VSSVSS: 數(shù)字地?cái)?shù)字地* *對(duì)于對(duì)于5V5V數(shù)字系統(tǒng),數(shù)字系統(tǒng),VDDVDD、VEEVEE為為5V5V輸出時(shí)序:輸出時(shí)序:EOCEOC:轉(zhuǎn)換結(jié)束脈沖:轉(zhuǎn)換結(jié)束脈沖DS1DS1:千位輸出標(biāo)志:千位輸出標(biāo)志Q3Q3:千位值:千位值0-10-1,1-01-0Q2Q2:極性,:極性,0 0負(fù)、負(fù)、 1 1正正Q0Q0:量程:量程 0 -0 -正常正常 1
11、 -1 -Q3=1Q3=1欠量程欠量程 Q3=0Q3=0過量程過量程DS2DS2:百位輸出標(biāo)志:百位輸出標(biāo)志DS1DS1:十位輸出標(biāo)志:十位輸出標(biāo)志DS1DS1:個(gè)位輸出標(biāo)志:個(gè)位輸出標(biāo)志 MC14433MC14433與與80318031接口(非總線型)接口(非總線型)Q0Q0Q3Q3: 接接P1.0P1.0P1.3P1.3DS1DS1DS4DS4: 接接P1.4P1.4P1.7P1.7EOCEOC與與DUDU相連,反相后接相連,反相后接INT1INT1VREFVREF:由基準(zhǔn)電壓源:由基準(zhǔn)電壓源5G14035G1403(2.5V2.5V)分壓產(chǎn)生)分壓產(chǎn)生2V2V基準(zhǔn)電壓?;鶞?zhǔn)電壓。數(shù)據(jù)采集
12、程序是以中斷方式數(shù)據(jù)采集程序是以中斷方式進(jìn)行的,中斷服務(wù)子程序進(jìn)行的,中斷服務(wù)子程序 ,名名為為INTL1。由圖中硬件由圖中硬件 可知可知: : MC14433 MC14433采用連續(xù)轉(zhuǎn)換方式采用連續(xù)轉(zhuǎn)換方式, ,每每次轉(zhuǎn)換結(jié)束,在次轉(zhuǎn)換結(jié)束,在EOCEOC端輸出一正脈端輸出一正脈沖,經(jīng)反相器接沖,經(jīng)反相器接89C5189C51的的 INT0 INT0 端端, ,申請(qǐng)中斷申請(qǐng)中斷 89C51 89C51 響應(yīng)中斷響應(yīng)中斷, ,進(jìn)入進(jìn)入INTL1INTL1執(zhí)行采集任務(wù)。執(zhí)行采集任務(wù)。 將采集的千、百、十、個(gè)位數(shù)將采集的千、百、十、個(gè)位數(shù)據(jù)分別存放在據(jù)分別存放在RAMRAM中的中的21H21H24
13、H24H單單元。元。數(shù)據(jù)采集數(shù)據(jù)采集(中斷服務(wù)中斷服務(wù))程序清單如下:程序清單如下: INTL1:MOV A,P1 ;輸入一次,;輸入一次,(P1)A JNB ACC.4,INTL1 ;DS1=1?即千位選通即千位選通 JB ACC.0,ERR ;Q0=1(過量程過量程),出錯(cuò),出錯(cuò) JB ACC.3,L2 ;Q3=1,轉(zhuǎn)千位為,轉(zhuǎn)千位為0 MOV 21H,#01H ;Q3=0,千位為,千位為1,存,存21H單元單元 AJMP L3 L2: MOV 21H,#00H ;千位為;千位為0,存,存21H單元單元 L3: MOV A,P1 ;輸入一次;輸入一次 JNB ACC.5,L3 ;DS2=1
14、? MOV R0,#22H XCHD A,R0 ;Q3Q022H單元單元 L4: MOV A,P1 ;輸入一次;輸入一次 JNB ACC.6,L4 ;DS3=1? INC R0 ;指向;指向23H單元單元 XCHD A, R0 ;十位存;十位存23H單元低單元低4位位 L5: MOV A, P1 ;輸入一次;輸入一次 JNB ACC.7,L5 ;DS4=1? INC R0 ;指向;指向24H單元單元 XCHD A,R0 ;個(gè)位存;個(gè)位存24H單元低單元低4位位 AJMP L6 ERR:MOV 20H,#0FH ;0FH20H單元,最高位單元,最高位LED顯示出錯(cuò)信息顯示出錯(cuò)信息“F” L6:R
15、ETI10.2.2 航標(biāo)燈控制程序航標(biāo)燈控制程序【例【例10-3】用】用89C2051單片機(jī)試制一個(gè)單片機(jī)試制一個(gè)“航標(biāo)燈航標(biāo)燈”。 fOSC12 MHZ要求:要求: 黑夜定時(shí)周期循環(huán)發(fā)光黑夜定時(shí)周期循環(huán)發(fā)光,定時(shí)間隔為定時(shí)間隔為2 s,即亮即亮2 s,滅滅2 s。 當(dāng)白天到來時(shí),航標(biāo)燈應(yīng)熄滅,停止定時(shí)器工作。當(dāng)白天到來時(shí),航標(biāo)燈應(yīng)熄滅,停止定時(shí)器工作。采用定時(shí)加計(jì)數(shù)的方法定時(shí)采用定時(shí)加計(jì)數(shù)的方法定時(shí)2 s2 s。 如圖如圖10.610.6所示的光敏三極管來區(qū)分白天所示的光敏三極管來區(qū)分白天與黑夜。與黑夜。 黑夜時(shí)黑夜時(shí), ,無光照,無光照,T1T1和和T2T2均截止,使均截止,使INT0IN
16、T00 0,發(fā)出中斷請(qǐng)求。,發(fā)出中斷請(qǐng)求。CPUCPU進(jìn)入外部中斷處進(jìn)入外部中斷處理程序理程序, ,啟動(dòng)定時(shí)器工作,利用定時(shí)器中斷啟動(dòng)定時(shí)器工作,利用定時(shí)器中斷控制燈定時(shí)閃閃發(fā)光。用軟件查詢控制燈定時(shí)閃閃發(fā)光。用軟件查詢INT0INT0引引腳,只要腳,只要INT0INT00,0,定時(shí)器便繼續(xù)工作。定時(shí)器便繼續(xù)工作。 白天時(shí)白天時(shí), ,日光使日光使T1T1導(dǎo)通導(dǎo)通,T2,T2輸出低電輸出低電平平,INT0,INT01,1,立即關(guān)閉定時(shí)器,結(jié)束外部中立即關(guān)閉定時(shí)器,結(jié)束外部中斷處理并返回到主程序。斷處理并返回到主程序。設(shè)設(shè): T0定時(shí)和定時(shí)和R7軟件計(jì)數(shù)可以延時(shí)軟件計(jì)數(shù)可以延時(shí)2s。R7軟件計(jì)數(shù)為
17、軟件計(jì)數(shù)為40次;次;T0定時(shí)定時(shí)50ms,模式模式1,計(jì)數(shù)初值為計(jì)數(shù)初值為:212501000123CB0H主程序:主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP WBINT ;外部中斷;外部中斷0入口地址入口地址 ORG 000BH AJMP T0INT ;T0中斷入口地址中斷入口地址 ORG 0100H MAIN: MOV SP,#30H ;設(shè)置堆棧指針;設(shè)置堆棧指針 CLR P1.7 ;設(shè)燈的初態(tài)為;設(shè)燈的初態(tài)為“滅滅” CLR IT0 ;外部中斷;外部中斷0為電平觸發(fā)方式為電平觸發(fā)方式 CLR PX0 ;外部中斷;外部中斷0為低優(yōu)先級(jí)為低優(yōu)先級(jí) SET
18、B EX0 ;允許外部中斷;允許外部中斷0中斷中斷 SETB EA ;CPU允許中斷允許中斷 HERE: AJMP HERE ;等待外部中斷請(qǐng)求;等待外部中斷請(qǐng)求外部中斷外部中斷0中斷服務(wù)程序中斷服務(wù)程序(由由0003H轉(zhuǎn)來轉(zhuǎn)來): WBINT:MOV TMOD,#01H ;T0定時(shí),模式定時(shí),模式1 MOV TL0,#0B0H ;T0計(jì)數(shù)初值計(jì)數(shù)初值 MOV TH0,#3CH SETB PT0 ;設(shè);設(shè)T0為高優(yōu)先級(jí)中斷為高優(yōu)先級(jí)中斷 SETB TR0 ;啟動(dòng);啟動(dòng)T0 SETB ET0 ;T0開中斷開中斷 MOV R7, #40 ;軟件計(jì)數(shù)值;軟件計(jì)數(shù)值 HERE1:JNB P3.2,HE
19、RE1 ;查詢;查詢INT0,為低為低(黑夜黑夜),等待等待T0中斷中斷 CLR ET0 ;為高;為高(白天白天),禁止,禁止T0中斷中斷 CLR TR0 ;關(guān);關(guān)T0 CLR P1.7 ;熄燈;熄燈 RETI ;返回主程序;返回主程序定時(shí)器定時(shí)器0中斷服務(wù)程序中斷服務(wù)程序(由由000BH轉(zhuǎn)來轉(zhuǎn)來): T0INT:MOV TL0,#0B0H ;重賦;重賦T0初值初值 MOV TH0,#3CH DJNZ R7,EXIT ;軟件計(jì)數(shù)為;軟件計(jì)數(shù)為0嗎嗎? MOV R7, #40H ;計(jì)數(shù)已到,重賦初值;計(jì)數(shù)已到,重賦初值 CPL P1.7 ;輸出取反控制燈;輸出取反控制燈“亮亮”或或“滅滅” EX
20、IT:RETI ;中斷返回;中斷返回 END10.2.3 水位控制程序水位控制程序 水位控制原理水位控制原理u 圖圖10-7中虛線表示允許水位變化的上、下限。水中虛線表示允許水位變化的上、下限。水塔安裝固定的塔安裝固定的3根金屬棒。其中,根金屬棒。其中,A棒處于下限水棒處于下限水位,位,A棒接棒接+5V電源,電源,C棒處于上限水位,棒處于上限水位,B棒在上、棒在上、下限水位之間。下限水位之間。B棒、棒、C棒各通過一個(gè)電阻與地相棒各通過一個(gè)電阻與地相連。連。u 單片機(jī)控制電機(jī)轉(zhuǎn)動(dòng)單片機(jī)控制電機(jī)轉(zhuǎn)動(dòng),電機(jī)帶動(dòng)水泵供水供水時(shí)電機(jī)帶動(dòng)水泵供水供水時(shí),水水位上升位上升,當(dāng)當(dāng)達(dá)到上限時(shí)達(dá)到上限時(shí),由于水導(dǎo)
21、電,由于水導(dǎo)電,B、C棒連通棒連通+5V。b和和c兩端均為兩端均為”1”.這時(shí),應(yīng)停止電機(jī)工作,這時(shí),應(yīng)停止電機(jī)工作,不再供水。不再供水。l 當(dāng)水位當(dāng)水位降到下限時(shí)降到下限時(shí),B、C棒都不能與棒導(dǎo)通,棒都不能與棒導(dǎo)通,b和和c兩端均為兩端均為”0”。啟動(dòng)電機(jī)供水啟動(dòng)電機(jī)供水.l 當(dāng)水位處于當(dāng)水位處于上下限之間上下限之間,棒與棒與A棒導(dǎo)通棒導(dǎo)通.棒不棒不能與棒導(dǎo)通,能與棒導(dǎo)通,b端為端為”1”,c端為端為“0”狀態(tài)。應(yīng)狀態(tài)。應(yīng)繼續(xù)維持原有的工作狀態(tài)。繼續(xù)維持原有的工作狀態(tài)。2. 水位控制電路水位控制電路圖圖10-8 水塔水位控制電路水塔水位控制電路3. 信號(hào)輸入與輸出信號(hào)輸入與輸出 水位信號(hào)由水
22、位信號(hào)由P1.0和和P1.1輸入輸入 由由P1.2端輸出,去控制電機(jī)。端輸出,去控制電機(jī)。 由由P1.3輸出報(bào)警信號(hào),驅(qū)動(dòng)一輸出報(bào)警信號(hào),驅(qū)動(dòng)一 只發(fā)光二極管進(jìn)行光報(bào)警。只發(fā)光二極管進(jìn)行光報(bào)警。4. 控制程序控制程序主程序清單:主程序清單: ORG 0030HLOOP: ORL R1,#03H ;為檢查水位狀態(tài)作準(zhǔn)備;為檢查水位狀態(tài)作準(zhǔn)備 MOV A,P1 JNB ACC.0,ONE ;P1.0=0則轉(zhuǎn)則轉(zhuǎn) JB ACC.1, TWO ;P1.1=1則轉(zhuǎn)則轉(zhuǎn)BACK: ACALL D10S ;延時(shí);延時(shí)10 s AJMP LOOPONE: JNB ACC.1,THREE ;P1.1=0則轉(zhuǎn)則轉(zhuǎn)
23、 CLR 93H ;0P1.3,啟動(dòng)報(bào)警裝置,啟動(dòng)報(bào)警裝置 SETB 92H ;1P1.2,停止電機(jī)工作,停止電機(jī)工作FOUR: SJMP FOURTHREE:CLR 92H ;啟動(dòng)電機(jī);啟動(dòng)電機(jī) AJMP BACKTWO: SETB 92H ;停止電機(jī)工作;停止電機(jī)工作 AJMP BACK延時(shí)子程序延時(shí)子程序D10 S(延時(shí)延時(shí)10 s): ORG 0100H D10S: MOV R3, #19H LOOP3:MOV R1, #85H LOOP1:MOV R2, #0FAH LOOP2:DJNZ R2,LOOP2 DJNZ R1,LOOP1 DJNZ R3,LOOP3 RET 10.2.4
24、蜂鳴音報(bào)警子程序蜂鳴音報(bào)警子程序 壓電式蜂鳴器約需壓電式蜂鳴器約需10 mA的驅(qū)動(dòng)電流的驅(qū)動(dòng)電流 當(dāng)當(dāng)P1.0輸出高電平輸出高電平1時(shí),壓電蜂鳴器兩端時(shí),壓電蜂鳴器兩端獲得約獲得約+5V電壓而鳴叫;電壓而鳴叫; 當(dāng)當(dāng)P1.0輸出低電平輸出低電平0時(shí),壓電蜂鳴器兩引時(shí),壓電蜂鳴器兩引線間的直流電壓降至線間的直流電壓降至接近于接近于0 V,蜂鳴器停,蜂鳴器停止發(fā)聲。止發(fā)聲。連續(xù)鳴音連續(xù)鳴音30 ms的控制子程序清單:的控制子程序清單:SND:SETB P1.0 ;P1.0高,蜂鳴器鳴叫高,蜂鳴器鳴叫 MOV R7,#1EH ;延時(shí);延時(shí)30 msDL:MOV R6, #0F9H DL1:DJNZ
25、R6,DL1 ;小循環(huán)延時(shí);小循環(huán)延時(shí)1 ms DJNZ R7,DL CLR P1.0 ;P1.0低,停止蜂鳴器低,停止蜂鳴器 RET10.3 數(shù)據(jù)處理程序數(shù)據(jù)處理程序 10.3.1 排序程序排序程序【例【例10-4】 將片內(nèi)將片內(nèi)RAM 50H59H中的數(shù)據(jù)按從小到大的順序排序中的數(shù)據(jù)按從小到大的順序排序 解解: 這是一個(gè)排序問題。這是一個(gè)排序問題。l 按從小到大排列稱升序排列,反之稱降序排列。按從小到大排列稱升序排列,反之稱降序排列。l 根據(jù)題意,排序程序在執(zhí)行時(shí),取前數(shù)與后數(shù)比較:根據(jù)題意,排序程序在執(zhí)行時(shí),取前數(shù)與后數(shù)比較: p 如果前數(shù)小于后數(shù),則繼續(xù)順序比較下去;如果前數(shù)小于后數(shù),
26、則繼續(xù)順序比較下去;p 如果前數(shù)大于后數(shù),則前數(shù)和后數(shù)交換后再繼續(xù)比較下去。如果前數(shù)大于后數(shù),則前數(shù)和后數(shù)交換后再繼續(xù)比較下去。p 第一次循環(huán)將在最后單元中得到最大的數(shù)第一次循環(huán)將在最后單元中得到最大的數(shù)(冒泡法冒泡法)。l 得到所有數(shù)據(jù)的升序排列需要經(jīng)過多重循環(huán)。得到所有數(shù)據(jù)的升序排列需要經(jīng)過多重循環(huán)。程序清單如下:程序清單如下: CLR 00H ;清除交換標(biāo)志位;清除交換標(biāo)志位 QUE:MOV R3,#9H ;10個(gè)數(shù)據(jù)循環(huán)次數(shù)個(gè)數(shù)據(jù)循環(huán)次數(shù) MOV R0,#50H ;數(shù)據(jù)存放區(qū)首址;數(shù)據(jù)存放區(qū)首址 MOV A,R0 ;取前數(shù);取前數(shù) L2:INC R0 MOV R2,A ;保存前數(shù);保存
27、前數(shù) SUBB A,R0 ;前數(shù)減后數(shù);前數(shù)減后數(shù) MOV A,R2 ;恢復(fù)前數(shù);恢復(fù)前數(shù) JC L1 ;順序則繼續(xù)比較;順序則繼續(xù)比較 SETB 00H ;逆序則建立標(biāo)志位;逆序則建立標(biāo)志位 XCH A,R0 ;前數(shù)與后數(shù)交換;前數(shù)與后數(shù)交換 DEC R0 XCH A,R0 INC R0 ;仍指向后數(shù)單元;仍指向后數(shù)單元 L1:MOV A, R0 DJNZ R3,L2 ;依次重復(fù)比較;依次重復(fù)比較 JB 00H,QUE ;交換后重新比較;交換后重新比較 RET10.3.2 數(shù)字濾波程序數(shù)字濾波程序u 前向通道中,必須消除被測(cè)信號(hào)中的噪音和干擾。前向通道中,必須消除被測(cè)信號(hào)中的噪音和干擾。u
28、噪音有兩大類:噪音有兩大類: l 一類為周期性的。典型為一類為周期性的。典型為50 Hz的工頻干擾。采用硬件濾波電的工頻干擾。采用硬件濾波電路能有效地消除其影響。路能有效地消除其影響。l 另一類為不規(guī)則隨機(jī)性的,可以用數(shù)字濾波方法予以削弱或?yàn)V另一類為不規(guī)則隨機(jī)性的,可以用數(shù)字濾波方法予以削弱或?yàn)V除。除。u 數(shù)字濾波,就是通過程序計(jì)算或判斷來減少干擾在有用信號(hào)中數(shù)字濾波,就是通過程序計(jì)算或判斷來減少干擾在有用信號(hào)中的比重,實(shí)際是一種程序?yàn)V波。的比重,實(shí)際是一種程序?yàn)V波。u 經(jīng)常采用的經(jīng)常采用的中值法、去極值法中值法、去極值法可對(duì)采樣信號(hào)進(jìn)行數(shù)字濾波,以可對(duì)采樣信號(hào)進(jìn)行數(shù)字濾波,以消除常態(tài)干擾。消
29、除常態(tài)干擾。u 中值濾波是對(duì)某一參數(shù)連續(xù)采樣中值濾波是對(duì)某一參數(shù)連續(xù)采樣n次次(n一般取奇數(shù)一般取奇數(shù)),然后把,然后把n次的采樣值從小到大或從大到小排列,再取中間值作為本次采樣值。次的采樣值從小到大或從大到小排列,再取中間值作為本次采樣值。u 該算法的采樣次數(shù)常為該算法的采樣次數(shù)常為3次或次或5次。對(duì)于變化很慢的參數(shù),有時(shí)次。對(duì)于變化很慢的參數(shù),有時(shí)也可增加次數(shù),例如也可增加次數(shù),例如15次??刹捎贸R?guī)的排序算法,如冒泡算法。次。可采用常規(guī)的排序算法,如冒泡算法。u中值濾波對(duì)于去掉由于偶然因素引起的波動(dòng)或采樣器不穩(wěn)定而造中值濾波對(duì)于去掉由于偶然因素引起的波動(dòng)或采樣器不穩(wěn)定而造成的脈動(dòng)干擾比較
30、有效。變量變化比較緩慢成的脈動(dòng)干擾比較有效。變量變化比較緩慢,效果比較好。對(duì)于變化效果比較好。對(duì)于變化較為劇烈的參數(shù),此法不宜。較為劇烈的參數(shù),此法不宜?,F(xiàn)以現(xiàn)以3次采樣為例。次采樣為例。 3次采樣值分別存放在次采樣值分別存放在R2、R3和和R4中,程序運(yùn)行之后,將中,程序運(yùn)行之后,將3個(gè)數(shù)個(gè)數(shù)據(jù)從小到大順序排列,仍然存放在據(jù)從小到大順序排列,仍然存放在R2、R3和和R4中,中值在中,中值在R3中。中。 程序清單:程序清單: FILT2: MOV A,R2 ;R2R3嗎嗎? CLR C SUBB A,R3 JC FILT21 MOV A,R2 ;R2R3時(shí),交換時(shí),交換R2和和R3 XCH A
31、,R3 MOV R2,A FILT21:MOV A,R3 ;R3R4嗎嗎? CLR C SUBB A,R4 JC FILT22 ;R3R4時(shí),排序結(jié)束時(shí),排序結(jié)束 MOV A,R4 ;R3R4時(shí),交換時(shí),交換R3和和R4 XCH A,R3 XCH A,R4 ;R3R2嗎嗎? CLR C SUBB A,R2 JNC FILT22 ;R3R2時(shí),排序結(jié)束時(shí),排序結(jié)束 MOV A,R2 ;R3R2時(shí),以時(shí),以R2為中值為中值 MOV R3,A ;中值在;中值在R3中中 FILT22:RET指導(dǎo)思想:指導(dǎo)思想: 連續(xù)采樣連續(xù)采樣n次后累加求和,同時(shí)找出其中的最大值與次后累加求和,同時(shí)找出其中的最大值與
32、最小值,再從累加和中減去最大值和最小值,按最小值,再從累加和中減去最大值和最小值,按n個(gè)采樣值個(gè)采樣值求平均,即可得到有效采樣值。求平均,即可得到有效采樣值。 為使平均濾波算法簡單,為使平均濾波算法簡單,n-2 應(yīng)為應(yīng)為2、4、6、8或或16,故,故 n 常取常取4、6、8、10或或18。具體作法有兩種:具體作法有兩種: 對(duì)于快變參數(shù),先連續(xù)采樣對(duì)于快變參數(shù),先連續(xù)采樣n次,然后再處理,但要在次,然后再處理,但要在RAM中中開辟出開辟出n個(gè)數(shù)據(jù)的暫存區(qū);個(gè)數(shù)據(jù)的暫存區(qū); 對(duì)于慢變參數(shù),可一邊采樣,一邊處理,而不必在對(duì)于慢變參數(shù),可一邊采樣,一邊處理,而不必在RAM中開辟中開辟數(shù)據(jù)暫存區(qū)。數(shù)據(jù)暫
33、存區(qū)。 下面以下面以n4為例,即連續(xù)進(jìn)行為例,即連續(xù)進(jìn)行4次數(shù)據(jù)采樣,去掉其中最大值和次數(shù)據(jù)采樣,去掉其中最大值和最小值,然后求剩下兩個(gè)數(shù)據(jù)的平均值。最小值,然后求剩下兩個(gè)數(shù)據(jù)的平均值。以以n4為例:為例: 連續(xù)進(jìn)行連續(xù)進(jìn)行4次數(shù)據(jù)次數(shù)據(jù)采樣,去掉其中最大采樣,去掉其中最大值和最小值,然后求值和最小值,然后求剩下兩個(gè)數(shù)據(jù)的平均剩下兩個(gè)數(shù)據(jù)的平均值。值。R2、R3存放最大值,存放最大值,R4、R5存放最小值,存放最小值,R6、R7存放累加和及存放累加和及 最后結(jié)果。最后結(jié)果。 連續(xù)采樣不只限連續(xù)采樣不只限4次,可以進(jìn)行任意次,次,可以進(jìn)行任意次,這時(shí),只須改變這時(shí),只須改變R0中中的數(shù)值。的數(shù)值
34、。程序清單:程序清單: CLR A MOV R2,A ;0最大值寄存器最大值寄存器R2R3 MOV R3,A MOV R6,A ;0累加和寄存器累加和寄存器R6R7 MOV R7,A MOV R4,#3FH ;3FFFH最小值寄存器最小值寄存器R4R5 MOV R5,#0FFH MOV R0,#4H DAV1:LCALL RDXP ;讀;讀B,A(調(diào)采樣子程序調(diào)采樣子程序) MOV R1,A ;采樣值低位暫存;采樣值低位暫存R1,高位在,高位在B ADD A,R7 MOV R7,A ;低位加到;低位加到R7 MOV A,B ADDC A,R6 MOV R6,A ;高位加到;高位加到R6,(R6
35、R7)+(BA)R6R7 CLR C MOV A,R3 SUBB A,R1 MOV A,R2 SUBB A,B JNC DAV2 ;輸入值;輸入值(R2R3)? MOV A,R1 MOV R3,A MOV R2,B ;輸入值;輸入值R2R3DAV2DAV2:CLR CCLR C MOV A MOV A,R1R1 SUBB A SUBB A,R5R5 MOV A MOV A,B B SUBB A SUBB A,R4R4 JNC DAV3 JNC DAV3 ;輸入值;輸入值(R4R5)?(R4R5)? MOV A MOV A,R1R1 MOV R5 MOV R5,A A ;輸入值;輸入值R4R5R
36、4R5 MOV R4 MOV R4,B BDAV3:DJNZ R0,DAV1 ;n-1=0? CLR C MOV A ,R7 SUBB A ,R3 XCH A ,R6 SUBB A ,R2 XCH A ,R7 SUBB A ,R5 XCH A ,R6 SUBB A,R4 ;n個(gè)采樣值的累加和減去最大值和最小值,個(gè)采樣值的累加和減去最大值和最小值,n=4 CLR C RRC A XCH A ,R6 RRC A MOVC R7,A ;剩下數(shù)據(jù)求平均值;剩下數(shù)據(jù)求平均值(除除2) RET10.3.3 標(biāo)度變換標(biāo)度變換(工程量變換工程量變換) 生產(chǎn)現(xiàn)場(chǎng)的各種參數(shù)都有不同的數(shù)值和量綱,例如,溫度單位生產(chǎn)
37、現(xiàn)場(chǎng)的各種參數(shù)都有不同的數(shù)值和量綱,例如,溫度單位用用,壓力用,壓力用Pa(帕帕),流量用,流量用ms。 這些參數(shù)經(jīng)轉(zhuǎn)換后,統(tǒng)一變?yōu)檫@些參數(shù)經(jīng)轉(zhuǎn)換后,統(tǒng)一變?yōu)?個(gè)數(shù)碼,例如,個(gè)數(shù)碼,例如,8位位轉(zhuǎn)換器輸出的數(shù)碼為轉(zhuǎn)換器輸出的數(shù)碼為0255。 這些數(shù)碼雖然代表參數(shù)值的大小,但是并不表示帶有量綱的參這些數(shù)碼雖然代表參數(shù)值的大小,但是并不表示帶有量綱的參數(shù)值,必須將其轉(zhuǎn)換成有量綱的數(shù)值,才能進(jìn)行顯示和打印。這種數(shù)值,必須將其轉(zhuǎn)換成有量綱的數(shù)值,才能進(jìn)行顯示和打印。這種轉(zhuǎn)換稱為轉(zhuǎn)換稱為標(biāo)度變換標(biāo)度變換或或工程量轉(zhuǎn)換。工程量轉(zhuǎn)換。前提條件是參數(shù)值與轉(zhuǎn)換結(jié)果前提條件是參數(shù)值與轉(zhuǎn)換結(jié)果(采樣值采樣值)之間應(yīng)
38、呈線性關(guān)系。之間應(yīng)呈線性關(guān)系。l 當(dāng)輸入信號(hào)為當(dāng)輸入信號(hào)為0(即參數(shù)值起點(diǎn)值即參數(shù)值起點(diǎn)值),輸出值不為,輸出值不為0時(shí),標(biāo)度變換公式為:時(shí),標(biāo)度變換公式為:式中:式中: 參數(shù)量程起點(diǎn)值,一次測(cè)量儀表的下限;參數(shù)量程起點(diǎn)值,一次測(cè)量儀表的下限; 參數(shù)量程終點(diǎn)值,一次測(cè)量儀表的上限;參數(shù)量程終點(diǎn)值,一次測(cè)量儀表的上限; 參數(shù)測(cè)量值,實(shí)際測(cè)量值參數(shù)測(cè)量值,實(shí)際測(cè)量值(工程量工程量); N量程起點(diǎn)對(duì)應(yīng)的量程起點(diǎn)對(duì)應(yīng)的A/D轉(zhuǎn)換后的值,儀表下限所對(duì)應(yīng)的數(shù)字量;轉(zhuǎn)換后的值,儀表下限所對(duì)應(yīng)的數(shù)字量; N量程終點(diǎn)對(duì)應(yīng)的值,儀表上限所對(duì)應(yīng)的數(shù)字量;量程終點(diǎn)對(duì)應(yīng)的值,儀表上限所對(duì)應(yīng)的數(shù)字量; N測(cè)量值對(duì)應(yīng)的測(cè)量
39、值對(duì)應(yīng)的A/D值值(采樣值采樣值),是經(jīng)數(shù)字濾波后確定的采樣值。,是經(jīng)數(shù)字濾波后確定的采樣值。 其中,、和對(duì)一個(gè)檢測(cè)系統(tǒng)來說是常數(shù)。其中,、和對(duì)一個(gè)檢測(cè)系統(tǒng)來說是常數(shù)。l 在參數(shù)量程起點(diǎn)在參數(shù)量程起點(diǎn)(輸入信號(hào)為輸入信號(hào)為0),值為,值為0(即即)。標(biāo)度變換:。標(biāo)度變換:l 很多測(cè)量系統(tǒng)中,參數(shù)量程起點(diǎn)值很多測(cè)量系統(tǒng)中,參數(shù)量程起點(diǎn)值(即儀表下限值即儀表下限值)00,對(duì)應(yīng)的,對(duì)應(yīng)的0。可進(jìn)一步簡化為:可進(jìn)一步簡化為:例如例如:某測(cè)量點(diǎn)的溫度量程為某測(cè)量點(diǎn)的溫度量程為200400, 采用采用8位位A/D 轉(zhuǎn)換器。轉(zhuǎn)換器。那么,那么,0200 , 400 , 00, 255, 采樣值為。其標(biāo)采樣值
40、為。其標(biāo)度變換公式為:度變換公式為: 200 200 只要把這一算式編成程序,只要把這一算式編成程序,將轉(zhuǎn)換后經(jīng)數(shù)字濾波將轉(zhuǎn)換后經(jīng)數(shù)字濾波處理后的值代入,即可處理后的值代入,即可計(jì)算出溫度的真實(shí)值。計(jì)算出溫度的真實(shí)值。如果傳感器輸出特性是非線性的,可采用如果傳感器輸出特性是非線性的,可采用查表法查表法進(jìn)行標(biāo)度變換。進(jìn)行標(biāo)度變換。例:用熱敏電阻組成的惠斯頓電橋測(cè)溫電路。例:用熱敏電阻組成的惠斯頓電橋測(cè)溫電路。 R1是熱敏電阻是熱敏電阻,當(dāng)溫度當(dāng)溫度T0時(shí)時(shí),R1取值取值R1(T0) 電橋達(dá)到平衡。平衡條件為:電橋達(dá)到平衡。平衡條件為:R1(T0)24此時(shí),電橋輸出電壓出此時(shí),電橋輸出電壓出 V。
41、 若溫度改變?nèi)魷囟雀淖?則則R1的阻值改變的阻值改變,電橋平衡遭到破壞電橋平衡遭到破壞,產(chǎn)生輸出電壓產(chǎn)生輸出電壓出。通過測(cè)量電壓出值就能推得出。通過測(cè)量電壓出值就能推得R1的阻值變化的阻值變化,測(cè)得環(huán)境溫度的變化。測(cè)得環(huán)境溫度的變化。l 進(jìn)行標(biāo)度變換時(shí),首先測(cè)量出溫度檢測(cè)回路的溫度電壓特性曲線,如圖進(jìn)行標(biāo)度變換時(shí),首先測(cè)量出溫度檢測(cè)回路的溫度電壓特性曲線,如圖10-16所示;所示;l 然后按照然后按照A/D轉(zhuǎn)換器的位數(shù)轉(zhuǎn)換器的位數(shù)(即分辨精確度即分辨精確度)及相應(yīng)的電壓值范圍,從溫度及相應(yīng)的電壓值范圍,從溫度電壓特性曲線中查出各輸出電壓所對(duì)應(yīng)的環(huán)境溫度值,將其列成一張表,固電壓特性曲線中查出各
42、輸出電壓所對(duì)應(yīng)的環(huán)境溫度值,將其列成一張表,固化在化在Flash ROM中;中;l 當(dāng)采集到數(shù)字量后,查表就能準(zhǔn)確地得出環(huán)境溫度值,據(jù)此再去進(jìn)行顯示當(dāng)采集到數(shù)字量后,查表就能準(zhǔn)確地得出環(huán)境溫度值,據(jù)此再去進(jìn)行顯示和控制。和控制。 表表10-2 溫度電壓特性表溫度電壓特性表 (P296)10.4 代碼轉(zhuǎn)換程序代碼轉(zhuǎn)換程序各種代碼之間的轉(zhuǎn)換常采用算法處理和查表方式。各種代碼之間的轉(zhuǎn)換常采用算法處理和查表方式?!纠纠?0-5】單字節(jié)二翻十子程序?!繂巫止?jié)二翻十子程序。 將將00HFFH 內(nèi)二進(jìn)制數(shù)轉(zhuǎn)換為內(nèi)二進(jìn)制數(shù)轉(zhuǎn)換為 BCD 數(shù)數(shù)(0256)。解:解: 入口:入口: (A)=二進(jìn)制數(shù)。二進(jìn)制數(shù)。
43、 出口出口:百、十和個(gè)位分別存入百、十和個(gè)位分別存入R0指出的兩個(gè)指出的兩個(gè)RAM單單元元程序清單:程序清單:BINBCD:MOV B,#100 DIV AB ;(A)=百位數(shù)百位數(shù) MOV R0 ,A ;百位;百位BCD存入存入RAM INC R0 MOV A,#10 XCH A,B DIV AB ;(A)=十位數(shù),十位數(shù),(B)=個(gè)位數(shù)個(gè)位數(shù) SWAP A ADD A,B ;(A)=壓縮壓縮BCD碼碼(十位個(gè)位十位個(gè)位) MOV R0 ,A ;存入;存入RAM RET【例【例10-6】單字節(jié)十翻二子程序。】單字節(jié)十翻二子程序。 將將2位位BCD數(shù)數(shù)(壓縮為壓縮為1字節(jié)字節(jié))轉(zhuǎn)換成二進(jìn)制數(shù)。
44、轉(zhuǎn)換成二進(jìn)制數(shù)。解:解: 將累加器將累加器A中的壓縮中的壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù),結(jié)果仍在碼轉(zhuǎn)換成二進(jìn)制數(shù),結(jié)果仍在A中。中。 方法是將方法是將A中的高位乘以中的高位乘以10,再加上,再加上A的低位字節(jié)。的低位字節(jié)。DTOB:MOV R2,A ;暫存;暫存 ANL A,#0F0H ;屏蔽低;屏蔽低4位位 SWAP A MOV B,#10 MUL AB ;高位乘以;高位乘以10 MOV R3,A ;暫存;暫存 MOV A,R2 ;取;取BCD數(shù)數(shù) ANL A,#0FH ;?。蝗CD數(shù)個(gè)位數(shù)個(gè)位 ADD A,R3 ;得轉(zhuǎn)換結(jié)果;得轉(zhuǎn)換結(jié)果 RET【例【例10-7】一位十六進(jìn)制數(shù)轉(zhuǎn)換成】一位十六
45、進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼碼。 解:解: 本程序中,由本程序中,由R0指出十六進(jìn)制數(shù)存放單元,指出十六進(jìn)制數(shù)存放單元, 經(jīng)轉(zhuǎn)換后結(jié)果仍存于原處。經(jīng)轉(zhuǎn)換后結(jié)果仍存于原處。HEXASC1:MOV A,R0 ;取十六進(jìn)制數(shù);取十六進(jìn)制數(shù) ANL A,#0FH ;屏蔽高;屏蔽高4位位 ADD A, #03H ;修正偏移量;修正偏移量 MOVC A, A+PC ;查表,??;查表,取ASCII代碼代碼 XCH A,R0 ;存儲(chǔ);存儲(chǔ) INC R0 ;更新地址;更新地址 RETASCTAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43
46、H,44H,45H,46H【例【例10-8】十六進(jìn)制數(shù)的】十六進(jìn)制數(shù)的ASCII代碼轉(zhuǎn)換成二進(jìn)制數(shù)代碼轉(zhuǎn)換成二進(jìn)制數(shù)。解:解: 對(duì)于小于或等于對(duì)于小于或等于9的數(shù)的的數(shù)的ASCII代碼,減去代碼,減去30H得得4位二進(jìn)制數(shù);位二進(jìn)制數(shù); 對(duì)于大于對(duì)于大于 9的十六進(jìn)制數(shù)的的十六進(jìn)制數(shù)的ASCII代碼,減去代碼,減去37H得得4位二進(jìn)制數(shù)。則正好位二進(jìn)制數(shù)。則正好是是0AH0FH的結(jié)果。的結(jié)果。 程序以程序以R2作為入口和出口。程序清單如下:作為入口和出口。程序清單如下:ASCHEX:MOV A,R2 ;取操作數(shù);取操作數(shù) CLR C SUBB A,#30H ;09的轉(zhuǎn)換的轉(zhuǎn)換 MOV R2,A
47、 ;暫存結(jié)果;暫存結(jié)果 SUBB A,#0AH ;結(jié)果是否;結(jié)果是否9? JC SBIO ;9則轉(zhuǎn)換正確,返回則轉(zhuǎn)換正確,返回 XCH A,R2 SUBB A,#37H ;9,則減,則減37HSBIO: MOV R2,A ;存放結(jié)果;存放結(jié)果 RET10.5 軟件抗干擾軟件抗干擾l 干擾可以沿各種線路侵入,也可以以場(chǎng)的形式干擾可以沿各種線路侵入,也可以以場(chǎng)的形式(高電壓、大電流、高電壓、大電流、電火花等電火花等)從空間侵入微機(jī)系統(tǒng);電網(wǎng)中各種浪涌電壓入侵,系統(tǒng)從空間侵入微機(jī)系統(tǒng);電網(wǎng)中各種浪涌電壓入侵,系統(tǒng)的接地裝置不良或不合理等,也是引入干擾的重要途徑。的接地裝置不良或不合理等,也是引入干擾
48、的重要途徑。l 干擾對(duì)微機(jī)系統(tǒng)的影響有干擾對(duì)微機(jī)系統(tǒng)的影響有3個(gè)部位:個(gè)部位: 前向通道、前向通道、CPU內(nèi)核及后向內(nèi)核及后向通道。對(duì)前向通道的干擾會(huì)使輸入的模擬信號(hào)失真,數(shù)字信號(hào)出錯(cuò)。通道。對(duì)前向通道的干擾會(huì)使輸入的模擬信號(hào)失真,數(shù)字信號(hào)出錯(cuò)。對(duì)這一部位的抗干擾,硬件方面可采用光電隔離、硬件濾波電路等對(duì)這一部位的抗干擾,硬件方面可采用光電隔離、硬件濾波電路等措施,在軟件方面可采用前面講的數(shù)字濾波方法。措施,在軟件方面可采用前面講的數(shù)字濾波方法。l 干擾可使微機(jī)系統(tǒng)內(nèi)核三總線上的數(shù)字信號(hào)錯(cuò)亂,從而引發(fā)一系干擾可使微機(jī)系統(tǒng)內(nèi)核三總線上的數(shù)字信號(hào)錯(cuò)亂,從而引發(fā)一系列無法預(yù)料的后果,形成一系列錯(cuò)誤。
49、列無法預(yù)料的后果,形成一系列錯(cuò)誤。CPU得到錯(cuò)誤的地址信號(hào)后,得到錯(cuò)誤的地址信號(hào)后,引起程序計(jì)數(shù)器出錯(cuò),使程序運(yùn)行離開正常軌道,導(dǎo)致程序失控、引起程序計(jì)數(shù)器出錯(cuò),使程序運(yùn)行離開正常軌道,導(dǎo)致程序失控、飛跑或死循環(huán),進(jìn)而使后向通道的輸出信號(hào)混亂,不能正常反映微飛跑或死循環(huán),進(jìn)而使后向通道的輸出信號(hào)混亂,不能正常反映微機(jī)系統(tǒng)的真實(shí)輸出,從而導(dǎo)致一系列嚴(yán)重后果。機(jī)系統(tǒng)的真實(shí)輸出,從而導(dǎo)致一系列嚴(yán)重后果。l 本節(jié)主要討論軟件抗干擾的問題,關(guān)于硬件的抗干擾措施這里不本節(jié)主要討論軟件抗干擾的問題,關(guān)于硬件的抗干擾措施這里不再論述。再論述。10.5.1 軟件陷阱技術(shù)軟件陷阱技術(shù)l 當(dāng)當(dāng)CPU受到干擾后,會(huì)將
50、一些操作數(shù)當(dāng)作指令碼來執(zhí)行,造成程序執(zhí)行混亂。受到干擾后,會(huì)將一些操作數(shù)當(dāng)作指令碼來執(zhí)行,造成程序執(zhí)行混亂。這時(shí),首先要盡快將程序納入正軌這時(shí),首先要盡快將程序納入正軌(執(zhí)行真正的指令序列執(zhí)行真正的指令序列)。l l 真正的軟件陷阱由真正的軟件陷阱由3條指令構(gòu)成:條指令構(gòu)成: NOP NOP LJMP ERRERR:一段專門對(duì)程序出錯(cuò)進(jìn)行處理的程序,以使程序:一段專門對(duì)程序出錯(cuò)進(jìn)行處理的程序,以使程序 按既定目標(biāo)執(zhí)行。按既定目標(biāo)執(zhí)行。 ORG 0000H 0000 START:LJMP MAIN ;引向主程序入口;引向主程序入口0003 LJMP PGINT0 ;INT0中斷正常入口中斷正常入
51、口0006 NOP ;冗余指令;冗余指令0007 NOP0008 LJMP ERR ;陷阱;陷阱000B LJMP PGT0 ;T0中斷正常入口中斷正常入口000E NOP ;冗余指令;冗余指令000F NOP0010 LJMP ERR ;陷阱;陷阱0013 LJMP ERR ;未使用;未使用INT1,設(shè)陷阱,設(shè)陷阱0016 NOP ;冗余指令;冗余指令0017 NOP0018 LJMP ERR ;陷阱;陷阱001B LJMP PGT1 ;T1中斷正常入口中斷正常入口001E NOP ;冗余指令;冗余指令001F NOP0020 LJMP ERR ;陷阱;陷阱0023 LJMP ERR ;未用
52、串口中斷,設(shè)陷阱;未用串口中斷,設(shè)陷阱0026 NOP ;冗余指令;冗余指令0027 NOP0028 LJMP ERR ;陷阱;陷阱 在未使用的中斷在未使用的中斷向量區(qū)設(shè)置陷阱,向量區(qū)設(shè)置陷阱,就能及時(shí)捕捉到錯(cuò)就能及時(shí)捕捉到錯(cuò)誤中斷。誤中斷。設(shè):使用了設(shè):使用了3個(gè)中個(gè)中斷:斷:INT0、T0和和T1, 可以按如左方式可以按如左方式來設(shè)置中斷向量區(qū)。來設(shè)置中斷向量區(qū)。l 未編程未編程ROM,都維持都維持(0FFH),是一條單字節(jié)指令是一條單字節(jié)指令“MOV R7,A”,l 只要每隔一段設(shè)置一個(gè)陷阱,就能捕捉到彈飛的程序。只要每隔一段設(shè)置一個(gè)陷阱,就能捕捉到彈飛的程序。 軟件陷阱要指向出錯(cuò)處理過
53、程軟件陷阱要指向出錯(cuò)處理過程ERR才穩(wěn)妥,才穩(wěn)妥, ERR可安排在可安排在0030H開始的地方。開始的地方。l 可以用可以用“00 00 20 00 30” 5字節(jié)作為陷阱來填充字節(jié)作為陷阱來填充ROM中的未使中的未使用用 空間。即指令:空間。即指令: NOP / NOP / LJMP 0030H, 或隔一段設(shè)置一個(gè)陷阱或隔一段設(shè)置一個(gè)陷阱“02 00 30”,即指令:,即指令: LJMP 0030H, 其它單元保持其它單元保持0FFH不變。不變。 表格有兩類:表格有兩類: 一類是數(shù)據(jù)表格,供一類是數(shù)據(jù)表格,供“MOVC A,A+PC”指令指令或或“MOVC A,A+DPTR”指令使用;指令使
54、用; 另一類是散轉(zhuǎn)表格,供另一類是散轉(zhuǎn)表格,供“JMP A+DPTR”指令使用,其內(nèi)容為指令使用,其內(nèi)容為一系列的一系列的3字節(jié)指令字節(jié)指令LJMP或兩字節(jié)指令或兩字節(jié)指令A(yù)JMP。 只能在表格的最后安排只能在表格的最后安排5字節(jié)陷阱字節(jié)陷阱 (NOP / NOP / LJMP ERR)。 程序區(qū)的指令串中間常有一些斷裂點(diǎn),正常執(zhí)行程序到不會(huì)繼續(xù)往下執(zhí)程序區(qū)的指令串中間常有一些斷裂點(diǎn),正常執(zhí)行程序到不會(huì)繼續(xù)往下執(zhí)行了,這類指令有行了,這類指令有LJMP、SJMP、AJMP、RET和和RETI。在這種地方安。在這種地方安排陷阱后,就能有效地捕獲到它,而又不會(huì)影響正常執(zhí)行的程序流程。排陷阱后,就能
55、有效地捕獲到它,而又不會(huì)影響正常執(zhí)行的程序流程。例如例如:根據(jù):根據(jù)A中內(nèi)容的正、負(fù)、零情況進(jìn)行三分支的程序中,軟件陷阱的中內(nèi)容的正、負(fù)、零情況進(jìn)行三分支的程序中,軟件陷阱的安置方式如下:安置方式如下: JNZ XYZ ;零處理;零處理 AJMP ABC ;斷裂點(diǎn);斷裂點(diǎn) NOP NOP LJMP ERR ;陷阱;陷阱 XYZ: JB ACC.7,VUW ;正處理;正處理 AJMP ABC ;斷裂點(diǎn);斷裂點(diǎn) NOP NOP LJMP ERR ;陷阱;陷阱 VUW: ;負(fù)處理;負(fù)處理 ABC: MOV A,R0 ;取結(jié)果;取結(jié)果 RET ;斷裂點(diǎn);斷裂點(diǎn) NOP NOP LJMP ERR ;陷阱
56、;陷阱10.5.2 軟件看門狗軟件看門狗程序運(yùn)行監(jiān)視系統(tǒng)程序運(yùn)行監(jiān)視系統(tǒng) (WATCHDOG)特性:特性: uu 本身能獨(dú)立工作,基本上不依賴于本身能獨(dú)立工作,基本上不依賴于CPU; uu CPU在一個(gè)固定的時(shí)間間隔內(nèi)和該系統(tǒng)打一次交道在一個(gè)固定的時(shí)間間隔內(nèi)和該系統(tǒng)打一次交道 (喂一次狗喂一次狗),以表明系統(tǒng)目前尚正常;,以表明系統(tǒng)目前尚正常; uu 當(dāng)當(dāng)CPU陷入死循環(huán)后,能及時(shí)發(fā)覺并使系統(tǒng)復(fù)位。陷入死循環(huán)后,能及時(shí)發(fā)覺并使系統(tǒng)復(fù)位。 在在8096系列單片機(jī)和增強(qiáng)型系列單片機(jī)和增強(qiáng)型89C51系列單片機(jī)芯片內(nèi)已經(jīng)內(nèi)嵌系列單片機(jī)芯片內(nèi)已經(jīng)內(nèi)嵌了程序運(yùn)行監(jiān)視系統(tǒng),使用起來很方便。了程序運(yùn)行監(jiān)視系
57、統(tǒng),使用起來很方便。 在普通型在普通型51系列單片機(jī)中,必須由用戶自己建立。如果要實(shí)現(xiàn)系列單片機(jī)中,必須由用戶自己建立。如果要實(shí)現(xiàn)WATCHDOG的真正目標(biāo),該系統(tǒng)還必須包括完全獨(dú)立于的真正目標(biāo),該系統(tǒng)還必須包括完全獨(dú)立于CPU之外之外的硬件電路,有時(shí)為了簡化硬件電路,也可以采用純軟件的的硬件電路,有時(shí)為了簡化硬件電路,也可以采用純軟件的WATCHDOG系統(tǒng)。系統(tǒng)。軟件軟件WATCHDOG是一個(gè)比較好的補(bǔ)救措施,是一個(gè)比較好的補(bǔ)救措施,只是其可靠性稍差一些。只是其可靠性稍差一些。純軟件的純軟件的WATCHDOG系統(tǒng)系統(tǒng)l 當(dāng)系統(tǒng)陷入死循環(huán)后,只有比它更高級(jí)的中斷才能奪走對(duì)當(dāng)系統(tǒng)陷入死循環(huán)后,只
58、有比它更高級(jí)的中斷才能奪走對(duì)CPU的控制。的控制。為此,用一個(gè)定時(shí)器來作為此,用一個(gè)定時(shí)器來作WATCHDOG,將它的溢出中斷設(shè)定為高優(yōu)先級(jí),將它的溢出中斷設(shè)定為高優(yōu)先級(jí)中斷,其他中斷均設(shè)為低優(yōu)先級(jí)中斷。中斷,其他中斷均設(shè)為低優(yōu)先級(jí)中斷。l 例如:用例如:用T0,作定時(shí)約為,作定時(shí)約為16 ms,在初始化時(shí)建,在初始化時(shí)建WATCHDOG: MOV TMOD, #01H ;設(shè)置;設(shè)置T0為為16位定時(shí)器位定時(shí)器 SETB ET0 ;允許;允許T0中斷中斷 SETB PT0 ;設(shè)置;設(shè)置T0為高級(jí)中斷為高級(jí)中斷 MOV TH0, #0E0H ;定時(shí)約;定時(shí)約16 ms(6 MHz晶振晶振) SE
59、TB TR0 ;啟動(dòng);啟動(dòng)T0 SETB EA ;開中斷;開中斷l(xiāng) WATCHDOG啟動(dòng)以后,工作程序必須經(jīng)常啟動(dòng)以后,工作程序必須經(jīng)常“喂它喂它”,執(zhí)行一條,執(zhí)行一條 “MOV TH0,#0E0H”指令,且每兩次間隔不大于指令,且每兩次間隔不大于16 ms (如可以每如可以每 10 ms“喂喂”一次一次)。l 當(dāng)程序陷入死循環(huán)后,當(dāng)程序陷入死循環(huán)后,16 ms之內(nèi)即可引起一次之內(nèi)即可引起一次T0溢出,產(chǎn)生高優(yōu)溢出,產(chǎn)生高優(yōu)先級(jí)中斷,從而跳出死循環(huán)。先級(jí)中斷,從而跳出死循環(huán)。 T0中斷直接轉(zhuǎn)向出錯(cuò)處理程序中斷直接轉(zhuǎn)向出錯(cuò)處理程序,在中斷向量區(qū)放置一條在中斷向量區(qū)放置一條“LJMP ERR”指令
60、即可。由出錯(cuò)處理程序完成善后,并用軟件方法使系統(tǒng)復(fù)位。指令即可。由出錯(cuò)處理程序完成善后,并用軟件方法使系統(tǒng)復(fù)位。完整的看門狗程序完整的看門狗程序,它包括模擬主程序,喂狗,它包括模擬主程序,喂狗(DOG)程序和空彈返回程序和空彈返回(TOP)程序。程序。 ORG 0000H AJMP MAIN ORG 000BH LJMP TOP MAIN:MOV SP, #60H MOV PSW, #00H MOV SCON,#00H MOV IE, #00H MOV IP, #00H ;模擬硬件復(fù)位,這部分可根據(jù)系統(tǒng)對(duì)資源使用情況增減;模擬硬件復(fù)位,這部分可根據(jù)系統(tǒng)對(duì)資源使用情況增減 MOV TMOD,#0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年摩托車減震器鋁筒項(xiàng)目可行性研究報(bào)告
- 二零二五年度工程承包合同關(guān)于建筑材料供應(yīng)與質(zhì)量保證
- 2025版高科技企業(yè)產(chǎn)權(quán)互換技術(shù)合作協(xié)議范本3篇
- 二零二五年度個(gè)人土地承包權(quán)抵押融資服務(wù)合同3篇
- Unit 6 sunshine for all task說課稿2024-2025學(xué)年牛津譯林版八年級(jí)英語下冊(cè)
- 東風(fēng)汽車集團(tuán)有限公司介紹
- 二零二五年度吊裝作業(yè)應(yīng)急預(yù)案合同3篇
- 二零二五年度冷鏈設(shè)備運(yùn)輸及質(zhì)量控制合同范本
- 甘肅省天水市甘谷縣第一中學(xué)2024-2025學(xué)年高一上學(xué)期11月期中考試生物試卷(含答案)
- Lesson 5~ Lesson 6 綜合測(cè)評(píng)卷(含答案)-2024-2025學(xué)年科普版(三起)英語四年級(jí)上冊(cè)
- 【企業(yè)采購業(yè)務(wù)內(nèi)部控制研究文獻(xiàn)綜述及理論基礎(chǔ)2600字】
- 施工員質(zhì)量員責(zé)任制月度考核記錄三
- 醫(yī)院重點(diǎn)崗位工作人員輪崗制度
- 第二章植物纖維
- 《論語》中英對(duì)照(理雅各譯)
- 新疆建設(shè)工程質(zhì)量監(jiān)督管理工作手冊(cè)
- 小紅帽故事PPT課件15
- 旅游景區(qū)組織機(jī)構(gòu)
- 漢字文化解密(華中師范大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測(cè)試答案
- 急救護(hù)理 氧氣吸入(氧氣筒)
- 22部能夠療傷的身心靈療愈電影
評(píng)論
0/150
提交評(píng)論