




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、LOGO單片機原理單片機原理及接口技術及接口技術(高職高專版)(高職高專版) 第第9 9章章 系統實用程序系統實用程序LOGO9.1 主程序和子程序的概念主程序和子程序的概念9.2 數據采集及簡單控制程序數據采集及簡單控制程序9.3 數據處理程序數據處理程序9.4 代碼轉換程序代碼轉換程序9.5 軟件抗干擾軟件抗干擾9.6 最短程序最短程序第第9 9章章 系統實用程序系統實用程序LOGO9.1.1 主程序主程序 主程序是單片機系統控主程序是單片機系統控制程序的主框架。制程序的主框架。 是一個順序執行的無限是一個順序執行的無限循環的程序循環的程序 運行過程必須構運行過程必須構成一個圈成一個圈。9
2、.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO9.1.2 子程序及參數傳遞子程序及參數傳遞 在程序設計中,有時需反復執在程序設計中,有時需反復執行某段程序。通常行某段程序。通常把具有一定功把具有一定功能的公用程序段作為子程序能的公用程序段作為子程序。 在主程序需要執行這種操作的在主程序需要執行這種操作的地方執行一條調用指令,轉到子地方執行一條調用指令,轉到子程序去執行;程序去執行; 完成規定操作以后,再返回完成規定操作以后,再返回到原來的程序到原來的程序(主程序主程序)繼續執行。繼續執行。9.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO子程序調用中的參數傳遞問題
3、子程序調用中的參數傳遞問題 常用工作寄存器、累加器、地址指針寄存器或堆棧來傳遞參常用工作寄存器、累加器、地址指針寄存器或堆棧來傳遞參數。數。 1. 用工作寄存器用工作寄存器 Rn 或累加器或累加器 A 來傳遞參數來傳遞參數【例例9-1】用程序實現用程序實現 c=a+b。 設:設:a、b和和c分別存于內部分別存于內部RAM的的DA、DB和和DC 3個單元中。個單元中。 通過兩次調用子程序查平方表,結果在主程序中相加得到。通過兩次調用子程序查平方表,結果在主程序中相加得到。 9 9.1.2.1.2 子程序及參數傳遞子程序及參數傳遞 LOGO其入口條件是:其入口條件是:(A)=待查表的數;出口條件是
4、待查表的數;出口條件是(A)=平方值。平方值。 主程序片段:主程序片段:STAR:MOV A,DA ;取第一操作數;取第一操作數 ACALL SQR ;調用查表程序;調用查表程序 MOV R1,A ;a暫存暫存R1中中 MOV A,DB ;??;取b ACALL SQR ;第;第2次調用查表程序次調用查表程序 ADD A,R1 ;a MOV DC,A ;結果存于;結果存于DC中中 SJMP ;等待;等待 子程序片段:子程序片段:SQR:INC A ;偏移量調整;偏移量調整(RET一字節一字節) MOVC A,A+PC ;查平方表;查平方表 RET TAB:DB 0,1,4,9,16 DB 25,
5、36,49,64,81 END9 9.1.2.1.2 子程序及參數傳遞子程序及參數傳遞 LOGO2. 用指針寄存器來傳遞參數用指針寄存器來傳遞參數 如果參數在片內如果參數在片內RAM中,則可用中,則可用 R0 或或 R1 作指針;作指針; 如參數在片外如參數在片外RAM或程序存儲器中,則可用或程序存儲器中,則可用 DPTR 作作指針。指針?!纠?-2】 將將R0和和R1指出的內部指出的內部RAM中兩個中兩個3字節無符號整字節無符號整數相加,結果送到由數相加,結果送到由R0指出的內部指出的內部RAM中。中。 9 9.1.2.1.2 子程序及參數傳遞子程序及參數傳遞 LOGO 入口時,入口時,R
6、0和和R1分別指向加數和被加數的低位字節;分別指向加數和被加數的低位字節; 出口時,出口時,R0指向結果的高位字節。低字節在低地址。指向結果的高位字節。低字節在低地址。 NADD: MOV R7,#3 ;3字節加法字節加法 CLR C NADD1:MOV A,R0 ;取加數低字節;取加數低字節 ADDC A,R1 ;取被加數低字節并加到;取被加數低字節并加到A MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET 9 9.1.2.1.2 子程序及參數傳遞子程序及參數傳遞 LOGO9.1.3 中斷服務子程序中斷服務子程序 主程序調用子程序與主程序被中斷而
7、去執行主程序調用子程序與主程序被中斷而去執行中斷服務子程序的過程是中斷服務子程序的過程是不同不同的:的:v 調用子程序是當主程序運行到調用子程序是當主程序運行到 “LCALL DIS” 指令時,指令時,先自動壓入斷點先自動壓入斷點2003H,再進入中斷服務子程序;,再進入中斷服務子程序;v 程序中斷是隨機的。當主程序運行時,遇到中斷申請,則程序中斷是隨機的。當主程序運行時,遇到中斷申請,則CPU執行完當前指令后,首先自動壓入斷點執行完當前指令后,首先自動壓入斷點1002H,然,然后轉去執行中斷服務子程序。后轉去執行中斷服務子程序。9.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO
8、上述兩個過程的上述兩個過程的共同點共同點都是自動壓入斷點。都是自動壓入斷點。v 當執行子程序到最后一條指令當執行子程序到最后一條指令RET時,自動彈出斷點時,自動彈出斷點2003H送送PC,返回主程序;,返回主程序;v 當中斷服務程序執行到最后一條指令當中斷服務程序執行到最后一條指令RETI 時,同樣彈時,同樣彈出斷點出斷點1002H送送PC,返回主程序。,返回主程序。v 除此之外,兩種子程序都需要保護現場和恢復現場。除此之外,兩種子程序都需要保護現場和恢復現場。9.1.3 9.1.3 中斷服務子程序中斷服務子程序本節結束本節結束LOGO9.2 9.2 數據采集及簡單控制程序數據采集及簡單控制
9、程序9.2.1數據數據采集采集程序程序LOGO9.2.2 航標燈控制程序航標燈控制程序【例例9-3】用用89C2051單片機試制一個單片機試制一個“航標燈航標燈”。 fOSC12 MHZ要求:要求: 黑夜定時周期循環發光黑夜定時周期循環發光,定時間隔為定時間隔為2 s,即亮即亮2 s,滅滅2 s。 當白天到來時,航標燈應熄滅,停止定時器工作。當白天到來時,航標燈應熄滅,停止定時器工作。 采用定時加計數的方法定時采用定時加計數的方法定時2 s。 如圖如圖9-5所示的光敏三極管來區分所示的光敏三極管來區分白天與黑夜。白天與黑夜。 黑夜時黑夜時,無光照,無光照,T1和和T2均截止,均截止,使使INT
10、00,發出中斷請求。,發出中斷請求。CPU進進入外部中斷處理程序入外部中斷處理程序,啟動定時器工啟動定時器工作,利用定時器中斷控制燈定時閃閃作,利用定時器中斷控制燈定時閃閃發光。用軟件查詢發光。用軟件查詢INT0引腳,只要引腳,只要INT00,定時器便繼續工作。定時器便繼續工作。 白天時白天時,日光使日光使T1導通導通,T2輸出低電輸出低電平平,INT01,立即關閉定時器,結束立即關閉定時器,結束外部中斷處理并返回到主程序。外部中斷處理并返回到主程序。9.2 9.2 數據采集及簡單控制程序數據采集及簡單控制程序LOGO設設: T0定時和定時和R7 軟件計數可以延時軟件計數可以延時2 s。 R7
11、 軟件計數為軟件計數為40次;次;T0定時定時50ms,模式模式1,計數初值為計數初值為:212501000123CB0H主程序:主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP WBINT ;外部中斷;外部中斷0入口地址入口地址 ORG 000BH AJMP T0INT ;T0中斷入口地址中斷入口地址 ORG 0100H MAIN: MOV SP,#30H ;設置堆棧指針;設置堆棧指針 CLR P1.7 ;設燈的初態為;設燈的初態為“滅滅” CLR IT0 ;外部中斷;外部中斷0為電平觸發方式為電平觸發方式 CLR PX0 ;外部中斷;外部中斷0為低優先級為低優
12、先級 SETB EX0 ;允許外部中斷;允許外部中斷0中斷中斷 SETB EA ;CPU允許中斷允許中斷 HERE: AJMP HERE ;等待外部中斷請求;等待外部中斷請求9.2.2 9.2.2 航標燈控制程序航標燈控制程序LOGO外部中斷外部中斷0中斷服務程序中斷服務程序(由由0003H轉來轉來): WBINT:MOV TMOD,#01H ;T0定時,模式定時,模式1 MOV TL0,#0B0H ;T0計數初值計數初值 MOV TH0,#3CH SETB PT0 ;設;設T0為高優先級中斷為高優先級中斷 SETB TR0 ;啟動;啟動T0 SETB ET0 ;T0開中斷開中斷 MOV R7
13、, #40 ;軟件計數值;軟件計數值 HERE1:JNB P3.2,HERE1 ;查詢;查詢INT0,為低為低(黑夜黑夜),等待等待T0中斷中斷 CLR ET0 ;為高;為高(白天白天),禁止,禁止T0中斷中斷 CLR TR0 ;關;關T0 CLR P1.7 ;熄燈;熄燈 RETI ;返回主程序;返回主程序定時器定時器0中斷服務程序中斷服務程序(由由000BH轉來轉來): T0INT:MOV TL0,#0B0H ;重賦;重賦T0初值初值 MOV TH0,#3CH DJNZ R7,EXIT ;軟件計數為;軟件計數為0嗎嗎? MOV R7, #40H ;計數已到,重賦初值;計數已到,重賦初值 CP
14、L P1.7 ;輸出取反控制燈;輸出取反控制燈“亮亮”或或“滅滅” EXIT:RETI ;中斷返回;中斷返回 END9.2.2 9.2.2 航標燈控制程序航標燈控制程序LOGO9.2.3 水位控制程序水位控制程序1. 水位控制原理水位控制原理u 單片機控制電機轉動單片機控制電機轉動,電機帶動水泵供水供水電機帶動水泵供水供水時時,水位上升水位上升,當當達到上限時達到上限時,由于水導電,由于水導電,B、C棒連通棒連通+5V。b和和c兩端均為兩端均為”1”.這時,應這時,應停止電機工作,不再供水。停止電機工作,不再供水。l 當水位當水位降到下限時降到下限時,B、C棒都不能與棒棒都不能與棒導通,導通,
15、b和和c兩端均為兩端均為”0”。啟動電機供水啟動電機供水.l 當水位處于當水位處于上下限之間上下限之間,棒與棒與A棒導通棒導通.棒不能與棒導通,棒不能與棒導通,b端為端為”1”,c端為端為“0”狀態。應繼續維持原有的工作狀態。狀態。應繼續維持原有的工作狀態。u 圖圖9-6中虛線表示允許水位變化的上、下限。水塔安裝固定的中虛線表示允許水位變化的上、下限。水塔安裝固定的3根金屬棒。其中,根金屬棒。其中,A棒處于下限水位,棒處于下限水位,A棒接棒接+5V電源,電源,C棒處于上限水位,棒處于上限水位,B棒在上、下限水位之間。棒在上、下限水位之間。B棒、棒、C棒各通過一個電阻與地相連。棒各通過一個電阻與
16、地相連。9.2 9.2 數據采集及簡單控制程序數據采集及簡單控制程序LOGO2. 水位控制電路水位控制電路圖圖9-7 水塔水位控制水塔水位控制電路電路9.2.3 9.2.3 水位控制程序水位控制程序LOGO3. 信號輸入與輸出信號輸入與輸出 水位信號由水位信號由P1.0和和P1.1輸入輸入 由由P1.2端輸出,去控制電機。端輸出,去控制電機。 由由P1.3輸出報警信號,驅動一輸出報警信號,驅動一 只發光二極管進行光報警。只發光二極管進行光報警。C (P1.1)B (P1.0)操操 作作00電機運轉電機運轉01維持原狀維持原狀10故障報警故障報警11電機停轉電機停轉9.2.3 9.2.3 水位控
17、制程序水位控制程序LOGO4. 控制程序控制程序主程序清單:主程序清單: ORG 0030H LOOP: ORL R1,#03H ;為檢查水位狀態作準備;為檢查水位狀態作準備 MOV A,P1 JNB ACC.0,ONE ;P1.0=0則轉則轉 JB ACC.1, TWO ;P1.1=1則轉則轉 BACK: ACALL D10S ;延時;延時10 s AJMP LOOP ONE: JNB ACC.1,THREE ;P1.1=0則轉則轉 CLR 93H ;0P1.3,啟動報警裝置,啟動報警裝置 SETB 92H ;1P1.2,停止電機工作,停止電機工作 FOUR: SJMP FOUR THREE
18、:CLR 92H ;啟動電機;啟動電機 AJMP BACK TWO: SETB 92H ;停止電機工作;停止電機工作 AJMP BACK延時子程序延時子程序D10 S(延時延時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 9.2.3 9.2.3 水位控制程序水位控制程序LOGO9.2.4 蜂鳴音報警子程序蜂鳴音報警子程序 壓電式蜂鳴器約需壓電式蜂鳴器約需10 mA的的驅動電流驅動電流 當當
19、P1.0輸出高電平輸出高電平1時,壓時,壓電蜂鳴器兩端獲得約電蜂鳴器兩端獲得約+5V電壓電壓而鳴叫;而鳴叫; 當當P1.0輸出低電平輸出低電平0時,壓時,壓電蜂鳴器兩引線間的直流電電蜂鳴器兩引線間的直流電壓降至接近于壓降至接近于0 V,蜂鳴器停,蜂鳴器停止發聲。止發聲。9.2 9.2 數據采集及簡單控制程序數據采集及簡單控制程序LOGO連續鳴音連續鳴音30 ms的控制子程序清單:的控制子程序清單: SND:SETB P1.0 ;P1.0輸出高電平,啟動蜂鳴器鳴叫輸出高電平,啟動蜂鳴器鳴叫 MOV R7,#1EH ;延時;延時30 ms DL:MOV R6, #0F9H DL1:DJNZ R6,
20、DL1 ;小循環延時;小循環延時1 ms DJNZ R7,DL CLR P1.0 ;P1.0輸出低電平,停止蜂鳴器鳴叫輸出低電平,停止蜂鳴器鳴叫 RET9.2.4 9.2.4 蜂鳴音報警子程序蜂鳴音報警子程序本節結束本節結束LOGO9.3 9.3 數據處理程序數據處理程序采樣到的數據要經過采樣到的數據要經過必要的處理,才能用必要的處理,才能用于控制和顯示。一般于控制和顯示。一般單片機小系統的系統單片機小系統的系統軟件應按圖軟件應按圖9-11所示所示流程處理。流程處理。 LOGO 9.3.1 排序程序排序程序【例例9-4】將片內將片內RAM 50H59H中的數據按從小到大中的數據按從小到大的順序
21、排序。的順序排序。 解解: 這是一個排序問題。這是一個排序問題。l 按從小到大排列稱升序排列,反之稱降序排列。按從小到大排列稱升序排列,反之稱降序排列。l 根據題意,排序程序在執行時,取前數與后數比較:根據題意,排序程序在執行時,取前數與后數比較: p 如果前數小于后數,則繼續順序比較下去;如果前數小于后數,則繼續順序比較下去;p 如果前數大于后數,則前數和后數交換后再繼續比較下去。如果前數大于后數,則前數和后數交換后再繼續比較下去。l 第一次循環將在最后單元中得到最大的數第一次循環將在最后單元中得到最大的數(冒泡法冒泡法)。l 得到所有數據的升序排列需要經過多重循環。得到所有數據的升序排列需
22、要經過多重循環。9.3 9.3 數據處理程序數據處理程序LOGO程序清單如下:程序清單如下: CLR 00H ;清除交換標志位;清除交換標志位 QUE:MOV R3,#9H ;10個數據循環次數個數據循環次數 MOV R0,#50H ;數據存放區首址;數據存放區首址 MOV A,R0 ;取前數;取前數 L2:INC R0 MOV R2,A ;保存前數;保存前數 SUBB A,R0 ;前數減后數;前數減后數 MOV A,R2 ;恢復前數;恢復前數 JC L1 ;順序則繼續比較;順序則繼續比較 SETB 00H ;逆序則建立標志位;逆序則建立標志位 XCH A,R0 ;前數與后數交換;前數與后數交
23、換 DEC R0 XCH A,R0 INC R0 ;仍指向后數單元;仍指向后數單元 L1:MOV A, R0 DJNZ R3,L2 ;依次重復比較;依次重復比較 JB 00H,QUE ;交換后重新比較;交換后重新比較 RET 9.3.1 9.3.1 排序程序排序程序LOGO9.3.2 數字濾波程序數字濾波程序u 前向通道中,必須消除被測信號中的噪音和干擾。前向通道中,必須消除被測信號中的噪音和干擾。u 噪音有兩大類:噪音有兩大類: l 一類為周期性的。典型為一類為周期性的。典型為50 Hz的工頻干擾。采用硬件濾的工頻干擾。采用硬件濾波電路能有效地消除其影響。波電路能有效地消除其影響。l 另一類
24、為不規則隨機性的,可以用數字濾波方法予以削弱另一類為不規則隨機性的,可以用數字濾波方法予以削弱或濾除?;驗V除。u 數字濾波,就是通過程序計算或判斷來減少干擾在有用數字濾波,就是通過程序計算或判斷來減少干擾在有用信號中的比重,實際是一種信號中的比重,實際是一種程序濾波程序濾波。u 經常采用的經常采用的中值法、去極值法中值法、去極值法可對采樣信號進行數字濾可對采樣信號進行數字濾波,以消除常態干擾。波,以消除常態干擾。9.3 9.3 數據處理程序數據處理程序LOGOu 中值濾波是對某一參數連續采樣中值濾波是對某一參數連續采樣n次次(n一般取奇數一般取奇數),然后,然后把把n次的采樣值從小到大或從大到
25、小排列,再取中間值作為本次的采樣值從小到大或從大到小排列,再取中間值作為本次采樣值。次采樣值。u 該算法的采樣次數常為該算法的采樣次數常為3次或次或5次。對于變化很慢的參數,次。對于變化很慢的參數,有時也可增加次數,例如有時也可增加次數,例如15次。次。 u 中值濾波對于去掉由于偶然因素引起的波動或采樣器不穩中值濾波對于去掉由于偶然因素引起的波動或采樣器不穩定而造成的脈動干擾比較有效。變量變化比較緩慢定而造成的脈動干擾比較有效。變量變化比較緩慢,效果比較好。效果比較好。對于變化較為劇烈的參數,此法不宜。對于變化較為劇烈的參數,此法不宜。現以現以3次采樣為例。次采樣為例。 3次采樣值分別存放在次
26、采樣值分別存放在R2、R3和和R4中,程序運行之后,中,程序運行之后,將將3個數據從小到大順序排列,仍然存放在個數據從小到大順序排列,仍然存放在R2、R3和和R4中,中,中值在中值在R3中。中。 9.3.2 9.3.2 數字濾波程數字濾波程序序LOGO程序清單:程序清單: FILT2: MOV A,R2 ;R2R3嗎嗎? CLR C SUBB A,R3 JC FILT21 MOV A,R2 ;R2R3時,交換時,交換R2和和R3 XCH A,R3 MOV R2,A FILT21:MOV A,R3 ;R3R4嗎嗎? CLR C SUBB A,R4 JC FILT22 ;R3R4時,排序結束時,排
27、序結束 MOV A,R4 ;R3R4時,交換時,交換R3和和R4 XCH A,R3 XCH A,R4 ;R3R2嗎嗎? CLR C SUBB A,R2 JNC FILT22 ;R3R2時,排序結束時,排序結束 MOV A,R2 ;R3R2時,以時,以R2為中值為中值 MOV R3,A ;中值在;中值在R3中中 FILT22:RET9.3.2 9.3.2 數字濾波程數字濾波程序序LOGO9.3.3 標度變換標度變換(工程量變換工程量變換)u 生產現場的各種參數都有不同的數值和量綱,例如,溫生產現場的各種參數都有不同的數值和量綱,例如,溫度單位用度單位用,壓力用,壓力用Pa(帕帕),流量用,流量用
28、ms。u 這些參數經轉換后,統一變為這些參數經轉換后,統一變為0個數碼,例個數碼,例如,如,8位轉換器輸出的數碼為位轉換器輸出的數碼為0255。u 這些數碼雖然代表參數值的大小,但是并不表示帶有量這些數碼雖然代表參數值的大小,但是并不表示帶有量綱的參數值,必須將其轉換成有量綱的數值,才能進行顯綱的參數值,必須將其轉換成有量綱的數值,才能進行顯示和打印。這種轉換稱為示和打印。這種轉換稱為標度變換標度變換或或工程量轉換工程量轉換。9.3 9.3 數據處理程序數據處理程序LOGO前提條件是參數值與轉換結果前提條件是參數值與轉換結果(采樣值采樣值)之間應呈線性關系。之間應呈線性關系。l 當輸入信號為當
29、輸入信號為0(即參數值起點值即參數值起點值),輸出值不為,輸出值不為0時,標度變換公式為:時,標度變換公式為:式中:式中: 參數量程起點值,一次測量儀表的下限;參數量程起點值,一次測量儀表的下限; 參數量程終點值,一次測量儀表的上限;參數量程終點值,一次測量儀表的上限; 參數測量值,實際測量值參數測量值,實際測量值(工程量工程量); N量程起點對應的量程起點對應的A/D轉換后的值,儀表下限所對應的數字量;轉換后的值,儀表下限所對應的數字量; N量程終點對應的值,儀表上限所對應的數字量;量程終點對應的值,儀表上限所對應的數字量; N測量值對應的測量值對應的A/D值值(采樣值采樣值),是經數字濾波
30、后確定的采樣值。,是經數字濾波后確定的采樣值。 其中,、和對一個檢測系統來說是常數。其中,、和對一個檢測系統來說是常數。9.3.3 9.3.3 標度變換標度變換( (工程量變換工程量變換) )LOGOl 在參數量程起點在參數量程起點(輸入信號為輸入信號為0),值為,值為0(即即)。標度變換:。標度變換:l 很多測量系統中,參數量程起點值很多測量系統中,參數量程起點值(即儀表下限值即儀表下限值)00,對應的,對應的0??蛇M一步簡化為:可進一步簡化為:上述上述3個公式即為在不同情況下,線性刻度儀表測量參數的標度變換公式。個公式即為在不同情況下,線性刻度儀表測量參數的標度變換公式。9.3.3 9.3
31、.3 標度變換標度變換( (工程量變換工程量變換) )LOGO9.3.3 9.3.3 標度變換標度變換( (工程量變換工程量變換) )例如例如:某測量點的溫度量程為某測量點的溫度量程為200400, 采用采用8位位A/D 轉換器。轉換器。那么,那么,0200 , 400 , 00, 255,采樣值為。其標度變換公式為:采樣值為。其標度變換公式為: 200 200 只要把這一算式編成程序,將轉只要把這一算式編成程序,將轉換后經數字濾波處理后的值換后經數字濾波處理后的值代入,即可代入,即可計算出溫度的真實值。計算出溫度的真實值。LOGO如果傳感器輸出特性是非線性的,可采用如果傳感器輸出特性是非線性
32、的,可采用查表法查表法進行標度變換。進行標度變換。例:用熱敏電阻組成的惠斯頓電橋測溫電路。例:用熱敏電阻組成的惠斯頓電橋測溫電路。 R1是熱敏電阻是熱敏電阻,當溫度當溫度T0時時,R1取值取值R1(T0) 電橋達到平衡。平衡條件為:電橋達到平衡。平衡條件為: R1(T0)24此時,電橋輸出電壓此時,電橋輸出電壓出出 V。 若溫度改變若溫度改變,則則R1的阻值改變的阻值改變,電橋平衡遭到破壞電橋平衡遭到破壞,產生輸出電壓產生輸出電壓出出。通過測量電壓。通過測量電壓出出值就能推得值就能推得R1的阻值變化的阻值變化,測得環境溫度的變化。測得環境溫度的變化。9.3.3 9.3.3 標度變換標度變換(
33、(工程量變換工程量變換) )本節結束本節結束LOGO9.4 9.4 代碼轉換程序代碼轉換程序【例例9-5】單字節二翻十子程序。單字節二翻十子程序。 將將00HFFH內二進制數轉換為內二進制數轉換為BCD數數(0256)。 解:解: 入口:入口: (A)=二進制數。二進制數。 出口出口:百、十和個位分別存入百、十和個位分別存入R0指出的兩個指出的兩個RAM單元。單元。程序清單:程序清單:BINBCD:MOV B,#100 DIV AB ;(A)=百位數百位數 MOV R0 ,A ;百位;百位BCD存入存入RAM INC R0 MOV A,#10 XCH A,B DIV AB ;(A)=十位數,十
34、位數,(B)=個位數個位數 SWAP A ADD A,B ;(A)=壓縮壓縮BCD碼碼(十位個位十位個位) MOV R0 ,A ;存入;存入RAM RETLOGO【例例9-6】單字節十翻二子程序。單字節十翻二子程序。 將將2位位BCD數數(壓縮為壓縮為1字節字節)轉換成二進制數。轉換成二進制數。解:解: 將累加器將累加器A中的壓縮中的壓縮BCD碼轉換成二進制數,結果仍在碼轉換成二進制數,結果仍在A中。中。 方法是將方法是將A中的高位乘以中的高位乘以10,再加上,再加上A的低位字節。的低位字節。DTOB:MOV R2,A ;暫存;暫存 ANL A,#0F0H ;屏蔽低;屏蔽低4位位 SWAP A
35、 MOV B,#10 MUL AB ;高位乘以;高位乘以10 MOV R3,A ;暫存;暫存 MOV A,R2 ;??;取BCD數數 ANL A,#0FH ;??;取BCD數個位數個位 ADD A,R3 ;得轉換結果;得轉換結果 RET9.4 9.4 代碼轉換程序代碼轉換程序LOGO【例例9-7】一位十六進制數轉換成一位十六進制數轉換成ASCII碼碼。 解:解: 本程序中,由本程序中,由R0指出十六進制數存放單元,指出十六進制數存放單元, 經轉換后結果仍存于原處。經轉換后結果仍存于原處。HEXASC1:MOV A,R0 ;取十六進制數;取十六進制數 ANL A,#0FH ;屏蔽高;屏蔽高4位位 A
36、DD A, #03H ;修正偏移量;修正偏移量 MOVC A, A+PC ;查表,取;查表,取ASCII代碼代碼 XCH A,R0 ;存儲;存儲 INC R0 ;更新地址;更新地址 RET ASCTAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H9.4 9.4 代碼轉換程序代碼轉換程序LOGO【例例9-8】十六進制數的十六進制數的ASCII代碼轉換成二進制數代碼轉換成二進制數。 解:解: 對于小于或等于對于小于或等于9的數的的數的ASCII代碼,減去代碼,減去30H得得4位二進制數;位二進制
37、數; 對于大于對于大于 9的十六進制數的的十六進制數的ASCII代碼,減去代碼,減去37H得得4位二進制數。則位二進制數。則正好是正好是0AH0FH的結果。的結果。 程序以程序以R2作為入口和出口。程序清單如下:作為入口和出口。程序清單如下:ASCHEX:MOV A,R2 ;取操作數;取操作數 CLR C SUBB A,#30H ;09的轉換的轉換 MOV R2,A ;暫存結果;暫存結果 SUBB A,#0AH ;結果是否;結果是否9? JC SBIO ;9則轉換正確,返回則轉換正確,返回 XCH A,R2 SUBB A,#37H ;9,則減,則減37HSBIO: MOV R2,A ;存放結果
38、;存放結果 RET9.4 9.4 代碼轉換程序代碼轉換程序本節結束本節結束LOGO9.5 9.5 軟件抗干擾軟件抗干擾l 干擾可以沿各種線路侵入,也可以以場的形式干擾可以沿各種線路侵入,也可以以場的形式( (高電壓、大電流、電火高電壓、大電流、電火花等花等) )從空間侵入微機系統;電網中各種浪涌電壓入侵,系統的接地裝置不從空間侵入微機系統;電網中各種浪涌電壓入侵,系統的接地裝置不良或不合理等,也是引入干擾的重要途徑。良或不合理等,也是引入干擾的重要途徑。l 干擾對微機系統的影響有干擾對微機系統的影響有3 3個部位:個部位: 前向通道、前向通道、CPUCPU內核及后向通道。內核及后向通道。對前向
39、通道的干擾會使輸入的模擬信號失真,數字信號出錯。對這一部位對前向通道的干擾會使輸入的模擬信號失真,數字信號出錯。對這一部位的抗干擾,硬件方面可采用光電隔離、硬件濾波電路等措施,在軟件方面的抗干擾,硬件方面可采用光電隔離、硬件濾波電路等措施,在軟件方面可采用前面講的數字濾波方法??刹捎们懊嬷v的數字濾波方法。l 干擾可使微機系統內核三總線上的數字信號錯亂,從而引發一系列無法干擾可使微機系統內核三總線上的數字信號錯亂,從而引發一系列無法預料的后果,形成一系列錯誤。預料的后果,形成一系列錯誤。CPUCPU得到錯誤的地址信號后,引起程序計數得到錯誤的地址信號后,引起程序計數器出錯,使程序運行離開正常軌道
40、,導致程序失控、飛跑或死循環,進而器出錯,使程序運行離開正常軌道,導致程序失控、飛跑或死循環,進而使后向通道的輸出信號混亂,不能正常反映微機系統的真實輸出,從而導使后向通道的輸出信號混亂,不能正常反映微機系統的真實輸出,從而導致一系列嚴重后果。致一系列嚴重后果。l 本節主要討論軟件抗干擾的問題,關于硬件的抗干擾措施這里不再論述。本節主要討論軟件抗干擾的問題,關于硬件的抗干擾措施這里不再論述。LOGO9.5.1 軟件陷阱技術軟件陷阱技術l 當當CPU受到干擾后,會將一些操作數當作指令碼來執行,造成程序執受到干擾后,會將一些操作數當作指令碼來執行,造成程序執行混亂。這時,首先要盡快將程序納入正軌行
41、混亂。這時,首先要盡快將程序納入正軌(執行真正的指令序列執行真正的指令序列)。l l 真正的軟件陷阱由真正的軟件陷阱由3條指令構成:條指令構成: NOP NOP LJMP ERRERR:一段專門對程序出錯進行處理的程序,以使程序:一段專門對程序出錯進行處理的程序,以使程序 按既定目標執行。按既定目標執行。9.5 9.5 軟件抗干擾軟件抗干擾LOGO 在未使用的中斷在未使用的中斷向量區設置陷阱,向量區設置陷阱,就能及時捕捉到錯就能及時捕捉到錯誤中斷。誤中斷。設:使用了設:使用了3個中個中斷:斷:INT0、T0和和T1, 可以按如左方式可以按如左方式來設置中斷向量區。來設置中斷向量區。1.未使用的
42、中斷向量區未使用的中斷向量區 ORG 0000H START:LJMP MAIN ;引向主程序入口;引向主程序入口 LJMP PGINT0 ;INT0中斷正常入口中斷正常入口 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP PGT0 ;T0中斷正常入口中斷正常入口 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP ERR ;未使用;未使用INT1,設陷阱,設陷阱 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP PGT1 ;T1中斷正常入口中斷正常入口 NOP ;冗余指令;冗余指令 NOP LJMP E
43、RR ;陷阱;陷阱 LJMP ERR ;未用串口中斷,設陷阱;未用串口中斷,設陷阱 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱9.5.1 9.5.1 軟件陷阱技術軟件陷阱技術LOGOl 未編程未編程ROM,都維持都維持(0FFH),是一條單字節指令是一條單字節指令“MOV R7,A”,l 只要每隔一段設置一個陷阱,就能捕捉到彈飛的程序。只要每隔一段設置一個陷阱,就能捕捉到彈飛的程序。 軟件陷阱要指向出錯處理過程軟件陷阱要指向出錯處理過程ERR才穩妥,才穩妥, ERR可安排在可安排在0030H開始的地方。開始的地方。l 可以用可以用“00 00 20 00 30” 5字
44、節作為陷阱來填充字節作為陷阱來填充ROM中的未使中的未使用用 空間。即指令:空間。即指令: NOP / NOP / LJMP 0030H, 或隔一段設置一個陷阱或隔一段設置一個陷阱“02 00 30”,即指令:,即指令: LJMP 0030H, 其它單元保持其它單元保持0FFH不變。不變。9.5.1 9.5.1 軟件陷阱技術軟件陷阱技術LOGO 表格有表格有兩類兩類:一類是數據表格,供:一類是數據表格,供“MOVC A,A+PC”指指令或令或“MOVC A,A+DPTR”指令使用;指令使用; 另一類是散轉表格,供另一類是散轉表格,供“JMP A+DPTR”指令使用,其內容指令使用,其內容為一系
45、列的為一系列的3字節指令字節指令LJMP或兩字節指令或兩字節指令AJMP。 只能在表格的最后安排只能在表格的最后安排5字節陷阱字節陷阱 (NOP / NOP / LJMP ERR)。9.5.1 9.5.1 軟件陷阱技術軟件陷阱技術LOGO 程序區的指令串中間常有一些斷裂點,正常執行程序到不會繼續往下執程序區的指令串中間常有一些斷裂點,正常執行程序到不會繼續往下執行了,這類指令有行了,這類指令有LJMP、SJMP、AJMP、RET和和RETI。在這種地方安排。在這種地方安排陷阱后,就能有效地捕獲到它,而又不會影響正常執行的程序流程。陷阱后,就能有效地捕獲到它,而又不會影響正常執行的程序流程。例如
46、例如:根據:根據A中內容的正、負、零情況進行三分支的程序中,軟件陷阱的中內容的正、負、零情況進行三分支的程序中,軟件陷阱的安置方式如下:安置方式如下: JNZ XYZ ;零處理;零處理 AJMP ABC ;斷裂點;斷裂點 NOP NOP LJMP ERR ;陷阱;陷阱 XYZ: JB ACC.7,VUW ;正處理;正處理 AJMP ABC ;斷裂點;斷裂點 NOP NOP LJMP ERR ;陷阱;陷阱 VUW: ;負處理;負處理 ABC: MOV A,R0 ;取結果;取結果 RET ;斷裂點;斷裂點 NOP NOP LJMP ERR ;陷阱;陷阱9.5.1 9.5.1 軟件陷阱技術軟件陷阱技
47、術LOGO9.5.2 軟件看門狗軟件看門狗程序運行監視系統程序運行監視系統 (WATCHDOG)特性:特性: uu 本身能獨立工作,基本上不依賴于本身能獨立工作,基本上不依賴于CPU; uu CPU在一個固定的時間間隔內和該系統打一次交道在一個固定的時間間隔內和該系統打一次交道 (喂一次狗喂一次狗),以表明系統目前尚正常;,以表明系統目前尚正常; uu 當當CPU陷入死循環后,能及時發覺并使系統復位。陷入死循環后,能及時發覺并使系統復位。9.5 9.5 軟件抗干擾軟件抗干擾LOGO 在在8096系列單片機和增強型系列單片機和增強型89C51系列單片機芯片內已經系列單片機芯片內已經內嵌了程序運行
48、監視系統,使用起來很方便。內嵌了程序運行監視系統,使用起來很方便。 在普通型在普通型51系列單片機中,必須由用戶自己建立。如果要系列單片機中,必須由用戶自己建立。如果要實現實現WATCHDOG的真正目標,該系統還必須包括完全獨立于的真正目標,該系統還必須包括完全獨立于CPU之外的硬件電路,有時為了簡化硬件電路,也可以采用之外的硬件電路,有時為了簡化硬件電路,也可以采用純軟件的純軟件的WATCHDOG系統。系統。軟件軟件WATCHDOG是一個比較好是一個比較好的補救措施,只是其可靠性稍差一些。的補救措施,只是其可靠性稍差一些。9.5.2 9.5.2 軟件看門狗軟件看門狗LOGO純軟件的純軟件的W
49、ATCHDOG系統系統l 當系統陷入死循環后,只有比它更高級的中斷才能奪走對當系統陷入死循環后,只有比它更高級的中斷才能奪走對CPU的控制。為此,用一個定時器來作的控制。為此,用一個定時器來作WATCHDOG,將它的溢出中,將它的溢出中斷設定為高優先級中斷,其他中斷均設為低優先級中斷。斷設定為高優先級中斷,其他中斷均設為低優先級中斷。l 例如:用例如:用T0,作定時約為,作定時約為16 ms,在初始化時建,在初始化時建WATCHDOG: MOV TMOD, #01H ;設置;設置T0為為16位定時器位定時器 SETB ET0 ;允許;允許T0中斷中斷 SETB PT0 ;設置;設置T0為高級中
50、斷為高級中斷 MOV TH0, #0E0H ;定時約;定時約16 ms(6 MHz晶振晶振) SETB TR0 ;啟動;啟動T0 SETB EA ;開中斷;開中斷9.5.2 9.5.2 軟件看門狗軟件看門狗LOGOl WATCHDOG啟動以后,工作程序必須經常啟動以后,工作程序必須經?!拔顾顾?,執行一,執行一條條 “MOV TH0,#0E0H”指令,且每兩次間隔不大于指令,且每兩次間隔不大于16 ms (如可如可以每以每10 ms“喂喂”一次一次)。l 當程序陷入死循環后,當程序陷入死循環后,16 ms之內即可引起一次之內即可引起一次T0溢出,產生溢出,產生高優先級中斷,從而跳出死循環。高
51、優先級中斷,從而跳出死循環。 T0中斷直接轉向出錯處理程序中斷直接轉向出錯處理程序,在中斷向量區放置一條在中斷向量區放置一條“LJMP ERR”指令即可。由出錯處理程序完成善后,并用軟件方法使系統指令即可。由出錯處理程序完成善后,并用軟件方法使系統復位。復位。9.5.2 9.5.2 軟件看門狗軟件看門狗LOGO完整的看門狗程序完整的看門狗程序,它包括模擬主程序,喂狗,它包括模擬主程序,喂狗(DOG)程序和空彈返回程序和空彈返回(TOP)程序。程序。 ORG 0000H AJMP MAIN ORG 000BH LJMP TOP MAIN:MOV SP, #60H MOV PSW,#00H MOV
52、 SCON,#00H MOV IE, #00H MOV IP, #00H ;模擬硬件復位,這部分可根據系統對資源使用情況增減;模擬硬件復位,這部分可根據系統對資源使用情況增減 MOV TMOD,#01H LCALL DOG ;調用;調用DOG程序的時間間隔應小于定時器定時時間程序的時間間隔應小于定時器定時時間 DOG: MOV TH0, #0B1H ;喂狗程序;喂狗程序 MOV TL0, #0E0H SETB TR0 RET TOP: POP ACC ;空彈斷點地址;空彈斷點地址 POP ACC CLR A PUSH ACC ;將返回地址換成;將返回地址換成0000H,以便實現軟件復位,以便實
53、現軟件復位 PUSH ACC RETI9.5.2 9.5.2 軟件看門狗軟件看門狗LOGO9.5.3 硬件(專用芯片)看門狗硬件(專用芯片)看門狗u 有的單片機片內嵌入監視定時器有的單片機片內嵌入監視定時器T3(看門狗),當(看門狗),當T3溢出時,溢出時,使使MCU系統復位。設計程序時,必須在監視間隔內執行對監視定時系統復位。設計程序時,必須在監視間隔內執行對監視定時器再裝入的指令,即調看門狗器再裝入的指令,即調看門狗WATCHDOG子程序。如果程序運行時子程序。如果程序運行時出了問題,沒能在監視間隔內執行對監視定時器裝入的指令,那么監出了問題,沒能在監視間隔內執行對監視定時器裝入的指令,那
54、么監視定時器視定時器T3就會溢出使系統復位。就會溢出使系統復位。u 看門狗電路專用芯片本身是一個帶清除端和溢出觸發器的定時看門狗電路專用芯片本身是一個帶清除端和溢出觸發器的定時器。如果不清除它,它就以固定頻率發出溢出觸發脈沖。實際使用中,器。如果不清除它,它就以固定頻率發出溢出觸發脈沖。實際使用中,把觸發輸出引入到把觸發輸出引入到MCU的復位端,使用的復位端,使用MCU的一個的一個I/O口線控制它的口線控制它的清除端。清除端。u 看門狗的監控思路是看門狗的監控思路是: MCU正常運行時,軟件被設計成定時清正常運行時,軟件被設計成定時清除看門狗定時器;而一旦除看門狗定時器;而一旦MCU死機或程序跑飛,這時死機或程序跑飛,這時MCU不再發出不再發出清除脈沖,看門狗定時器溢出,則自動復位清除脈沖,看門狗定時器溢出,則自動復位MCU。u 看門狗的設計一般采用硬件和軟件兩種方式,這里我們主要介看門狗的設計一般采用硬件和軟件兩種方式,這里我們主要介紹硬件看門狗的設計方法。紹硬件看門狗的設計方法。9.5 9.5 軟件抗干擾軟件抗干擾LOGO型號型號復位門限復位門限/V低電平低電平復位復位高電平高電平復位復位看門狗看門狗周期周期/s手動手動復位復位功能功能E2PROM容量容量接口接口類型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學工作會議主持詞開場白范文(21篇)
- 區塊鏈技術入門培訓助力職場晉升
- 2025至2031年中國復合化學熱管鍋爐行業投資前景及策略咨詢研究報告
- 《課間十分鐘》教學設計
- 微創治療踇外翻
- 以數據為核心重塑商業環境下的健康管理與決策流程研究報告
- 甲狀腺疾病的治療與護理
- 2025至2031年中國可轉位多葉光柵行業投資前景及策略咨詢研究報告
- 2025至2031年中國壓銷體總成行業投資前景及策略咨詢研究報告
- 廣東省潮州市本年度(2025)小學一年級數學部編版隨堂測試(下學期)試卷及答案
- T-BSRS 128-2024 核醫學放射性廢液快速處理技術要求
- 2025年鐵路小型養路機械市場分析現狀
- 2024內蒙古能源集團校園招聘394人筆試參考題庫附帶答案詳解
- 網絡安全和保密意識教育
- 《橋梁健康監測》課件
- 企業安全生產“一企一冊”“一崗一冊”制度簡介
- 耳鼻喉科學第二十三章耳部疾病講解
- 2024年天津市高考物理試題含答案解析
- 未來學校建筑的現代設計思考與創新
- 一般擔保合同范例
- 護理不良事件:管路滑脫
評論
0/150
提交評論