常用控制程序設(shè)計(同名243)課件_第1頁
常用控制程序設(shè)計(同名243)課件_第2頁
常用控制程序設(shè)計(同名243)課件_第3頁
常用控制程序設(shè)計(同名243)課件_第4頁
常用控制程序設(shè)計(同名243)課件_第5頁
已閱讀5頁,還剩343頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第三章常用控制程序設(shè)計3.1判斷程序設(shè)計3.2巡回檢測程序設(shè)計3.3數(shù)字濾波程序設(shè)計3.4標度變換程序設(shè)計3.5上下限報警處理程序設(shè)計3.6LED數(shù)碼管顯示程序設(shè)計3.7定時程序設(shè)計3.8鍵盤控制程序設(shè)計3.9抗干擾技術(shù)3.10電機控制程序設(shè)計3.11步進電機控制第三章常用控制程序設(shè)計3.1判斷程序設(shè)計3.1判斷程序設(shè)計3.1.1算術(shù)判斷程序3.1.2邏輯判斷程序3.1.3標志判斷程序返回本章首頁3.1判斷程序設(shè)計3.1.1算術(shù)判斷程序返回本章判斷程序就是分支執(zhí)行程序。程序在執(zhí)行時,首先判定給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)再執(zhí)行相應(yīng)的操作。例如:在轉(zhuǎn)速控制系統(tǒng)中,電機的恒速運轉(zhuǎn)一般是通過控制輸入電壓來實現(xiàn)的,首先檢測出電機的實際轉(zhuǎn)速,再比較電機的實際轉(zhuǎn)速和給定轉(zhuǎn)速,如果電機的轉(zhuǎn)速低于給定轉(zhuǎn)速,就需要增加輸入電壓;如果電機的轉(zhuǎn)速高于給定轉(zhuǎn)速,就需要降低輸入電壓。上述功能的執(zhí)行過程如圖3-1所示。判斷程序就是分支執(zhí)行程序。程序在執(zhí)行時,首先判定給定的條件是圖3-1判斷程序框圖檢測電機轉(zhuǎn)速是否大于給定轉(zhuǎn)速降低輸入電壓提高輸入電壓是否圖3-1判斷程序框圖檢測電機轉(zhuǎn)速是否大于給定轉(zhuǎn)速降低輸入MCS-51系列的程序狀態(tài)字(PSW)是一個用于存儲程序運行狀態(tài)信息的8位寄存器,其位定義如表3-1所示。其中有些位狀態(tài)是根據(jù)程序運算結(jié)果由硬件自動設(shè)置;而有些位狀態(tài)則是通過軟件設(shè)定的。PSW的位狀態(tài)可通過指令讀出,以實現(xiàn)程序的轉(zhuǎn)移。返回本節(jié)MCS-51系列的程序狀態(tài)字(PSW)是一個用于存儲程序運行3.1.1算術(shù)判斷程序1.兩個8位無符號數(shù)比較2.兩個16位無符號數(shù)比較3.兩個8位有符號數(shù)的比較3.1.1算術(shù)判斷程序1.兩個8位無符號數(shù)比較兩個8位無符號數(shù)比較圖3-28位無符號數(shù)的比較流程框圖兩個8位無符號數(shù)比較圖3-28位無符號數(shù)的比較流程框圖… …

CLR CY ;進位標志清零

MOV A,M ;A←M SUBB A,N ;求M-N JZ EQU ;累加器A=0,則M=N,轉(zhuǎn)EQU JC LESS ;CY=1,有借位,則M<N,轉(zhuǎn)LESSBIG: M>N處理程序 ;無借位,則M>N,執(zhí)行BIG處理程序EQU: M=N處理程序LESS: M<N處理程序 … …8位無符號數(shù)的比較程序清單:…8位無符號數(shù)的比較程序清單:2.兩個16位無符號數(shù)比較圖3-316位無符號數(shù)的比較流程框圖2.兩個16位無符號數(shù)比較圖3-316位無符號數(shù)的比16位無符號數(shù)的比較程序清單:… …

CLR CY ;標志位清零

MOV A,MH ;A←MH

MOV R2,NH ;R2←NH SUBB A,R2 ;高8位比較

JZ HEQU ;高8位相等,轉(zhuǎn)低8位比較

JC LESS ;有借位,轉(zhuǎn)M<N處理程序

AJMP BIG ;無借位,轉(zhuǎn)M>N理程序16位無符號數(shù)的比較程序清單:…HEQU: CLR CY ;標志位清零

MOV A,ML ;A←ML MOV R2,NL ;R2←NL SUBB A,R2 ;低8位比較

JZ EQU ;A=0,則M=N,轉(zhuǎn)EQU JC LESS ;有借位,則M<N,轉(zhuǎn)LESSBIG: M>N處理程序 ;無借位,執(zhí)行M>N理程序EUQ: M=N處理程序LESS: M<N處理程序 … …HEQU: CLR CY ;標志位清零

3.兩個8位有符號數(shù)的比較由于M和N均為有符號數(shù),M和N兩數(shù)在比較時,可能出現(xiàn)以下四種情況:(1)M>0,N>0,即兩數(shù)均為正數(shù)。(2)M>0,N<0,即M為正數(shù),N為負數(shù)。(3)M<0,N>0,即M為負數(shù),N為正數(shù)。(4)M<0,N<0,即兩數(shù)均為負數(shù)。3.兩個8位有符號數(shù)的比較由于M和N均為有符號數(shù),M和圖3-48位有符號數(shù)的比較流程框圖圖3-48位有符號數(shù)的比較流程框圖8位有符號數(shù)比較程序清單:… …

MOV A,M ;A←M MOV R2,N ;R2←N SUBB A,R2 ;M和N比較

JZ EQU ;M和N相等,轉(zhuǎn)相等處理程序

JB PSW.2,FLOW ;判斷是否溢出

JB ACC.7,LESS ;無溢出,且A的最高位為1,則M<N AJMP BIG ;否則,M>NFLOW: JB ACC.7,BIG ;有溢出,且A的最高位為1,則M>NLESS: M<N處理程序 ;否則,M<N,執(zhí)行LESS執(zhí)行程序BIG: M>N處理程序EUQ: M=N處理程序 … …返回本節(jié)8位有符號數(shù)比較程序清單:3.1.2邏輯判斷程序邏輯判斷程序的設(shè)計步驟:(1)讀入數(shù)據(jù)(開關(guān)狀態(tài)或閥門的位置);(2)屏蔽不需要的狀態(tài)位;(3)與所要求的狀態(tài)比較;(4)判斷比較結(jié)果,選擇程序入口。3.1.2邏輯判斷程序邏輯判斷程序的設(shè)計步驟:例3-1圖3-5中A、B、C、D表示4個開關(guān),當四個開關(guān)均閉合時,順序執(zhí)行相應(yīng)的程序,否則,繼續(xù)檢測。邏輯判斷程序流程框圖如圖3-6所示。圖3-5開關(guān)位置檢測圖例3-1圖3-5中A、B、C、D表示4個開關(guān),當四個開關(guān)均圖3-6開關(guān)狀態(tài)檢測流程圖圖3-6開關(guān)狀態(tài)檢測流程圖邏輯判斷程序清單:… …CHECK: MOV A,P1 ;讀入開關(guān)狀態(tài)

ANL A,#55H ;屏蔽無用位

XRL A,#00H ;判斷A、B、C、D是否全部閉合

JNZ CHECK ;A、B、C、D沒全部閉合,繼續(xù)檢測 … ;否則順序執(zhí)行相應(yīng)程序 …返回本節(jié)邏輯判斷程序清單:…返回本節(jié)3.1.3標志判斷程序標志判斷的設(shè)計思想是:根據(jù)某一設(shè)定的標志單元(或標志位)的狀態(tài),決定程序的執(zhí)行方向。電機旋轉(zhuǎn)方向控制程序流程圖如圖3-7所示。圖3-7電機旋轉(zhuǎn)方向控制程序流程圖3.1.3標志判斷程序標志判斷的設(shè)計思想是:根據(jù)某一設(shè)電機旋轉(zhuǎn)方向控制程序清單:FLAG BIT00H ;設(shè)定00H為電機旋轉(zhuǎn)方向控制位 … …

