|
摘要:利用MCS-5l系列單片機(jī)內(nèi)部定時(shí)/計(jì)數(shù)器控制靈活的特點(diǎn),設(shè)計(jì)出了一個(gè)只用其內(nèi)部一個(gè)定時(shí)/計(jì)數(shù)器測(cè)量脈沖周期連續(xù)變化的脈沖信號(hào)的方法.該方法沒有額外的硬件開銷,只是將脈沖信號(hào)直接引入單片機(jī)的一外部中斷口;軟件設(shè)計(jì)簡(jiǎn)單.其對(duì)脈沖周期測(cè)量誤差不大于2us,測(cè)量脈沖周期范圍廣,可直接用于光電等產(chǎn)品的開發(fā)。
脈沖信號(hào)是工程中一類較常見的信號(hào),如光電位移、速度、轉(zhuǎn)速等傳感器輸出的信號(hào),而脈沖寬度和脈沖周期是其基本參數(shù),往往需對(duì)它們進(jìn)行測(cè)量。對(duì)等周期的脈沖信號(hào)的測(cè)量比較容易,只需測(cè)量任一脈沖寬度或周期就可以了,近年來(lái)已有許多MCS-51用戶利用測(cè)量脈沖信號(hào)的基本參數(shù)而開發(fā)新產(chǎn)品,如山東大學(xué)的“ZBCY—I型智能標(biāo)槍速度測(cè)試儀”就是利用測(cè)量一個(gè)脈沖寬度來(lái)獲得標(biāo)槍在某一飛行距離內(nèi)的平均速度。對(duì)連續(xù)變周期的脈沖信號(hào)周期的測(cè)量則相對(duì)困難些,許多測(cè)量人員都首先對(duì)這類信號(hào)進(jìn)行二分頻后一路反相,然后用兩個(gè)定時(shí)/計(jì)數(shù)器分別測(cè)出兩路脈沖信號(hào)的正脈沖寬度得到周期,這種方法硬件開銷較大,軟件設(shè)計(jì)也較復(fù)雜。本文將介紹了一種用MCS-51單片機(jī)內(nèi)部一個(gè)定時(shí)/計(jì)數(shù)器直接測(cè)量連續(xù)變周期脈沖信號(hào)周期的實(shí)用方法。
用803l內(nèi)部定時(shí)器來(lái)測(cè)連續(xù)變周期的脈沖信號(hào)的周期時(shí),關(guān)鍵是如何控制定時(shí)/計(jì)數(shù)器的啟動(dòng)、停止。以定時(shí)器T1為例,當(dāng)其工作于方式1時(shí),則按16位計(jì)數(shù)器工作,由兩個(gè)特殊功能寄存器THl作為高8位和TLl作為低8位構(gòu)成,其控制邏輯如圖1。
圖1定時(shí),計(jì)數(shù)器方式1的控制邏輯 當(dāng)定時(shí)/計(jì)數(shù)器方式控制寄存器TMOD門控位GATE=0時(shí),計(jì)數(shù)器的啟動(dòng)、停止只受TR1控制,只要TR1置位。計(jì)數(shù)器就被選通,而不管INT1電平高低。因此,在主程序中先置位IE中位EA,將信號(hào)引入INT1,在INT1中斷服務(wù)程序中使TCON中位TR1復(fù)位和置位來(lái)實(shí)現(xiàn)計(jì)數(shù)器的停止、數(shù)據(jù)讀 取、計(jì)數(shù)器賦初值和啟動(dòng)。其工作過程如圖2。
圖2 定時(shí),計(jì)數(shù)器測(cè)脈沖周期簡(jiǎn)圖 其中:t1-中斷服務(wù)程序執(zhí)行時(shí)間 t2-計(jì)數(shù)器計(jì)數(shù)時(shí)間 則:第i個(gè)脈沖周期ti=t1+t2(i=1,2,3,…)。 可以看出,僅用8031內(nèi)部的一個(gè)定時(shí)/計(jì)數(shù)器,就可測(cè)出一路變周期脈沖信號(hào)的每個(gè)周期。 定時(shí)器T1中斷服務(wù)程序流程框圖如圖3所示。
定時(shí)器Tl中斷服務(wù)程序清單如下: INT1:CLR TR1 ;關(guān)計(jì)數(shù)器1 PUSH ACC;ACC入棧 PUSH 00H;R0入棧 CLR C ;清零進(jìn)位標(biāo)志 MOV A,TL1 ;計(jì)數(shù)值低8位→累加器 ADD A,#23H ;計(jì)數(shù)器值+中斷執(zhí)行時(shí)間32us(12MHz晶振)+ ;最小中斷響應(yīng)時(shí)間3-脈沖周期 MOV R0,A ;低8位暫存R0 MOV A,TH1 ADDC A,#00H MOVX @DPTR,A ;脈沖周期高8位→@DPTR指向的RAM單元 INC DPTR ;指向下一RAM單元 MOV A,R0 MOVX @DPTR,A ;脈沖周期低8位→DPTR指向的RAM單元 INC DPTR INC R1 ;脈沖周期個(gè)數(shù)加一 MOV TH1,#00H ;清零計(jì)數(shù)器1 MOV TL1,#00H POP 00H POP ACC SETB TR1 ;重新啟動(dòng)計(jì)數(shù) RETI ;中斷返回
該中斷服務(wù)程序能采樣的最小脈沖周期為32us,若去掉該程序中的現(xiàn)場(chǎng)保護(hù)和將計(jì)數(shù)值變?yōu)槊}沖周期放在采樣后進(jìn)行,則可進(jìn)一步減小能采樣的脈沖周期。能采樣的最大脈沖周期為65535us(12MHz晶振時(shí)),若大于該值,則用戶對(duì)程序稍加修改即可,因此,實(shí)際上對(duì)最大周期可不加限制。設(shè)對(duì)脈沖信號(hào)采樣100個(gè)周期,采樣值存于50H開始的外部RAM中,則主程序如下:
MAIN: PUSH TMOD ;專用寄存器TMOD TCON IE入棧 PUSH TCON PUSH IE MOV THI,#00H ;清零計(jì)數(shù)器 MOV TL1,#00H MOV TMOD.10H;計(jì)數(shù)器1工作方式1 SETB EA ;允許中斷 SETB EX1 ;外部中斷1 SETB IT1 ;INT1負(fù)跳變觸發(fā)中斷 MOV DPTR,#50H;存脈沖周期的RAM首地址 MOV R1,#00H ;R1一控制采樣周期個(gè)散 SETB TR1 ;計(jì)數(shù)器1開始計(jì)時(shí) CJNE R1,#64H,$;等待100個(gè)周期采樣結(jié)束 CLR TR1 ;關(guān)計(jì)數(shù)器 POP IE POP TCON POP TMOD
以上采樣的第一脈沖周期不準(zhǔn),應(yīng)在數(shù)據(jù)處理時(shí)丟掉,也可在中斷服務(wù)程序中加判斷語(yǔ)句自動(dòng)丟掉。由以上可以看出,該方法無(wú)額外硬件,軟件簡(jiǎn)明,能測(cè)量的脈沖周期范圍大,但不能測(cè)得脈沖信號(hào)的第一個(gè)周期。 |