版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、,第10章 系統(tǒng)實(shí)用程序,主講教師:秦曉飛上海理工大學(xué)光電學(xué)院,第10章 系統(tǒng)實(shí)用程序,10.1 主程序和子程序的概念 10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序 10.3 數(shù)據(jù)處理程序 10.4 代碼轉(zhuǎn)換程序 10.5 抗干擾技術(shù) 10.6 最短程序,10.1 主程序和子程序的概念,10.1 主程序和子程序的概念,10.1.1 主程序 主程序是單片機(jī)系統(tǒng)控制程序的主框架。 是一個(gè)順序執(zhí)行的無(wú)限循環(huán)的程序 運(yùn)行過(guò)程必須構(gòu)成一個(gè)圈。,圖10-1 主程序結(jié)構(gòu),10.1 主程序和子程序的概念,10.1.2 子程序及參數(shù)傳遞 子程序包括普通子程序(簡(jiǎn)稱子程序)和中斷服務(wù)子程序。 在程序設(shè)計(jì)中,有時(shí)需反復(fù)執(zhí)行某段
2、程序。通常把具有一定功能的公用程序段作為子程序。 在主程序需要執(zhí)行這種操作的地方執(zhí)行一條調(diào)用指令,轉(zhuǎn)到子程序去執(zhí)行;完成規(guī)定操作以后,再返回到原來(lái)的程序(主程序)繼續(xù)執(zhí)行。 子程序中通常包含現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)兩部分。 主程序和子程序之間的信息交換,稱之為參數(shù)傳遞: 用工作寄存器或累加器傳遞參數(shù); 用指針寄存器來(lái)傳遞參數(shù)。,圖10-2 調(diào)子程序,10.1 主程序和子程序的概念,10.1.2 子程序及參數(shù)傳遞 1.用工作寄存器或累加器來(lái)傳遞參數(shù) 例10-1 用程序?qū)崿F(xiàn)c=a2+b2。 設(shè):a、b和c分別存于內(nèi)部RAM的DA、DB和DC 3個(gè)單元中。通過(guò)兩次調(diào)用子程序查平方表,結(jié)果在主程序中相加得到
3、。 其入口條件是:(A)=待查表的數(shù);出口條件是(A)=平方值。,主程序片段: STAR:MOVA,DA;取第一操作數(shù) ACALLSQR;調(diào)用查表程序 MOVR1,A;a2暫存R1中 MOVA,DB;取b ACALLSQR;第2次調(diào)用查表程序 ADDA,R1;a2b2 MOVDC,A;結(jié)果存于DC中 SJMP;等待,子程序片段: SQR:INCA;偏移量調(diào)整(RET一字節(jié)) MOVCA,A+PC;查平方表 RET TAB:DB 0,1,4,9,16 DB 25,36,49,64,81 END,10.1 主程序和子程序的概念,10.1.2 子程序及參數(shù)傳遞 2.用指針寄存器來(lái)傳遞參數(shù) 如果參數(shù)在
4、片內(nèi)RAM中,則可用 R0 或 R1 作指針; 如參數(shù)在片外RAM或程序存儲(chǔ)器中,則可用 DPTR 作指針。 例10-2 將R0和R1指出的內(nèi)部RAM中兩個(gè)3字節(jié)無(wú)符號(hào)整數(shù)相加,結(jié)果送到由R0指出的內(nèi)部RAM中。入口時(shí),R0和R1分別指向加數(shù)和被加數(shù)的低位字節(jié);出口時(shí),R0指向結(jié)果的高位字節(jié)。低字節(jié)在高地址,高字節(jié)在低地址。(此處書(shū)上錯(cuò)),NADD:MOVR7,#3;3字節(jié)加法 CLRC NADD1:MOVA,R0;取加數(shù)低字節(jié) ADDCA,R1;取被加數(shù)低字節(jié)并加到A MOVR0,A DEC R0 DECR1 DJNZR7,NADD1 INCR0 RET,10.1 主程序和子程序的概念,10
5、.1.3 中斷服務(wù)子程序 主程序調(diào)用子程序與主程序被中斷去執(zhí)行中斷服務(wù)子程序的過(guò)程是不同的: 調(diào)用子程序是當(dāng)主程序運(yùn)行到 “LCALL”等指令時(shí),先自動(dòng)壓入斷點(diǎn),再進(jìn)入子程序;當(dāng)執(zhí)行子程序到最后一條指令RET時(shí),自動(dòng)彈出斷點(diǎn)送PC,返回主程序; 程序中斷是隨機(jī)的。當(dāng)主程序運(yùn)行時(shí),遇到中斷申請(qǐng),則CPU執(zhí)行完當(dāng)前指令后,首先自動(dòng)壓入斷點(diǎn),然后轉(zhuǎn)去執(zhí)行中斷服務(wù)子程序。當(dāng)中斷服務(wù)程序執(zhí)行到最后一條指令RETI時(shí),同樣彈出斷點(diǎn)送PC,返回主程序。,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.1 數(shù)據(jù)采集程序 典型數(shù)據(jù)采集程序框圖舉例:,圖10-2 數(shù)據(jù)采集總流程圖,1
6、0.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.2 航標(biāo)燈控制程序 例10-3 用89C51單片機(jī)試制一個(gè)“航標(biāo)燈”。fosc12MHZ 要求: 黑夜定時(shí)周期循環(huán)發(fā)光,定時(shí)間隔為2s,即亮2s,滅2s。 當(dāng)白天到來(lái)時(shí),航標(biāo)燈應(yīng)熄滅,停止定時(shí)器工作。 編程思路: 采用定時(shí)加計(jì)數(shù)的方法定時(shí)2 s。 如圖10.5所示的光敏三極管來(lái)區(qū)分白天與黑夜。,黑夜時(shí),無(wú)光照,T1和T2均截止,使INT00,發(fā)出中斷請(qǐng)求。CPU進(jìn)入外部中斷處理程序,啟動(dòng)定時(shí)器工作,利用定時(shí)器中斷控制燈定時(shí)閃閃發(fā)光。用軟件查詢INT0引腳,只要INT00,定時(shí)器便繼續(xù)工作。 白天時(shí),日光使T1導(dǎo)通,T2輸出低電平,INT01,立即關(guān)閉定
7、時(shí)器,結(jié)束外部中斷處理并返回到主程序。,圖10-5 航標(biāo)燈控制電路,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.2 航標(biāo)燈控制程序 設(shè):T0定時(shí)和R7軟件計(jì)數(shù)可以延時(shí)2s。R7軟件計(jì)數(shù)為40次,T0定時(shí)50ms,T0采用模式1,計(jì)數(shù)初值為:216-12501000123CB0H,主程序:ORG0000H AJMPMAIN ORG0003H AJMPWBINT;外部中斷0入口地址 ORG000BH AJMPT0INT;T0中斷入口地址 ORG0100H MAIN:MOVSP,#30H;設(shè)置堆棧指針 CLRP1.7;設(shè)燈的初態(tài)為“滅” CLRIT0 ;外部中斷0為電平觸發(fā)方式 CLRPX0;外部中
8、斷0為低優(yōu)先級(jí) SETBEX0;允許外部中斷0中斷 SETBEA;CPU允許中斷 HERE:AJMPHERE;等待外部中斷請(qǐng)求 外部中斷0中斷服務(wù)程序(由0003H轉(zhuǎn)來(lái)): WBINT:MOVTMOD,#01H;T0定時(shí),模式1 MOVTL0,#0B0H;T0計(jì)數(shù)初值 MOVTH0,#3CH SETBPT0;設(shè)T0為高優(yōu)先級(jí)中斷,SETBTR0;啟動(dòng)T0 SETBET0;T0開(kāi)中斷 MOVR7,#40;軟件計(jì)數(shù)值 HERE1:JNBP3.2,HERE1 ;查詢INT0,為低(黑夜),等待T0中斷 CLRET0 ;為高(白天),禁止T0中斷 CLRTR0;關(guān)T0 CLRP1.7;熄燈 RETI;
9、返回主程序 定時(shí)器0中斷服務(wù)程序(由000BH轉(zhuǎn)來(lái)): T0INT:MOVTL0,#0B0H;重賦T0初值 MOVTH0,#3CH DJNZR7,EXIT;軟件計(jì)數(shù)為0嗎? MOVR7,#40H ;計(jì)數(shù)已到,重賦初值 CPLP1.7 ;輸出取反控制燈“亮”或“滅” EXIT:RETI;中斷返回 END,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.3 水位控制程序 1.水位控制原理 圖10-6中虛線表示允許水位變化的上、下限。水塔安裝固定的3根金屬棒。其中,A棒處于下限水位,A棒接+5V電源,C棒處于上限水位,B棒在上、下限水位之間。B棒、C棒各通過(guò)一個(gè)電阻與地相連。 單片機(jī)控制電機(jī)轉(zhuǎn)動(dòng),電機(jī)帶
10、動(dòng)水泵供水供水時(shí),水位上升,當(dāng)達(dá)到上限時(shí),由于水導(dǎo)電,B、C棒連通+5V。b和c兩端均為”1”.這時(shí),應(yīng)停止電機(jī)工作,不再供水。 當(dāng)水位降到下限時(shí),B、C棒都不能與棒導(dǎo)通,b和c兩端均為”0”。啟動(dòng)電機(jī)供水. 當(dāng)水位處于上下限之間,棒與A棒導(dǎo)通.棒不能與棒導(dǎo)通,b端為”1”,c端為“0”狀態(tài)。應(yīng)繼續(xù)維持原有的工作狀態(tài)。,圖10-6 水塔水位控制原理圖,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.3 水位控制程序 2.水位控制電路 如圖10-7所示 3.信號(hào)輸入與輸出 水位信號(hào)由P1.0和P1.1輸入 由P1.2端輸出,去控制電機(jī)。 由P1.3輸出報(bào)警信號(hào),驅(qū)動(dòng)一只發(fā)光二極管進(jìn)行光報(bào)警。,圖10
11、-7 水塔水位控制電路,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.3 水位控制程序 4.控制程序,圖10-8 水塔水位控制程序流程,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.3 水位控制程序 4.控制程序,主程序: ORG0030H LOOP:ORLP1,#03H;此處書(shū)上錯(cuò) ;為檢查水位狀態(tài)作準(zhǔn)備 MOVA,P1 JNBACC.0,ONE;P1.0=0則轉(zhuǎn) JBACC.1,TWO;P1.1=1則轉(zhuǎn) BACK:ACALLD10S;延時(shí)10s AJMPLOOP ONE:JNBACC.1,THREE;P1.1=0則轉(zhuǎn) CLR93H ;0P1.3,啟動(dòng)報(bào)警裝置 SETB92H ;1P1.2,停止
12、電機(jī)工作 FOUR:SJMPFOUR THREE:CLR92H;啟動(dòng)電機(jī) AJMPBACK TWO:SETB92H;停止電機(jī)工作 AJMPBACK,延時(shí)子程序D10S(延時(shí)10s): ORG0100H D10S:MOVR3,#19H LOOP3:MOVR1,#85H LOOP1:MOVR2,#0FAH LOOP2:DJNZR2,LOOP2 DJNZR1,LOOP1 DJNZR3,LOOP3 RET,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.4 蜂鳴器報(bào)警子程序 壓電式蜂鳴器約需10mA的驅(qū)動(dòng)電流 當(dāng)P1.0輸出高電平1時(shí),壓電蜂鳴器兩端獲得約+5V電壓而鳴叫; 當(dāng)P1.0輸出低電平0時(shí),壓電
13、蜂鳴器兩引線間的直流電壓降至接近于0V,蜂鳴器停止發(fā)聲。,圖10-10 使用三極管作驅(qū)動(dòng)的單音頻報(bào)警電路,圖10-9 使用7406作驅(qū)動(dòng)的單音頻報(bào)警電路,10.2 數(shù)據(jù)采集及簡(jiǎn)單控制程序,10.2.4 蜂鳴器報(bào)警子程序 連續(xù)鳴音30ms的控制子程序清單:,SND:SETBP1.0;P1.0輸出高電平,啟動(dòng)蜂鳴器鳴叫 MOVR7,#1EH;延時(shí)30 ms DL:MOVR6,#0F9H DL1:DJNZR6,DL1;小循環(huán)延時(shí)1 ms DJNZR7,DL CLRP1.0;P1.0輸出低電平,停止蜂鳴器鳴叫 RET,10.3 數(shù)據(jù)處理程序,10.3 數(shù)據(jù)處理程序,10.3.1 排序程序 例10-4
14、將片內(nèi)RAM 50H59H中的數(shù)據(jù)按從小到大的順序排序 解:這是一個(gè)排序問(wèn)題,按從小到大排列稱升序排列,反之稱降序排列。 根據(jù)題意,排序程序在執(zhí)行時(shí),取前數(shù)與后數(shù)比較:如果前數(shù)小于后數(shù),則繼續(xù)順序比較下去;如果前數(shù)大于后數(shù),則前數(shù)和后數(shù)交換后再繼續(xù)比較下去。第一次循環(huán)將在最后單元中得到最大的數(shù)(冒泡法)。得到所有數(shù)據(jù)的升序排列需要經(jīng)過(guò)多重循環(huán)。,CLR00H;清除交換標(biāo)志位 QUE:MOVR3,#9H;10個(gè)數(shù)據(jù)循環(huán)次數(shù) MOVR0,#50H;數(shù)據(jù)存放區(qū)首址 MOVA,R0;取前數(shù) L2:INCR0 MOVR2,A;保存前數(shù) SUBBA,R0;前數(shù)減后數(shù) MOVA,R2;恢復(fù)前數(shù) JCL1;順
15、序則繼續(xù)比較 SETB00H;逆序則建立標(biāo)志位 XCHA,R0;前數(shù)與后數(shù)交換 DECR0 XCHA,R0 INCR0;仍指向后數(shù)單元,L1:MOVA,R0 DJNZR3,L2;依次重復(fù)比較 JB00H,QUE;交換后重新比較 RET,10.3 數(shù)據(jù)處理程序,10.3.2 數(shù)字濾波程序 前向通道中,必須消除被測(cè)信號(hào)中的噪音和干擾。噪音有兩大類: 一類為周期性的。典型為50Hz的工頻干擾。采用硬件濾波電路能有效地消除其影響。 另一類為不規(guī)則隨機(jī)性的,可以用數(shù)字濾波方法予以削弱或?yàn)V除。數(shù)字濾波,就是通過(guò)程序計(jì)算或判斷來(lái)減少干擾在有用信號(hào)中的比重,實(shí)際是一種程序?yàn)V波。經(jīng)常采用的中值法、去極值法可對(duì)采
16、樣信號(hào)進(jìn)行數(shù)字濾波,以消除常態(tài)干擾。 這里以中值法為例講解:中值濾波是對(duì)某一參數(shù)連續(xù)采樣n次(n一般取奇數(shù)),然后把n次的采樣值從小到大或從大到小排列,再取中間值作為本次采樣值。該算法的采樣次數(shù)常為3次或5次。 現(xiàn)以3次采樣為例。 3次采樣值分別存放在R2、R3和R4中,程序運(yùn)行之后,將3個(gè)數(shù)據(jù)從小到大順序排列,仍然存放在R2、R3和R4中,中值在R3中。,10.3 數(shù)據(jù)處理程序,10.3.2 數(shù)字濾波程序,程序清單: FILT2:MOVA,R2;R2R3嗎? CLRC SUBBA,R3 JCFILT21 MOVA,R2 ;R2R3時(shí),交換R2和R3 XCHA,R3 MOVR2,A FILT2
17、1:MOVA,R3;R3R4嗎? CLRC SUBBA,R4 JCFILT22 ;R3R4時(shí),排序結(jié)束 MOVA,R4 ;R3R4時(shí),交換R3和R4 XCHA,R3 XCHA,R4;R3R2嗎? CLRC SUBBA,R2 JNCFILT22 ;R3R2時(shí),排序結(jié)束,MOVA,R2 ;R3R2時(shí),以R2為中值 MOVR3,A;中值在R3中 FILT22:RET,10.3 數(shù)據(jù)處理程序,10.3.3 標(biāo)度變換(工程量變換) 1.線性參數(shù)標(biāo)度變換 前提條件是參數(shù)值與A/D轉(zhuǎn)換結(jié)果(采樣值)之間應(yīng)呈線性關(guān)系。 當(dāng)輸入信號(hào)為0(即參數(shù)值起點(diǎn)值), A/D輸出值不為0時(shí),標(biāo)度變換公式為: 式中: A0參
18、數(shù)量程起點(diǎn)值,一次測(cè)量?jī)x表的下限; Am參數(shù)量程終點(diǎn)值,一次測(cè)量?jī)x表的上限; Ax參數(shù)測(cè)量值,實(shí)際測(cè)量值(工程量); N0量程起點(diǎn)對(duì)應(yīng)的A/D轉(zhuǎn)換值,儀表下限所對(duì)應(yīng)的數(shù)字量; Nm量程終點(diǎn)對(duì)應(yīng)的A/D值,儀表上限所對(duì)應(yīng)的數(shù)字量; Nx測(cè)量值對(duì)應(yīng)的A/D值(采樣值),是經(jīng)數(shù)字濾波后的采樣值。 其中,A0、Am、N0和Nm對(duì)一個(gè)檢測(cè)系統(tǒng)來(lái)說(shuō)是常數(shù)。 在參數(shù)量程起點(diǎn)(輸入信號(hào)為0), A/D值為0時(shí)(即N00)。標(biāo)度變換:,10.3 數(shù)據(jù)處理程序,10.3.3 標(biāo)度變換(工程量變換) 1.線性參數(shù)標(biāo)度變換 很多測(cè)量系統(tǒng)中,參數(shù)量程起點(diǎn)值(即儀表下限值)A00,對(duì)應(yīng)的0??蛇M(jìn)一步簡(jiǎn)化為: 2.非線性參
19、數(shù)標(biāo)度變換 如果傳感器輸出特性是非線性的,可采用查表法進(jìn)行標(biāo)度變換。,10.4 代碼轉(zhuǎn)換程序,10.4 代碼轉(zhuǎn)換程序,各種代碼之間的轉(zhuǎn)換常采用算法處理和查表方式。 例10-5 單字節(jié)二翻十子程序。將00HFFH 內(nèi)二進(jìn)制數(shù)轉(zhuǎn)換為BCD數(shù)(0256)。 解:入口:(A)=二進(jìn)制數(shù)。出口:百、十和個(gè)位分別存入R0指出的兩個(gè)RAM單元。,圖10-15 二進(jìn)制數(shù)轉(zhuǎn)換成 BCD數(shù)子程序,程序清單: BINBCD:MOVB,#100 DIVAB;(A)=百位數(shù) MOVR0,A;百位BCD存入RAM INCR0 MOVA,#10 XCHA,B DIVAB;(A)=十位數(shù),(B)=個(gè)位數(shù) SWAPA ADDA
20、,B;(A)=壓縮BCD碼(十位個(gè)位) MOVR0,A;存入RAM RET,10.4 代碼轉(zhuǎn)換程序,例10-6 單字節(jié)十翻二子程序。將2位BCD數(shù)(壓縮為1字節(jié))轉(zhuǎn)換成二進(jìn)制數(shù)。 解:將累加器A中的壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù),結(jié)果仍在A中。 方法是將A中的高位乘以10,再加上A的低位字節(jié)。,程序清單: DTOB:MOVR2,A;暫存 ANLA,#0F0H;屏蔽低4位 SWAPA MOVB,#10 MULAB;高位乘以10 MOVR3,A;暫存 MOVA,R2;取BCD數(shù) ANLA,#0FH;取BCD數(shù)個(gè)位 ADDA,R3;得轉(zhuǎn)換結(jié)果 RET,10.4 代碼轉(zhuǎn)換程序,例10-7 一位十六進(jìn)制數(shù)轉(zhuǎn)
21、換成ASCII碼。 解:本程序中,由R0指出十六進(jìn)制數(shù)存放單元,經(jīng)轉(zhuǎn)換后結(jié)果仍存于原處。,程序清單: HEXASC1:MOVA,R0;取十六進(jìn)制數(shù) ANLA,#0FH;屏蔽高4位 ADDA,#03H;修正偏移量 MOVCA,A+PC;查表,取ASCII代碼 XCHA,R0;存儲(chǔ) INCR0;更新地址 RET ASCTAB:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H,10.4 代碼轉(zhuǎn)換程序,例10-8 十六進(jìn)制數(shù)的ASCII代碼轉(zhuǎn)換成二進(jìn)制數(shù)。 解:對(duì)于小于或等于9的數(shù)的ASCII代碼,減去30
22、H得4位二進(jìn)制數(shù);對(duì)于大于9的十六進(jìn)制數(shù)的ASCII代碼,減去37H得4位二進(jìn)制數(shù)。則正好是0AH0FH的結(jié)果。程序以R2作為入口和出口。,程序清單: ASCHEX:MOVA,R2;取操作數(shù) CLRC SUBBA,#30H;09的轉(zhuǎn)換 MOVR2,A;暫存結(jié)果 SUBBA,#0AH;結(jié)果是否9? JCSBIO;9則轉(zhuǎn)換正確,返回 XCHA,R2 SUBBA,#07H;9,則再減7H,即減去37H(書(shū)上錯(cuò)了) SBIO: MOVR2,A;存放結(jié)果 SBIO:RET(書(shū)上錯(cuò)了),10.5 抗干擾技術(shù),10.5 抗干擾技術(shù),干擾可以沿各種線路侵入,也可以以場(chǎng)的形式(高電壓、大電流、電火花等)從空間侵
23、入微機(jī)系統(tǒng);電網(wǎng)中各種浪涌電壓入侵,系統(tǒng)的接地裝置不良或不合理等,也是引入干擾的重要途徑。 干擾對(duì)微機(jī)系統(tǒng)的影響有3個(gè)部位: 前向通道、CPU內(nèi)核及后向通道。對(duì)前向通道的干擾會(huì)使輸入的模擬信號(hào)失真,數(shù)字信號(hào)出錯(cuò)。對(duì)這一部位的抗干擾,硬件方面可采用光電隔離、硬件濾波電路等措施,在軟件方面可采用前面講的數(shù)字濾波方法。 干擾可使微機(jī)系統(tǒng)內(nèi)核三總線上的數(shù)字信號(hào)錯(cuò)亂,從而引發(fā)一系列無(wú)法預(yù)料的后果,形成一系列錯(cuò)誤。CPU得到錯(cuò)誤的地址信號(hào)后,引起程序計(jì)數(shù)器出錯(cuò),使程序運(yùn)行離開(kāi)正常軌道,導(dǎo)致程序失控、飛跑或死循環(huán),進(jìn)而使后向通道的輸出信號(hào)混亂,不能正常反映微機(jī)系統(tǒng)的真實(shí)輸出,從而導(dǎo)致一系列嚴(yán)重后果。本節(jié)主要
24、討論軟件抗干擾的問(wèn)題。,10.5 抗干擾技術(shù),10.5.1 軟件陷阱技術(shù) 當(dāng)CPU受到干擾后,會(huì)將一些操作數(shù)當(dāng)作指令碼來(lái)執(zhí)行,造成程序執(zhí)行混亂。這時(shí),首先要盡快將程序納入正軌(執(zhí)行真正的指令序列)。 軟件陷阱:用一條引導(dǎo)指令強(qiáng)行將捕獲的程序引向一個(gè)指定的地址,在那里有一段專門(mén)對(duì)程序出錯(cuò)進(jìn)行處理的程序,以使程序按既定目標(biāo)執(zhí)行。 一般的軟件陷阱由3條指令構(gòu)成: NOP NOP LJMP ERR ERR:一段專門(mén)對(duì)程序出錯(cuò)進(jìn)行處理的程序,以使程序按既定目標(biāo)執(zhí)行。 下面我們研究,在各個(gè)程序存儲(chǔ)區(qū)間,如何布置軟件陷阱: 1.未使用的中斷向量區(qū) 假設(shè):程序只使用了3個(gè)中斷:INT0、T0和T1,那么在未使
25、用的中斷向量區(qū)設(shè)置陷阱,就能及時(shí)捕捉到錯(cuò)誤中斷。如下所示:,10.5 抗干擾技術(shù),10.5.1 軟件陷阱技術(shù) 1.未使用的中斷向量區(qū),ORG0000H 0000START:LJMPMAIN;引向主程序入口 0003LJMPPGINT0;INT0中斷正常入口 0006NOP;冗余指令 0007NOP 0008LJMPERR;陷阱 000BLJMPPGT0;T0中斷正常入口 000ENOP;冗余指令 000FNOP 0010LJMPERR;陷阱 0013LJMPERR;未使用INT1,設(shè)陷阱 0016NOP;冗余指令 0017NOP 0018LJMPERR;陷阱 001BLJMPPGT1;T1中斷
26、正常入口 001ENOP;冗余指令 001FNOP 0020LJMPERR;陷阱 0023LJMPERR;未用串口中斷,設(shè)陷阱 0026NOP;冗余指令 0027NOP 0028LJMPERR;陷阱,10.5 抗干擾技術(shù),10.5.1 軟件陷阱技術(shù) 2.未使用的大片ROM空間 未編程ROM,都維持(0FFH),是一條單字節(jié)指令“MOV R7,A”,只要每隔一段設(shè)置一個(gè)陷阱,就能捕捉到彈飛的程序。軟件陷阱要指向出錯(cuò)處理過(guò)程ERR才穩(wěn)妥,ERR可安排在0030H開(kāi)始的地方。可以用“00 00 20 00 30” 5字節(jié)作為陷阱來(lái)填充ROM中的未使用空間。即指令:NOP / NOP / LJMP 0
27、030H,或隔一段設(shè)置一個(gè)陷阱“02 00 30”,即指令:LJMP 0030H,其它單元保持0FFH不變。 3.表格區(qū) 表格有兩類:一類是數(shù)據(jù)表格,供“MOVC A,A+PC”指令或“MOVC A,A+DPTR”指令使用;另一類是散轉(zhuǎn)表格,供“JMP A+DPTR”指令使用,其內(nèi)容為一系列的3字節(jié)指令LJMP或兩字節(jié)指令A(yù)JMP。 由于表格的內(nèi)容和索引值是一一對(duì)應(yīng)關(guān)系,表格中安排陷阱代碼會(huì)破壞表格的連續(xù)性,因此只能在表格的最后安排5字節(jié)陷阱 (NOP / NOP / LJMP ERR)。 4.程序區(qū) 程序區(qū)的指令串中間常有一些斷裂點(diǎn),正常執(zhí)行程序到不會(huì)繼續(xù)往下執(zhí)行了,這類指令有LJMP、SJ
28、MP、AJMP、RET和RETI。在這種地方安排陷阱后,就能有效地捕獲到它,而又不會(huì)影響正常執(zhí)行的程序流程。,10.5 抗干擾技術(shù),10.5.1 軟件陷阱技術(shù) 4.程序區(qū) 例如:根據(jù)A中內(nèi)容的正、負(fù)、零情況進(jìn)行三分支的程序中,軟件陷阱的安置方式如下: JNZXYZ;零處理 AJMPABC;斷裂點(diǎn) NOP NOP LJMPERR;陷阱 XYZ:JBACC.7,VUW;正處理 AJMPABC;斷裂點(diǎn) NOP NOP LJMPERR;陷阱 VUW: ;負(fù)處理 ABC:MOVA,R0;取結(jié)果 RET;斷裂點(diǎn) NOP NOP LJMPERR,10.5 抗干擾技術(shù),10.5.2 軟件看門(mén)狗 看門(mén)狗程序運(yùn)行
29、監(jiān)視系統(tǒng) (WATCHDOG) 特性:本身能獨(dú)立工作,基本上不依賴于CPU;CPU在一個(gè)固定的時(shí)間間隔內(nèi)和該系統(tǒng)打一次交道(喂一次狗),以表明系統(tǒng)目前尚正常;當(dāng)CPU陷入死循環(huán)后,能及時(shí)發(fā)覺(jué)并使系統(tǒng)復(fù)位。 在8096系列單片機(jī)和增強(qiáng)型89C51系列單片機(jī)芯片內(nèi)已經(jīng)內(nèi)嵌了程序運(yùn)行監(jiān)視系統(tǒng),使用起來(lái)很方便。在普通型51系列單片機(jī)中,必須由用戶自己建立。 自己構(gòu)建看門(mén)狗的方法:純軟件法,外接硬件法。這里以純軟件法為例講解: 當(dāng)系統(tǒng)陷入死循環(huán)后,只有比它更高級(jí)的中斷才能奪走對(duì)CPU的控制。為此,用一個(gè)定時(shí)器來(lái)作WATCHDOG,將它的溢出中斷設(shè)定為高優(yōu)先級(jí)中斷,其他中斷均設(shè)為低優(yōu)先級(jí)中斷。 例如:用T
30、0,作定時(shí)約為16 ms,在初始化時(shí)建WATCHDOG: MOVTMOD,#01H;設(shè)置T0為16位定時(shí)器 SETBET0;允許T0中斷 SETBPT0;設(shè)置T0為高級(jí)中斷 MOVTH0,#0E0H;定時(shí)約16 ms(6 MHz晶振) SETBTR0;啟動(dòng)T0 SETBEA;開(kāi)中斷,10.5 抗干擾技術(shù),10.5.2 軟件看門(mén)狗 WATCHDOG啟動(dòng)以后,工作程序必須經(jīng)?!拔顾保瑘?zhí)行一條“MOV TH0,#0E0H”指令,且每?jī)纱伍g隔不大于16ms (如可以每10ms“喂”一次)。當(dāng)程序陷入死循環(huán)后,16ms之內(nèi)即可引起一次T0溢出,產(chǎn)生高優(yōu)先級(jí)中斷,從而跳出死循環(huán)。T0中斷直接轉(zhuǎn)向出錯(cuò)處理程序,在中斷向量區(qū)放置一條“LJMP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美潔培訓(xùn)學(xué)員管理制度
- 專職消防隊(duì)教育培訓(xùn)制度
- 培訓(xùn)班教學(xué)區(qū)家長(zhǎng)制度
- 教職工培訓(xùn)管理制度
- 肯德基培訓(xùn)日常管理制度
- 培訓(xùn)人員就業(yè)跟蹤服務(wù)制度
- 實(shí)驗(yàn)室學(xué)生培訓(xùn)制度
- 少兒街舞培訓(xùn)中心管理制度
- 護(hù)理人員培訓(xùn)相關(guān)制度
- 拍賣業(yè)務(wù)學(xué)習(xí)培訓(xùn)制度
- 2026年大連雙D高科產(chǎn)業(yè)發(fā)展有限公司公開(kāi)選聘?jìng)淇碱}庫(kù)及答案詳解(奪冠系列)
- 團(tuán)隊(duì)建設(shè)與協(xié)作能力提升工作坊指南
- 2025成人腸造口護(hù)理指南課件
- 電焊工安全宣講課件
- 水泵基礎(chǔ)知識(shí)培訓(xùn)課件教學(xué)
- 內(nèi)鏡院感培訓(xùn)課件
- 2026中征(北京)征信有限責(zé)任公司招聘13人考試題庫(kù)附答案
- 期末重點(diǎn)易錯(cuò)知識(shí)點(diǎn)復(fù)習(xí)(課件)-2025-2026學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)北師大版
- 醫(yī)療資源合理分配
- 2026年楊凌職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)含答案詳解
- 2025云南昆明元朔建設(shè)發(fā)展有限公司第二批收費(fèi)員招聘9人筆試考試參考題庫(kù)及答案解析
評(píng)論
0/150
提交評(píng)論