JB FLAGRIGHT ;FLAG=1,轉(zhuǎn)RIGHTLEFT: … ;FLAG=0,順時針旋轉(zhuǎn)控制程序 …RIGHT: … ;逆時針旋轉(zhuǎn)控制程序 …返回本節(jié)電機旋轉(zhuǎn)方向控制程序清單:FLAG BIT00H ;設(shè)3.2巡回檢測程序設(shè)計3.2.1概述3.2.2巡回檢測舉例返回本章首頁3.2巡回檢測程序設(shè)計3.2.1概述返回本章首頁3.2.1概述所謂的巡回檢測就是對生產(chǎn)過程中的各個參數(shù)按照一定的周期進行檢查和測量,檢測的數(shù)據(jù)通過計算機處理后可以進行顯示、打印和報警等操作。巡回檢測程序主要由以下幾個方面構(gòu)成:1.采樣周期T的確定2.采樣開關(guān)通道號的控制3.A/D轉(zhuǎn)換

4.數(shù)據(jù)處理返回本節(jié)3.2.1概述所謂的巡回檢測就是對生產(chǎn)過程中的各個參數(shù)3.2.2巡回檢測舉例1.利用8位A/D轉(zhuǎn)換芯片(ADC0809)2.采用12位A/D轉(zhuǎn)換芯片(AD574A)3.2.2巡回檢測舉例1.利用8位A/D轉(zhuǎn)換芯片(A1.利用8位A/D轉(zhuǎn)換芯片(ADC0809)圖3-8爐溫巡回檢測電路原理圖1.利用8位A/D轉(zhuǎn)換芯片(ADC0809)圖3-8爐系統(tǒng)的硬件電路介紹:(1)測量元件和變送器(2)A/D轉(zhuǎn)換電路(3)二分頻電路系統(tǒng)的硬件電路介紹:(1)測量元件和變送器本程序由系統(tǒng)初始化程序和中斷程序組成。初始化程序完成中斷向量和定時器初值的設(shè)定;中斷程序完成數(shù)據(jù)采樣工作,實現(xiàn)對8個通道的巡回檢測。初始化程序功能:設(shè)置定時器0、外部中斷0和外部中斷1的中斷程序入口;設(shè)置定時器0的工作方式為方式1,定時時間為100ms;設(shè)置計數(shù)單元(30H)初值。初始化程序流程框圖如圖3-9所示。圖3-9初始化程序流程圖本程序由系統(tǒng)初始化程序和中斷程序組成。初始化程序完成中斷向量初始化程序清單:ORG 0000H AJMP START ORG 0003H AJMP SAMPLE ;轉(zhuǎn)采樣中斷程序

ORG 000BH AJMP TIME0 ;轉(zhuǎn)8秒定時中斷程序

ORG 0013H AJMP EOC ;轉(zhuǎn)EOC中斷處理程序START: MOV TMOD,#01H ;置定時器0為工作方式1

MOV TH0,#3CH初始化程序清單:ORG 0000HMOV TL0,#0B0H ;定時器初值設(shè)定

MOV 30H,#00H ;置計數(shù)初值

SETB IT0 ;中斷請求信號為脈沖方式

SETB IT1 ;中斷請求信號為脈沖方式

SETB EX0 ;外部中斷0中斷允許

SETB ET0 ;定時器0中斷允許

SETB EA ;開中斷

SETB TR0 ;啟動定時器HERE: AJMP HERE ;等待中斷MOV TL0,#0B0H ;定時器初值設(shè)定定時器中斷程序流程框圖如圖3-10所示。圖3-10定時器中斷程序流程框圖定時器中斷程序流程框圖如圖3-10所示。圖3-10定時器定時器中斷程序程序清單:TIME0: CLR EA ;關(guān)中斷

INC 30H MOV A,30H XRL A,#50H ;判斷是否到8秒

JZ S_8 ;8秒定時到,轉(zhuǎn)至S_8 AJMP RECOUN ;未到8秒,繼續(xù)計時S_8: SETB P3.2 ;觸發(fā)外部中斷0

NOP CLR P3.2 NOPRECOUN: MOV TH0,#3CH MOV TL0,#0B0H ;設(shè)定定時器初值

SETB EA ;開中斷

RETI ;中斷返回定時器中斷程序程序清單:TIME0: CLR EA ;關(guān)中數(shù)據(jù)采樣程序流程框圖如圖3-11所示。數(shù)據(jù)采樣程序流程框圖如圖3-11所示。數(shù)據(jù)采樣程序程序清單:SAMPLE: SETB 00H ;設(shè)置標志位

MOV DPTR,#0F00H ;設(shè)置通道初值

MOV R6,#08H ;設(shè)置通道數(shù)

MOV R7,#05H ;設(shè)置采樣次數(shù)MOV R0,#40H ;設(shè)置數(shù)據(jù)區(qū)首址TRAN_S: MOVX @DPTR,A ;啟動A/D轉(zhuǎn)換程序流程圖WAIT: JB 00H,WAIT ;標志位為1等待A/D轉(zhuǎn)換完成中斷數(shù)據(jù)采樣程序程序清單:SAMPLE: SETB 00H ;SETB 00H ;置標志位

INC DPTR ;通道號加1

INC R0 INC R0 INC R0 INC R0 INC R0 ;45H為下一通道采樣數(shù)據(jù)存放首址

DJNZ R6,#TRAN_S ;8個通道采樣未完,繼續(xù)采樣

MOV DPTR,#0F00H ;8個通道采樣結(jié)束,重置通道初值

INC R0 ;修改采樣數(shù)據(jù)存放地址

DJNZ R7,TRAN_S ;未完成5次采樣,繼續(xù) … ;數(shù)據(jù)處理程序 ….

RETISETB 00H ;置標志位2.采用12位A/D轉(zhuǎn)換芯片(AD574A)圖3-14AD574A和8031的硬件接口電路圖2.采用12位A/D轉(zhuǎn)換芯片(AD574A)圖3-14圖3-15AD574AA/D轉(zhuǎn)換程序流程框圖圖3-15AD574AA/D轉(zhuǎn)換程序流程框圖D574AA/D轉(zhuǎn)換程序清單:ORG 0000H AJMP START ORG 0003H AJMP SAMPLE ;轉(zhuǎn)至數(shù)據(jù)采樣程序START: MOV DPTR,#0000H ;建立AD574A的地址

MOV R0,#40H ;設(shè)置數(shù)據(jù)存儲初址

SETB EX0 ;允許外部中斷0

SETB IT0 ;設(shè)置外部中斷0請求信號方式為脈沖方式

SETB EA ;中斷允許

MOVX @DPTR,A ;啟動A/D轉(zhuǎn)換HERE: AJMP HERE ;等待中斷D574AA/D轉(zhuǎn)換程序清單:ORG 0000H中斷服務(wù)程序清單:SAMPLE: CLR EA ;關(guān)中斷

MOV DPTR,#0002H MOVX A,@DPTR ;讀A/D轉(zhuǎn)換數(shù)據(jù)的高8位

MOV @R0,A ;保存數(shù)據(jù)

INC R0 INC DPTR MOVX A,@DPTR ;讀A/D轉(zhuǎn)換數(shù)據(jù)的低4位

SETB EA ;開中斷

RETI返回本節(jié)中斷服務(wù)程序清單:SAMPLE: CLR EA ;關(guān)中斷返回3.3數(shù)字濾波程序設(shè)計3.3.1概述3.3.2數(shù)字濾波的方法返回本章首頁3.3數(shù)字濾波程序設(shè)計3.3.1概述返回本章首頁3.3.1概述和模擬濾波裝置相比,數(shù)字濾波有以下幾個優(yōu)點:(1)數(shù)字濾波通過程序?qū)崿F(xiàn),不需硬件設(shè)備,系統(tǒng)的可靠性較高。(2)數(shù)字濾波可實現(xiàn)多通道共用。(3)可對低頻信號(如0.01Hz)實現(xiàn)濾波。(4)采用不同的算法和參數(shù)就可實現(xiàn)對不同信號的濾波,使用起來靈活、方便。返回本節(jié)3.3.1概述和模擬濾波裝置相比,數(shù)字濾波有以下幾個優(yōu)3.3.2數(shù)字濾波的方法1.程序判斷濾波2.中值濾波3.算術(shù)平均濾波4.加權(quán)平均濾波5.一階滯后濾波6.防脈沖干擾平均值法3.3.2數(shù)字濾波的方法1.程序判斷濾波1.程序判斷濾波限幅濾波就是把相鄰的兩次采樣值相減,求出其增量(以絕對值表示),然后與兩次采樣允許的最大偏差值(由被控對象的實際情況決定)△y進行比較,如果小于等于△y,則取本次采樣值;如果大于△y,則仍取上次采樣值作為本次采樣值。即:│Yn-Yn-1│≤△y,則Yn=Yn,取本次采樣值│Yn-Yn-1│>△y,則Yn=Yn-1,取上次采樣值(3-1)1.程序判斷濾波限幅濾波就是把相鄰的兩次采樣值相減,求限幅濾波程序流程框圖如圖3-16所示。圖3-16限幅濾波程序流程框圖限幅濾波程序流程框圖如圖3-16所示。圖3-16限幅濾波限幅濾波程序程序清單:PUSH PSW ;保護現(xiàn)場

