Ⅰ stc單片機脈寬測試程序
提供個思路給你
計數器 模式
將脈沖接入定時器0的GATE 和中斷0
將脈沖反向接入定時器1的GATE和中斷1
讓後在中斷0裡面讀取 定時器1的計數器 並清零
讓後在中斷1裡面讀取 定時器0的計數器 並清零
這樣
定時器1的記數就是 正脈寬
定時器0的記數就是負 正脈寬
Ⅱ 利用8051單片機定時器T0測量某正脈沖的寬度
原理:分別用脈沖的上升沿和下降沿出發單片機,上升沿給出中斷1開始計數,下降沿給出中斷2停止計數,最後換算出高電平寬度=計數周期數×一個計數的時間。
設置的SFR:TMODE(一定要注意GATE的設置為1),TCON,IE,TH0,TL0等
最大脈寬計算:我們知道計數器中斷的產生是從全1變為全0產生溢出中斷,所以我們計數器的處置設定為00H,如果我們讓其工作在方式1計數下,最大計數值為2^16=65536,那麼最大計數脈沖寬度就是65536*2us。
一定要注意我們利用GATE的控製作用是計數器用來測量脈沖寬度。
不明白的LZ可以在上網路看看利用GATE的控製作用是計數器用來測量脈沖寬度這方面知識,或者我們在交流,呵呵
Ⅲ 51單片機測量脈沖寬度程序
假設用定時器0,一個完整過程是
TH0=0;TL0=0;
whiIe(IN==1);∥等待當前高電平過去
while(IN==0);∥等待高電平來到
TR0=1;∥啟動計時
while(IN==1);∥等待高電平結結束
TR0=0;∥停止計時
HIGH=TH0*256+TL0;∥存計時結果
TH0=0;TL0=0;∥清0
Ⅳ 如何用stc單片機測量脈寬
測量原理,低電平時,等待高電平到來,打開定時器,等待高電平結束,關閉定時器,讀出定時器的值,即是脈沖寬度。當然有時定時器會溢出,要開中斷,把中斷時間也要算上。
Ⅳ 51單片機測量正脈沖寬度
建議你在INT1引腳上,加一個反相器。這樣,可以使用中斷功能來完成。程序如下:
ORG 0000H
SJMP MAIN
ORG 000BH
LJMO I_T0
ORG 00013H
LJMP I_INT1
MAIN:
MOV R0,#0
MOV TMOD,#02H
MOV TH0,#0
MOV TL0,#0
SETB IT1
SETB EA
SETB EX1
SETB ET0
SJMP $
I_INT1:
SETB TR0
JNB P3.3,$
MOV 60H,TL0
MOV 61H,R0
MOV R0,#0
MOV TL0,#0
CLR TR0
RETI
I_T0:
CLR TF0
INC R0
RETI
END
最後正脈沖的寬度為:[(61H)×256+(60H)]×T
其中:T為機器周期,如果是6MHz的話就是2uS,如果是12MHz的話就是2uS。
我評經驗,你要測量正脈沖寬度是要計算占空比。這個程序,實現該功能沒問題。
附帶說一句,你這樣的問題才30分,少了點哇。呵呵,寫程序很辛苦的啦~!:)呵呵
Ⅵ 單片機測量脈寬 能夠用單片機測量1us以下的脈寬嗎,極限是多少
這個和單片機的時鍾頻率有關,比如51單片機,12MHz外晶振,內部定時器使用的就是1MHz的晶振,測量脈沖寬度誤差就是1us。
換句話說,如果要求測量1us的脈寬,以最大1%的誤差計算(0.01us),要求的測量頻率至少是100MHz。這個頻率恐怕沒有幾個單片機做得到的。
如果放寬要求,可以算算看了。以前曾經採用過FPGA,輸入頻率是50MHz(高穩晶振),經PLL倍頻,測量1us的脈沖才剛剛好。
Ⅶ 如何用單片機開發板測量信號源的頻率和脈寬
測頻率的話分兩種
一種是高頻信號
高頻信號的話一般是測1s內檢測到多少個脈沖
另一種是低頻信號
可以採用如你所描述的方法來測量
還有一種精度更高的叫等精度測量
這樣可以進一步降低誤差
Ⅷ 51單片機測量脈沖寬度
脈沖寬度說白了就是連續兩次電平變化所佔用的時間,單片機實現的話就是利用電平變化中斷打開定時器,到再次變化時定時器的讀數(沒有溢出的情況)。
Ⅸ 如何實現單片機實時測量輸入中斷口的脈沖寬度
您好!可以分以下幾步來解決這個問題!
1、首先設置一個定時器,1us中斷一次,然後每次中斷檢測IO的電平。
2、在定時中斷函數內定義一個static 的int類型靜態變數 count;
3、每次檢測到IO口為高電平(假設為高電平脈沖)的時候,count++;
4、在IO口重新回到低電平的時候,count的值就是時間了,比如count為1000,那麼脈沖寬度就是1000*1us=1ms
5、在讀取count的值之後,復位count為0;繼續測量下一個脈沖寬度。
純手打,給個採納唄~
Ⅹ 單片機測量脈沖寬度
如果是單穩態電路的脈沖可以使用上升沿外部中斷捕捉起始邊沿,進入中斷後啟動定時器,設置外部中斷為下降沿,捕捉到下降沿停定時器,讀取定時器即可測得脈沖寬度。