PUSH A CLR C ;進位標志位清零

MOV DATA,DATA2 MOV A,DATA1 SUBB A,DATA ;求Yn-1-Yn JNC COMPARE ;如果Yn-1-Yn≥0,轉(zhuǎn)COMPARE CPL A ;如果Yn-1-Yn<0,求補

INC A限幅濾波程序程序清單:PUSH PSW ;保護現(xiàn)場COMPARE: CLR C SUBB A,LIMIT ;│Yn-Yn-1│和△y比較

JC OVER ;如果│Yn-Yn-1│≤△y,DATA2→DATA MOV DATA,DATA1 ;如果│Yn-Yn-1│>△y,DATA1→DATAOVER: POP A ;恢復現(xiàn)場

POP PSW RET ;返回COMPARE: CLR C限速濾波的濾波原理如下:設(shè)在順序采樣時刻T1、T2、T3所采集的數(shù)據(jù)分別為Y1、Y2、Y3,則當∣Y2-Y1∣≤△y,則Y2作為采樣值;∣Y2-Y1∣>△y,則保留Y2,但不作為采樣值,繼續(xù)采樣得Y3;如果∣Y3-Y2∣≤△y,則Y3作為采樣值;∣Y3-Y2∣>△y,則取作為采樣值。限速濾波的濾波原理如下:設(shè)在順序采樣時刻T1、T2、T3所采2.中值濾波所謂中值濾波法就是對某一被測參數(shù)連續(xù)采樣n次(n一般取奇數(shù)),然后把n次采樣值按順序排列,取其中間值做為本次采樣值。中值濾波程序的流程框圖如圖3-17所示。圖3-17中值濾波程序流程框圖現(xiàn)場保護設(shè)置數(shù)據(jù)個數(shù)讀數(shù)據(jù)排序取中值據(jù)現(xiàn)場恢復排序完成否?是設(shè)置數(shù)據(jù)區(qū)首址開始返回是否2.中值濾波所謂中值濾波法就是對某一被測參數(shù)連續(xù)采樣n次中值濾波程序程序清單:PUSH PSW PUSH ASORT: MOV R0,DATA ;數(shù)據(jù)存儲區(qū)單元首址

MOV R7,TIME ;讀比較次數(shù)

CLR FLAG ;清交換標志位LOOP: MOV A,@R0 ;取第一個數(shù)

MOV FIRST,A ;保存第一個數(shù)

INC R0 MOV SECOND,@R0 ;保存第二個數(shù)

CLR C SUBB A,@R0 ;兩數(shù)比較中值濾波程序程序清單:PUSH PSWJC NEXT ;第一數(shù)小于第二數(shù),不交換

MOV @R0,FIRST DEC R0 MOV @R0,SECOND ;交換兩數(shù)

INC R0 SETB FLAG ;置交換標志位NEXT: DJNZ R7,LOOP ;進行下一次比較

JB FLAG,SORT ;進行下一輪比較

DEC R0 CLR C MOV A,TIMEJC NEXT ;第一數(shù)小于第二數(shù),不交換RRC A MOV R7,ACONT: DECR0 DJNZ R7,CONT MOV SAMP,@R0 ;取中值

POP A POP PSW RETRRC A3.算術(shù)平均濾波所謂算術(shù)平均濾波就是把n個采樣值相加,然后取其算術(shù)平均值作為本次有效的采樣信號,即:圖3-18算術(shù)平均濾波程序流程圖3.算術(shù)平均濾波圖3-18算術(shù)平均濾波程序流程圖算術(shù)平均濾波程序清單:(本例中取采樣次數(shù)n=8)PUSH PSW ;現(xiàn)場保護

PUSH A MOV FLAG,#00H ;進位位清零

MOV R0,DATA ;設(shè)置數(shù)據(jù)存儲區(qū)首址

MOV R7,#08H ;設(shè)置采樣數(shù)據(jù)個數(shù)

CLR A ;清累加器LOOP: ADD A,@R0 ;兩數(shù)相加

JNC NEXT ;無進位,轉(zhuǎn)NEXT INC FLAG ;有進位,進位位加1NEXT: INC R0 ;數(shù)據(jù)指針加1

DJNZ R7,LOOP ;未加完,繼續(xù)加

MOV R7,#03H ;設(shè)置循環(huán)次數(shù)算術(shù)平均濾波程序清單:(本例中取采樣次數(shù)n=8)PUSH DIVIDE: MOV TEMP,A ;保存累加器中的內(nèi)容

MOV A,FLAG ;累加結(jié)果除2

CLR C RRC A MOV FLAG,A MOV A,TEMP RRC A DJNZ R7,DIVIDE ;未結(jié)束,繼續(xù)執(zhí)行

MOV SAMP,A ;保存結(jié)果至SAMP中

POP A ;恢復現(xiàn)場

POP PSW RETDIVIDE: MOV TEMP,A ;保存累加器中的內(nèi)容4.加權(quán)平均濾波在算術(shù)平均濾波程序中,n次采樣值在最后的結(jié)果中所占的比重是相等的,這樣雖然消除了隨機干擾,但有用信號的靈敏度也隨之降低。為了提高濾波效果,將各個采樣值取不同的比重,然后再相加求平均值,這種方法稱為加權(quán)平均濾波。一個n項加權(quán)平均式為:4.加權(quán)平均濾波在算術(shù)平均濾波程序中,n次采樣值在最后的圖3-19加權(quán)平均濾波程序流程圖圖3-19加權(quán)平均濾波程序流程圖加權(quán)平均濾波程序清單:PUSH PSW ;保護現(xiàn)場

PUSH A MOV R7,TIME ;數(shù)據(jù)個數(shù)設(shè)置

MOV R0,DATA ;數(shù)據(jù)區(qū)首址設(shè)置

MOV R1,COEFF ;系數(shù)存儲首址設(shè)置

MOV FLAG,#00H ;累加結(jié)果存儲區(qū)清零

MOV SAMP_L,#00H MOV SAMP_H,#00HLOOP: MOV A,@R0 ;讀采樣值

MOV B,A MOV A,@R1 ;讀加權(quán)平均系數(shù)加權(quán)平均濾波程序清單:PUSH PSW ;保護現(xiàn)場MUL AB CLR C ADD A,SAMP_L ;累加和

MOV SAMP_L,A MOV A,B ADDC A,SAMP_H JNC NEXT INC FLAGNEXT: MOV SAMP_H,A INC R0 ;數(shù)據(jù)區(qū)地址加1

INC R1 ;系數(shù)地址加1

DJNZ R7,LOOP ;未加完,繼續(xù)

MOV R7,#07H ;設(shè)置循環(huán)次數(shù)MUL ABDIV128: CLR C MOV A,FLAG ;累加結(jié)果除2

RRC A MOV FLAG,A MOV A,SAMP_H RRC A MOV SAMP_H,A MOV A,SAMP_L RRC A MOV SAMP_L,A DJNZ R7,DIV128 ;未除完,繼續(xù)

MOV SAMP,SAMP_L ;保存濾波后采樣值

POP A ;恢復現(xiàn)場

POP PSW RETDIV128: CLR C5.一階滯后濾波圖3-20一階滯后濾波程序流程圖5.一階滯后濾波圖3-20一階滯后濾波程序流程圖一階滯后濾波程序清單:MOV MUL1_H,COEFF1_HMOV MUL1_L,COEFF1_LMOV MUL2_H,DATA1_HMOV MUL2_H,DATA1_LACALL MULTD ;MOV BUFF1,PR_HMOV BUFF2,PR_LMOV MUL1_H,COEFF2_HMOV MUL1_L,COEFF2_L一階滯后濾波程序清單:MOV MUL1_H,COEFF1_MOV MUL2_H,DATA2_HMOV MUL2_H,DATA2_LACALL MULTD ;CLR CMOV A,PR_H ;ADD A,BUFF1MOV PR_H,AMOV A,PR_LADDC A,BUFF2 ;MOV PR_L,AMOV MUL2_H,DATA2_H雙字節(jié)無符號位乘法子程序(MULTD)。入口條件:乘數(shù)MUL1存于MUL1_H和MUL1_L單元中,被乘數(shù)MUL2存于MUL2_H和MUL2_L單元中。出口條件:乘積按順序存于PR_H、PR_L、MUL1_H、MUL1_L單元中。雙字節(jié)無符號位乘法子程序(MULTD)。入口條件:乘數(shù)MUMULTD: CLRC ;清進位標志位

MOV PR_L,#00H ;乘積高8位清零

MOV PR_H,#00H MOV R7,#11H ;設(shè)置循環(huán)次數(shù)LOOP1: JNC LOOP2 ;進位標志位為零,轉(zhuǎn)LOOP2 MOV A,PR_L ;PR+MUL2 ADD A,MUL2_L MOV PR_L,A MOV A,PR_H ADDC A,MUL2_H MOV PR_H,AMULTD: CLRC ;清進位標志位LOOP2: MOV A,PR_H ;PR右移一位

RRC A MOV PR_H,A MOV A,PR_L RRC A MOV PR_L,A MOV A,MUL1_H ;MUL1右移一位

RRC A MOV MUL1_H,A MOV A,MUL1_L RRC A MOV MUL1_L,A DJNZ R7,LOOP1 ;循環(huán)未結(jié)束,繼續(xù)LOOP2: MOV A,PR_H ;PR右移一位6.防脈沖干擾平均值法圖3-21防脈沖干擾平均值法程序流程框圖6.防脈沖干擾平均值法圖3-21防脈沖干擾平均值法程防脈沖干擾平均值法程序清單:PUSH A ;保護現(xiàn)場

PUSH PSWSORT: MOV R0,DATA ;數(shù)據(jù)存儲區(qū)單元首址

MOV R7,#10H ;讀比較次數(shù)

CLR CHANGE ;清交換標志位LOOP: MOV A,@R0 ;取第一個數(shù)

MOV FIRST,A ;保存第一個數(shù)

INC R0 MOV SECOND,@R0 ;保存第二個數(shù)

CLR C SUBB A,@R0 ;兩數(shù)比較防脈沖干擾平均值法程序清單:PUSH A ;保護現(xiàn)場JC NEXT ;第一數(shù)小于第二數(shù),不交換

MOV @R0,FIRST DEC R0 MOV @R0,SECOND ;交換兩數(shù)

INC R0 SETB CHANGE ;置交換標志位NEXT: DJNZ R7,LOOP ;進行下一次比較

JB CHANGE,SORT ;進行下一輪比較

MOV FLAG,#00H ;進位位清零

INC DATA ;去掉最小值

MOV R0,DATA ;設(shè)置數(shù)據(jù)存儲區(qū)首址

MOV R7,#08H ;設(shè)置累加循環(huán)次數(shù),去掉最大值

CLR A ;清累加器LOOP: ADD A,@R0 ;兩數(shù)相加

JNC NEXT ;無進位,轉(zhuǎn)NEXT INC FLAG ;有進位,進位位加1JC NEXT ;第一數(shù)小于第二數(shù),不交換NEXT: INC R0 ;數(shù)據(jù)指針加1

DJNZ R7,LOOP ;未加完,繼續(xù)加

MOV R7,#03H ;設(shè)置循環(huán)次數(shù)DIVIDE: MOV TEMP,A ;保存累加器中的內(nèi)容

MOV A,FLAG ;累加結(jié)果除2

CLR C RRC A MOV FLAG,A MOV A,TEMP RRC A DJNZ R7,DIVIDE ;未結(jié)束,繼續(xù)執(zhí)行

MOV SAMP,A ;保存結(jié)果至SAMP中

POP A ;恢復現(xiàn)場

POP PSW RET返回本節(jié)NEXT: INC R0 ;數(shù)據(jù)指針加13.4標度變換程序設(shè)計對于一般的線性儀表而言,標度變換公式為:為了簡化程序設(shè)計,一般把被測參數(shù)的起點A0所對應(yīng)的A/D轉(zhuǎn)換值設(shè)定為0,即N0=0,這樣式(3-6)可以改寫為:返回本章首頁3.4標度變換程序設(shè)計對于一般的線性儀表而言,標度變換例3-2某溫度測量儀表的量程為100~900℃,利用8031和ADC0809進行A/D轉(zhuǎn)換。在某一時刻計算機采樣并經(jīng)過數(shù)字濾波后的的數(shù)字量為0CDH求此時對應(yīng)的溫度值是多少?(設(shè)儀表的量程是線性的)解:由式(3-7)可知,A0=100℃,Am=900℃,Nx=0CDH=(205)D,Nm=0FFH=(255)D,所以此時對應(yīng)的溫度為:例3-2某溫度測量儀表的量程為100~900℃,利用803標度變換程序清單:BDCHAN: MOV SUB1_L,AM ;

INC AM MOV SUB1_H,AM MOV SUB2_L,A0 INC A0 MOV SUB2_H,A0 ACALL SUB2 MOV MUL1_H,DIFF_H MOV MUL1_L,DIFF_L MOV SUB1_L,NX ;標度變換程序清單:BDCHAN: MOV SUB1_L,AINC NX MOV SUB1_H,NX MOV SUB2_L,N0 INC N0 MOV SUB2_H,N0 ACALL SUB2 MOV MUL2_H,DIFF_H MOV MUL2_L,DIFF_L ACALL MULTD ;求

MOV DIV1_H,PR_H MOV DIV1_L,PR_L MOV SUB1_L,NM ;INC NXINC NM MOV SUB1_H,NM MOV SUB2_L,N0 INC N0 MOV SUB2_H,N0 ACALL SUB2 MOV DIV2_H,DIFF_H MOV DIV2_L,DIFF_L ACALL DUBDIV ;

CLR C MOV A,DIV1_LINC NMADDC A,A0 MOV AX,A INC A0 MOV A,DIV1_H ADDC A,A0 MOV AX,A ;

RETADDC A,A0雙字節(jié)減法子程序(SUB2)雙字節(jié)減法子程序(SUB2)程序入口:被減數(shù)放在SUB1_H、SUB1_L單元中,減數(shù)放在SUB2_H、SUB2_L單元中;程序出口:差放在DIFF_H、DIFF_L單元中。SUB2: CLR C MOV A,SUB1_L ;A←SUB1_L SUBB A,SUB2_L ;低8位相減

MOV DIFF_L,A ;保存低8位差值

MOV A,SUB1_H ;A←SUB1_H SUBB A,SUB2_H ;高8位相減

MOV DIFF_H,A ;保存高8位差值

RET雙字節(jié)減法子程序(SUB2)雙字節(jié)減法子程序(SUB2)程雙字節(jié)無符號數(shù)除法(DUBDIV)程序入口:被除數(shù)存放在DIV1_H、DIV1_L單元中,除數(shù)存放在DIV2_H、DIV2_L單元中;程序出口:商存放在DIV1_H、DIV1_L單元中,余數(shù)存放在L_L和L_H單元中。DUBDIV: CLR A ;余數(shù)單元清零

MOV L_H,A MOV L_L,A MOV R0,#10H ;設(shè)置除法移位次數(shù)LOOP: CLR C ;移位

MOV A,DIV1_L

雙字節(jié)無符號數(shù)除法(DUBDIV)程序入口:被除數(shù)存放在DRLC A MOV DIV1_L,A MOV A,DIV1_H RLC AMOV DIV1_H,A MOV A,L_L RLC A MOV L_L,A MOV A,L_H RLC A MOV L_H,A MOV PSW.5,CRLC ALP1: MOV A,L_L ;余數(shù)單元減除數(shù)

SUBB A,DIV2_L MOV R1,A MOV A,L_HSUBB A,DIV2_H JB PSW.5ADD1 JC SMALLADD1: MOV L_H,A MOV A,R1 MOV L_L,A INC DIV1_L ;商加一SAMLL: DJNZ R0,LOOP

LP1: MOV A,L_L ;余數(shù)單元減除數(shù)MOV 20H,L_H ;四舍五入

JB 07H,

ADD_D ;商的最高位為1,則轉(zhuǎn)ADD_D CLR C ;判斷小數(shù)部分是否大于0.5

MOV A,L_LRLC A MOV L_L,A MOV A,L_H RLC A SUBB A,DIV2_H

MOV 20H,L_H ;四舍五入JC RETURN ;小數(shù)部分小于0.5,退出

JNZ ADD1 ;小數(shù)部分大于0.5,則轉(zhuǎn)ADD_D MOV A,L_L SUBB A,DIV2_L JC RETURNADD_D: CLR C ;商加一

INC DIV1_L MOV A,DIV1_H ADDC A,#00H MOV DIV1_H,ARETURN: RET返回本節(jié)JC RETURN ;小數(shù)部分小于0.5,退出返回本節(jié)3.5上下限報警處理程序設(shè)計報警程序主要有以下幾個步驟組成:(1)采樣被測參數(shù)。(2)比較采樣值和給定的上下限。(3)根據(jù)比較結(jié)果執(zhí)行相應(yīng)的處理程序。返回本章首頁3.5上下限報警處理程序設(shè)計報警程序主要有以下幾個步驟例3-3設(shè)計一簡單的單字節(jié)上下限報警程序,當采樣值超出上、下限時,分別執(zhí)行相應(yīng)的報警處理程序。設(shè)上限報警值存放在Amax單元,下限報警值存放在Amin單元,采樣值存放在SAMP單元。簡單上下限報警程序程序清單如下:例3-3設(shè)計一簡單的單字節(jié)上下限報警程序,當采樣值超出上、… ….

CLR C ;清進位標志位

MOV A,Amax ;讀上限報警值

SUBB A,SAMP ;判斷是否超過上限報警值

JC UPPER ;超過上限,轉(zhuǎn)報警處理程序

MOV A,Amin ;讀下限報警值

SUBB A,SAMP ;判斷是否超過下限報警值

JNC LOWER ;超過下限,轉(zhuǎn)報警處理程序 … …UPPER: 超上限處理程序。LOWER: 超下限處理程序?!?-4設(shè)計一報警處理程序。只有采樣值連續(xù)3次異常時,系統(tǒng)才進行報警處理。報警程序流程框圖如圖3-23所示。例3-4設(shè)計一報警處理程序。只有采樣值連續(xù)3次異常時,系圖3-23報警程序流程框圖圖3-23報警程序流程框圖報警程序清單:… …

MOV NUM,#03H … …CHECK: CLR C ;清進位標志位

MOV A,Amax ;讀上限報警值

SUBB A,SAMP ;判斷是否超過上限報警值

JC ABNORMAL ;超過上限,轉(zhuǎn)ABNORMAL MOV A,Amin ;讀下限報警值

SUBB A,SAMP ;判斷是否超過下限報警值

JNC ABNORMAL ;超過下限,轉(zhuǎn)ABNORMAL

報警程序清單:…CLR FLAG ;采樣正常,清采樣異常標志位

AJMP RETUABNORMAL: JB FLAG,ABNOR_L ;上次采樣異常,轉(zhuǎn)ABNOR_L MOV NUM,#03H ;上次采樣正常,重置允許連續(xù)異常次數(shù)

SETB FLAG ;置位采樣異常標志位

AJMP RETUABNOR_L: MOV A,NUM ;讀允許連續(xù)采樣異常次數(shù)

JZ ALARM ;允許采樣異常次數(shù)=0,執(zhí)行報警處理程序

DEC NUM ;允許采樣異常次數(shù)≠0,允許采樣異常次數(shù)減1

SETB FLAG ;置位采樣異常標志位

AJMP RETUALARM1: ... ;報警處理程序 ...RETU: RET返回本節(jié)CLR FLAG ;采樣正常,清采樣異常標志位返回本節(jié)3.6LED數(shù)碼管顯示程序設(shè)計3.6.1LED顯示器件工作原理3.6.2LED顯示方式3.6.3LED顯示程序設(shè)計返回本章首頁3.6LED數(shù)碼管顯示程序設(shè)計3.6.1LED顯示3.6.1LED顯示器件工作原理LED顯示器件是通過發(fā)光二極管顯示字段的器件。在單片機控制系統(tǒng)中常用的是由7段LED數(shù)碼管,它的顯示塊中有8個發(fā)光二極管,7個發(fā)光二極管組成字符“8”,1個發(fā)光二極管構(gòu)成小數(shù)點,因此有人稱7段LED數(shù)碼管為8段顯示器。LED數(shù)碼管的管腳配置如圖3-24所示。LED數(shù)碼管有共陰極和共陽極兩類,如圖3-24所示。共陰極LED數(shù)碼管的發(fā)光二極管的陰極共地,如圖3.25(a),當某個發(fā)光二極管的陽極電壓為高電平時,二極管發(fā)光;而共陽極LED數(shù)碼管是發(fā)光二極管的陽極共接,如圖3.25(b),當某個二極管的陰極電壓為低電平時,二極管發(fā)光。3.6.1LED顯示器件工作原理LED顯示器件是通過發(fā)圖3-24LED數(shù)碼管管腳配置圖(a)共陰極(b)共陽極圖3-25兩類LED數(shù)碼管圖3-24LED數(shù)碼管管腳配置圖(a)共陰極(表3-27段LED段選碼返回本節(jié)表3-27段LED段選碼返回本節(jié)3.6.2LED顯示方式在微機控制系統(tǒng)中,一般利用N塊LED顯示器件構(gòu)成N位LED顯示器。構(gòu)成原理圖如圖3-26所示。圖3-26N位LED顯示器原理圖3.6.2LED顯示方式在微機控制系統(tǒng)中,一般利用N塊1.LED靜態(tài)顯示方式圖3-27表示的是一個四位靜態(tài)LED顯示電路。圖3-27四位靜態(tài)LED顯示電路1.LED靜態(tài)顯示方式圖3-27四位靜態(tài)LED顯示電路2.LED動態(tài)顯示方式LED動態(tài)顯示就是將所有顯示位的段選線并聯(lián)在一起,由一個8位I/O口控制,而位選線則由其他的I/O口控制。圖3-28表示的是一個8位動態(tài)LED顯示電路。圖3-288位動態(tài)LED顯示電路返回本節(jié)2.LED動態(tài)顯示方式圖3-288位動態(tài)LED顯示電路3.6.3LED顯示程序設(shè)計1.硬件譯碼顯示程序設(shè)計MC14495是CMOSBCD——七段十六進制鎖存、譯碼驅(qū)動芯片。MC14495能完成BCD碼至十六進制數(shù)的鎖存和譯碼,并具有驅(qū)動能力。利用MC14495實現(xiàn)的8位靜態(tài)LED顯示接口電路如圖3-29所示。3.6.3LED顯示程序設(shè)計1.硬件譯碼顯示程序設(shè)計圖3-29利用MC14495實現(xiàn)的8位靜態(tài)LED顯示接口電路圖圖3-29利用MC14495實現(xiàn)的8位靜態(tài)LED顯示接口設(shè)要顯示的BCD碼放在以DATA為首址的RAM單元中。顯示程序設(shè)計如下:… …

MOV R0,DATA ;設(shè)置數(shù)據(jù)區(qū)首址

MOV A,@R0 ;讀要顯示的BCD碼

ADD A,#80H MOV P1,A ;顯示第一位

INC R0 MOV A,@R0 ADD A,#90H MOV P1,A ;顯示第二位

INC R0 … …. INC R0 MOV A,@R0 ADD A,#F0H MOV P1,A ;顯示第八位設(shè)要顯示的BCD碼放在以DATA為首址的RAM單元中。顯示程2.軟件譯碼顯示程序設(shè)計(1)軟件譯碼靜態(tài)顯示電路(2)軟件譯碼動態(tài)顯示電路2.軟件譯碼顯示程序設(shè)計(1)軟件譯碼靜態(tài)顯示電路(1)軟件譯碼靜態(tài)顯示電路圖3-30為一采用8位串行輸入/串、并輸出移位寄存器74LS595的兩位軟件譯碼靜態(tài)顯示電路。該電路采用串行輸入控制方案實現(xiàn)字符的顯示,大大減少了I/O口線的占用。如果需要顯示更多的位數(shù)時,只需級連多片74LS595即可,且不必占用其他的I/O口線。(1)軟件譯碼靜態(tài)顯示電路圖3-30為一采用8位串行輸入/圖3-30通過74LS595實現(xiàn)的軟件譯碼靜態(tài)顯示電路圖3-30通過74LS595實現(xiàn)的軟件譯碼靜態(tài)顯示電路顯示程序流程框圖如圖3-31所示。(a)顯示主程序(b)串行輸出程序顯示程序流程框圖如圖3-31所示。(a)顯示主程序顯示程序清單:DAT BIT P1.7 TRAN BIT P1.6 PUL BIT P1.5SHOW: CLR C MOV DPTR,#3000H ;設(shè)定段選碼的初始地址START: MOV A,DATA ;讀要顯示的數(shù)據(jù)

ANL A,#0F0H ;屏蔽低4位

SWAP A ;高4位和低4位互換

ACALL SET8WEI ;串行輸出子程序調(diào)用

MOV A,DATA ANL A,#0FH ;屏蔽高4位顯示程序清單:DAT BIT P1.7ACALL SET8WEI ;串行輸出子程序調(diào)用

NOP NOP SETB TRAN ;鎖存并顯示輸出數(shù)據(jù)

NOP NOP CLR TRAN NOP NOP RETSET8WEI: MOVC A,@A+DPTR ;讀顯示字符的段選碼

MOV R7,#08H ;設(shè)置循環(huán)次數(shù)ACALL SET8WEI ;串行輸出子程序調(diào)用SET81: RRC A ;段選碼的最低位移入進位標志位中

JC SETH ;CY=1,轉(zhuǎn)至SETHCLR DAT ;P1.7為低電平

NOP CLR PUL ;送移位脈沖

NOP SETB PUL NOP AJMP SET82SETH: SETB DAT ;P1.7為高電平SET81: RRC A ;段選碼的最低位移入進位標志位中NOP CLR PUL NOP SETB PUL NOPSET82: DJNZ R7,SET81 ;段選碼輸出未完成,繼續(xù)

RET ORG 3000H ;共陰極LED顯示段選碼

DB 3FH,06H,5BH,4FH,06H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HNOP(2)軟件譯碼動態(tài)顯示電路圖3.32給出的是通過8155擴展實現(xiàn)的8位LED動態(tài)顯示接口。圖中利用PA口輸出段選碼,PB口輸出位選碼。利用8155擴展實現(xiàn)的動態(tài)顯示程序流程如圖3-32所示。(2)軟件譯碼動態(tài)顯示電路圖3.32給出的是通過8155擴利用8155擴展實現(xiàn)的動態(tài)顯示程序清單:DISP: MOV A,#03H ;8155初始化數(shù)據(jù)

MOV DPTR,#7F00H ;8155命令/狀態(tài)寄存器地址

MOVX @DPTR,A ;設(shè)置顯示數(shù)據(jù)首址

MOV R7,#7FH ;設(shè)置位選字

MOV A,R7DS1: MOV DPTR,#7F02H ;指向PB口

MOVX @DPTR,A ;送位選字

DEC DPTR ;指向PA口

MOV A,@R0 ;讀顯示數(shù)據(jù)

ADD A,#0DH ;#0DH為從查表指令到段選碼的首址利用8155擴展實現(xiàn)的動態(tài)顯示程序清單:DISP: MOVMOVC A,@A+PC ;查段選碼

MOVX @DPTR,A ;送段選碼至PA口

ACALL DELAY1 ;延時1毫秒

INC R0 ;指向下一顯示數(shù)據(jù)

MOV A,R7 JNB ACC.0,OVER ;判斷是否顯示完8位數(shù)據(jù)

RR A ;未顯示完,改變位選字

MOV R7,A AJMP DS1 ;繼續(xù)顯示下一位OVER: RET DB 3FH,06H,5BH,4FH,06H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H返回本節(jié)MOVC A,@A+PC ;查段選碼返回本節(jié)3.7定時程序設(shè)計3.7.1軟件定時程序3.7.2硬件定時程序返回本章首頁3.7定時程序設(shè)計3.7.1軟件定時程序返回本章3.7.1軟件定時程序雙循環(huán)定時程序流程如圖3-33所示。3.7.1軟件定時程序雙循環(huán)定時程序流程如圖3-33所如取N=166(0A6H),上述簡單軟件定時程序的定時時間就是1ms,如果需要250ms的定時時間,則所需的外循環(huán)的次數(shù)為250(0FAH)。程序如下:DELAY250: MOV R6,#0FAH ;置外循環(huán)次數(shù)DELAY1: MOV R7,#0A6H ;置內(nèi)循環(huán)次數(shù)

NOP ;空操作指令D1: NOP DJNZ R7,D1 ;內(nèi)循環(huán)未結(jié)束,繼續(xù)

DJNZ R6,DELAY1 ;外循環(huán)未結(jié)束,繼續(xù)

RET返回本節(jié)如取N=166(0A6H),上述簡單軟件定時程序的定時時間就3.7.2硬件定時程序51系列單片機內(nèi)部有兩個16位的可編程定時器T0和T1,分別由TH0、TL0和TH1、TL1兩個8位計數(shù)器構(gòu)成。T0和T1的定時功能是通過對單片機內(nèi)部計數(shù)脈沖的計數(shù)實現(xiàn)的。因為每個機器周期產(chǎn)生一個計數(shù)脈沖,因此根據(jù)單片機的晶振頻率就可以計算出定時器的計數(shù)頻率。這樣,如果確定了計數(shù)值,就能計算出定時時間,而知道了定時時間也可計算出計數(shù)器的預置值。定時器控制寄存器(TCON)和工作方式控制寄存器(TMOD)分別控制定時器的運行和工作方式。3.7.2硬件定時程序51系列單片機內(nèi)部有兩個16位的可1.定時器簡介TMOD寄存器是控制定時器工作方式的8位專用寄存器。寄存器的高4位定義T1,低4位定T0。各位的具體定義如表3-3所示。1.定時器簡介2.硬件定時程序設(shè)計例3-5設(shè)單片機的晶振頻率為6MHz,利用T0產(chǎn)生周期為500μs的等寬正方波脈沖,通過P1.7端口輸出。(1)選擇工作方式(2)計算預置計數(shù)值(3)TMOD寄存器初始化(4)程序設(shè)計2.硬件定時程序設(shè)計程序設(shè)計主程序:

MOV TMOD,#02H ;T0工作方式2

MOV TH0,#83H ;設(shè)置計數(shù)初始值

MOV TL0,#83H ;保存計數(shù)初始值

SETB EA ;開中斷

SETB ET0 ;T0中斷允許

SETB TR0 ;啟動定時WAIT: AJMP WAIT ;等待中斷中斷服務(wù)程序:

CPL P1.7 ;方波輸出

RETI ;中斷返回程序設(shè)計主程序:例3-6設(shè)計一個能夠自動記錄秒、分和小時的計時時鐘。程序設(shè)計分為初始化和中斷服務(wù)程序兩部分。初始化程序清單:ORG 0000H AJMP MAIN ORG 0003H AJMP INT0 ;設(shè)置外部中斷0中斷入口地址

ORG 000BH例3-6設(shè)計一個能夠自動記錄秒、分和小時的計時時鐘。AJMP TIME0 ;設(shè)置T0中斷入口地址

ORG 001BH AJMP COUN1 ;設(shè)置T1中斷入口地址MAIN: MOV SEC,#00H ;秒存儲單元清0

MOV MIN,#00H ;分存儲單元清0

MOV HUR,#00H ;小時存儲單元清0

MOV TMOD,#41H ;T1為計數(shù)方式,定時器0工作方式1

MOV TH0,#17H ;設(shè)置T0的計數(shù)初值

MOV TL0,#0B6H MOV TH1,#0FFH ;設(shè)置T1的計數(shù)初值

MOV TL1,#0F7HAJMP TIME0 ;設(shè)置T0中斷入口地址SETB EA ;開中斷

SETB IT0 ;外中斷0中斷請求信號為脈沖方式

SETB ET1 ;T1中斷允許

SETB ET0 ;T0中斷允許

SETB EX0 ;外中斷0中斷允許

SETB TR0 ;啟動定時器0

SETB TR1 ;啟動計數(shù)器1HERE: AJMP HERE ;等待中斷SETB EA ;開中斷中斷服務(wù)程序分以下幾部分。定時器T0定時中斷程序清單:TIME0: CLR EA ;關(guān)中斷

SETB P3.5 ;發(fā)計數(shù)脈沖

NOP CLR P3.5 NOP MOV TH0,#17H ;加載T0計數(shù)值

MOV TL0,#0B6H SETB EA ;開中斷

RETI ;中斷返回中斷服務(wù)程序分以下幾部分。定時器T0定時中斷程序清單:計數(shù)器T1計數(shù)中斷程序清單:COUN1: CLR EA ;關(guān)中斷

SETB P3.2 ;發(fā)送脈沖,通知1秒計時到

NOP CLR P3.2 NOP MOV TH1,#0FFH ;加載T1計數(shù)值

MOV TL1,#0F7H SETB EA RETI計數(shù)器T1計數(shù)中斷程序清單:COUN1: CLR EA ;外部中斷0中斷程序流程如圖3-34所示。外部中斷0中斷程序流程如圖3-34所示。外部中斷0中斷程序清單:INT0: CLR EA ;關(guān)中斷

INC SEC ;秒存儲單元加1

MOV A,SEC CJNE A,#3CH,S_SHOW ;判斷是否到60秒

INC MIN ;60秒到,分存儲單元加1

MOV SEC,#00H ;秒存儲單元清0S_SHOW: ACALL HTOBCD ;調(diào)用16進制數(shù)轉(zhuǎn)化為BCD碼子程序

ACALL DISP ;調(diào)用顯示子程序,顯示秒

MOV A,MIN CJNE A,#3CH,M_SHOW ;判斷是否到60分外部中斷0中斷程序清單:INT0: CLR EA ;關(guān)中斷INC HUR ;60分到,小時存儲單元加1

MOV MIN,#00H ;小時存儲單元清0M_SHOW: ACALL HTOBCD ;調(diào)用16進制數(shù)轉(zhuǎn)化為BCD碼子程序

ACALL DISP ;調(diào)用顯示子程序,顯示分

MOV A,HUR CJNE A,#18H,H_SHOW ;判斷是否到24小時

MOV HUR,#00H ;24小時到,小時存儲單元清0H_SHOW: ACALL HTOBCD ;調(diào)用16進制數(shù)轉(zhuǎn)化為BCD碼子程序

ACALL DISP ;調(diào)用顯示子程序,顯示小時

SETB EA ;開中斷

RETI ;中斷返回返回本節(jié)INC HUR ;60分到,小時存儲單元加1返回本節(jié)3.8鍵盤控制程序設(shè)計3.8.1非編碼鍵盤的掃描程序設(shè)計3.8.2編碼鍵盤返回本章首頁3.8鍵盤控制程序設(shè)計3.8.1非編碼鍵盤的掃描程3.8.1非編碼鍵盤的掃描程序設(shè)計下面以通過8155擴展I/O口組成的4×8非編碼鍵盤為例介紹行列式鍵盤工作原理及掃描程序設(shè)計。通過8155擴展I/O口組成的4×8非編碼鍵盤如圖3-35所示。3.8.1非編碼鍵盤的掃描程序設(shè)計下面以通過8155擴圖3-358155擴展I/O口組成的4×8非編碼鍵盤圖3-358155擴展I/O口組成的4×8非編碼鍵盤1.鍵盤工作原理確定按下的鍵的鍵號:為了方便鍵處理程序的設(shè)計,一般采用依次排列鍵值的方法,以保證鍵值和鍵號一致。比如,根據(jù)行列式鍵盤工作原理,圖3-35中的32個鍵的鍵值如下(X為任意值):FEXE FDXE FBXE F7XE EFXE DFXE BFXE 7FXEFEXD FDXD FBXD F7XD EFXD DFXD BFXD 7FXDFEXB FDXB FBXB F7XB EFXB DFXB BFXB 7FXBFEX7 FDX7 FBX7 F7X7 EFX7 DFX7 BFX7 7FX71.鍵盤工作原理2.鍵盤掃描程序設(shè)計較常用的鍵盤掃描的工作方式有編程掃描方式和中斷掃描方式兩種。(1)編程掃描方式設(shè)在主程序中已將8155的PA口為基本輸出口,PC口為基本輸入口。鍵盤掃描程序流程框圖如圖3-36所示。2.鍵盤掃描程序設(shè)計較常用的鍵盤掃描的工作方式有編程掃描圖3-36鍵盤掃描程序流程框圖圖3-36鍵盤掃描程序流程框圖鍵盤掃描子程序清單:KEY1: ACALL KS1 ;有無鍵按下子程序

JNZ LK1 ;有鍵按下,轉(zhuǎn)去抖延時

AJMP KEY1 ;無鍵按下,繼續(xù)掃描LK1: ACALL DELA12 ;12ms延時程序調(diào)用

ACALL KS1 ;判斷鍵是否真正按下

JNZ LK2 ;有鍵按下,轉(zhuǎn)逐列掃描

AJMP KEY1 ;無鍵按下,繼續(xù)掃描LK2: MOV R2,#0FEH ;設(shè)置首列掃描字

MOV R4,#00H ;保存首列號LK4: MOV DPTR,#7F01H ;列掃描字送至PA口鍵盤掃描子程序清單:KEY1: ACALL KS1 ;有無MOV A,R2 MOVX @DPTR,A INC DPTR ;指向PC口

INC DPTR MOVX A,@DPTR ;讀入行狀態(tài)

JB ACC.0,LONE ;第0行無鍵按下,轉(zhuǎn)LONE MOV A,#00H ;有鍵按下,設(shè)置行首鍵號

AJMP LKP ;轉(zhuǎn)求鍵號LONE: JB ACC.1,LTWO ;第1行無鍵按下,轉(zhuǎn)LTWO MOV A,#08H ;有鍵按下,設(shè)置行首鍵號

AJMP LKP ;轉(zhuǎn)求鍵號LTWO: JB ACC.2,LTHR ;第2行無鍵按下,轉(zhuǎn)LTHR MOV A,#10H ;有鍵按下,設(shè)置行首鍵?

AJMP LKP ;轉(zhuǎn)求鍵號MOV A,R2LTHR: JB ACC.3,NEXT ;第3行無鍵按下,查下一列

MOV A,#18H ;有鍵按下,設(shè)置行首鍵LKP: ADD A,R4 ;求鍵號,鍵號=行首鍵號+列號

PUSH ACC ;保護鍵號LK3: ACALL KS1 ;等待鍵釋放

JNZ LK3 ;鍵未釋放,繼續(xù)等待

POP ACC ;鍵釋放,鍵號送A AJMP OVER ;鍵掃描結(jié)束NEXT: INC R4 ;列號加1,指向下一列

MOV A,R2 ;判斷8列掃描完否

JNB ACC.7,KND ;8列掃描完,繼續(xù)

RL A ;掃描字左移一位

MOV R2,A ;送掃描字

AJMP LK4 ;轉(zhuǎn)下一列掃描LTHR: JB ACC.3,NEXT ;第3行無鍵按下,查KND: AJMP KEY1OVER: RET ;鍵掃描結(jié)束KS1: MOV DPTR,#7F01H ;指向PA口

MOV A,#00H ;設(shè)置掃描字

MOVX @DPTR,A ;掃描字送PA口

INC DPTR ;指向PC口

INC DPTR MOVX A,@DPTR ;讀入PC口狀態(tài)

CPL ;以高電平表示有鍵按下

ANL A,#0FH ;屏蔽高4位

RETKND: AJMP KEY1(2)中斷掃描工作方式圖3-37中斷掃描方式鍵盤接口返回本節(jié)(2)中斷掃描工作方式圖3-37中斷掃描方式鍵盤接口返回3.8.2編碼鍵盤8279和51系列的單片機的連接非常簡單,其接口電路的一般連接方法如圖3-38所示。圖3-38通過8279擴展的鍵盤接口電路3.8.2編碼鍵盤8279和51系列的單片機的連接非常當有鍵按下時,8279內(nèi)部由硬件自動生成一個與之相應(yīng)的代碼,編碼的格式如表3-4所示。當有鍵按下圖3-38中8×8鍵盤的鍵值如表3-5所示。返回本節(jié)圖3-38中8×8鍵盤的鍵值如表3-5所示。返回本節(jié)3.9抗干擾技術(shù)3.9.1數(shù)字信號的輸入輸出技術(shù)3.9.2指令冗余技術(shù)3.9.3軟件陷阱技術(shù)3.9.4程序運行監(jiān)視系統(tǒng)返回本章首頁3.9抗干擾技術(shù)3.9.1數(shù)字信號的輸入輸出技術(shù)3.9.1數(shù)字信號的輸入輸出技術(shù)由于干擾信號的持續(xù)時間非常短,因此在采集數(shù)字信號時,可重復采集,直到連續(xù)兩次或兩次以上的采樣結(jié)果完全相同,才視輸入信號有效。如果多次采樣的結(jié)果總是變化不定,則視為采樣無效。在滿足實時性要求的前提下,如果在相鄰的信號采集過程之間插入延時程序,就可以抑制較寬的脈沖,抗干擾的效果會更好。返回本節(jié)3.9.1數(shù)字信號的輸入輸出技術(shù)由于干擾信號的持續(xù)時間3.9.2指令冗余技術(shù)由于51系列單片機指令長度不超過3個字節(jié),當PC值改變后,可能出現(xiàn)三種情況:(1)PC值指向一單字節(jié)指令,程序自動納入正軌;(2)PC值指向一雙字節(jié)指令,由于雙字節(jié)指令有操作數(shù),則有可能將操作數(shù)當成操作碼執(zhí)行;(3)PC值指向一三字節(jié)指令,由于三字節(jié)指令有兩個操作數(shù),出錯的幾率更大。返回本節(jié)3.9.2指令冗余技術(shù)由于51系列單片機指令長度不超過3.9.3軟件陷阱技術(shù)下面以兩數(shù)比較的程序演示如何在程序區(qū)設(shè)置軟件陷阱。CLR CY ;進位標志清零

MOV A,M SUBB A,N ;M-N JZ MNEQU ;轉(zhuǎn)M=N處理程序

JC LESS ;轉(zhuǎn)M<N處理程序BIG: … … ;M>N處理程序

AJMP BPIONT ;轉(zhuǎn)至斷裂點

3.9.3軟件陷阱技術(shù)下面以兩數(shù)比較的程序演示如何在程NOP ;設(shè)置陷阱

NOP LJMP ERRORMNEQU: … ;M=N處理程序…

AJMP BPIONT NOP NOP LJMP ERRORLESS: … ;M<N處理程序 …NOP ;設(shè)置陷阱AJMP BPIONT NOP NOP LJMP ERRORBPIONT: RET ;斷裂點NOP ;陷阱

NOPLJMP ERR返回本節(jié)AJMP BPIONT返回本節(jié)3.9.4程序運行監(jiān)視系統(tǒng)圖3-39是一種簡單實用的程序運行監(jiān)視系統(tǒng)。3.9.4程序運行監(jiān)視系統(tǒng)圖3-39是一種簡單實用的程下面的程序運行監(jiān)視程序選用T0進行系統(tǒng)監(jiān)視,定時時間為16ms。MOV TMOD,#01H ;設(shè)置T0為定時器

SEB ET0 ;允許T0中斷

SETB PT0 ;設(shè)置T0中斷為高優(yōu)先級

MOV TH0,#0E0H ;定時時間為16ms(6MHz晶振)

SETB TR0 ;啟動定時器

SETB EA ;開中斷返回本節(jié)下面的程序運行監(jiān)視程序選用T0進行系統(tǒng)監(jiān)視,定時時間為16m3.10電機控制程序設(shè)計3.10.1中小功率直流電機調(diào)速原理3.10.2開環(huán)脈沖調(diào)速系統(tǒng)3.10.3帶方向控制的脈沖調(diào)速系統(tǒng)返回本章首頁3.10電機控制程序設(shè)計3.10.1中小功率直流電3.10.1中小功率直流電機調(diào)速原理設(shè)電機在恒定電壓下的轉(zhuǎn)速為Vmax,控制信號的占空比D=t/τ(其中t代表通電時間,τ代表脈沖周期),則電機的的轉(zhuǎn)速和控制信號的關(guān)系可用如下公式表示:

V=Vmax×D(3-10)返回本節(jié)3.10.1中小功率直流電機調(diào)速原理設(shè)電機在恒定電壓下3.10.2開環(huán)脈沖調(diào)速系統(tǒng)1.開環(huán)脈沖調(diào)速系統(tǒng)原理開環(huán)脈沖調(diào)速系統(tǒng)的原理如圖3-40所示。3.10.2開環(huán)脈沖調(diào)速系統(tǒng)1.開環(huán)脈沖調(diào)速系統(tǒng)原理圖3-41是一個單片機控制的開環(huán)脈沖調(diào)速系統(tǒng)示意圖。圖3-41是一個單片機控制的開環(huán)脈沖調(diào)速系統(tǒng)示意圖。2.開環(huán)脈沖調(diào)速系統(tǒng)程序設(shè)計脈沖寬度的調(diào)制可通過軟件延時法實現(xiàn)。設(shè)定圖3-41中8155的地址為7F00H,PA、PC口為基本輸入口,PB口為基本輸出口。則調(diào)速系統(tǒng)的軟件延時法程序流程圖如圖3-42所示。2.開環(huán)脈沖調(diào)速系統(tǒng)程序設(shè)計軟件延時法的程序清單:MOV DPTR,#7F00H ;設(shè)置8155命令寄存器地址

MOV A,#06H MOVX @DPTR,A ;設(shè)置PA、PB、PC口的工作方式

MOV DPTR,#7F03H ;指向PC口CHECK: MOVX A,@DPTR ;檢測是否啟動電機

JNB ACC.5,CHECK ;繼續(xù)檢測TURN: MOV DPTR,#7F01H ;設(shè)置PA口地址

MOVX A,@DPTR ;讀開關(guān)數(shù)N軟件延時法的程序清單:MOV DPTR,#7F00H ;設(shè)MOV B,A ;保存N INC DPTR ;指向PB口

MOV A,#80H ;啟動電機

MOV A,B ;延時N個單位時間

MOV R7,ADELA1: ACALL DELAY DJNZ R7,DELA1 MOV A,#00H ;輸出停止脈沖MOV B,A ;保存N

MOVX @DPTR,A MOV A,B CPL A ;求

MOV R7,A ;延時個單位時間DELA2: ACALL DELAY DJNZ R7,DELA2 INC DPTR ;指向PC口

MOVX A,@DPTR ;檢測是否停止運行

JB ACC.5TURN ;繼續(xù)運行,轉(zhuǎn)TURNOFF: RET ;停止運行返回本節(jié) MOVX @DPTR,A返回本節(jié)3.10.3帶方向控制的脈沖調(diào)速系統(tǒng)在很多場合下,不僅要求電機能夠正向旋轉(zhuǎn),而且還能反向旋轉(zhuǎn)。電機旋轉(zhuǎn)方向控制原理圖如圖3-43所示。3.10.3帶方向控制的脈沖調(diào)速系統(tǒng)在很多場合下,不僅由圖3-43可以看出,當開關(guān)S1和S4閉合時,電機正向旋轉(zhuǎn);開關(guān)S2和S3閉合時,電機反向旋轉(zhuǎn);開關(guān)S3和S4閉合時,電機繞組被短路處于剎車狀態(tài);所有開關(guān)都打開時,電機處于自由滑行狀態(tài)。電機的工作狀態(tài)真值表如表3-6所示。由圖3-43可以看出,當開關(guān)S1和S4閉合時,電機正向旋轉(zhuǎn);雙向電機控制系統(tǒng)原理圖如圖3-44所示。雙向電機控制系統(tǒng)原理圖如圖3-44所示。雙向電機的脈沖調(diào)速控制,首先要判斷電機的旋轉(zhuǎn)方向,根據(jù)要求的方向輸出相應(yīng)的控制代碼,然后再進行脈沖寬度調(diào)速控制??刂瞥绦蛄鞒虉D如圖3-45所示。返回本節(jié)雙向電機的脈沖調(diào)速控制,首先要判斷電機的旋轉(zhuǎn)方向,根據(jù)要求的3.11步進電機控制3.11.1步進電機的工作原理3.11.2步進電機控制系統(tǒng)3.11.3步進電機控制程序的設(shè)計返回本章首頁3.11步進電機控制3.11.1步進電機的工作原理3.11.1步進電機的工作原理步進電機的結(jié)構(gòu)原理圖如圖3-46所示。返回本節(jié)3.11.1步進電機的工作原理步進電機的結(jié)構(gòu)原理圖如圖3.11.2步進電機控制系統(tǒng)典型的步進電機控制系統(tǒng)如圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論