A. 求助,通過52單片機測量外部脈沖寬度,如果脈寬小於某個設定值則輸出一個信號,比如燈亮
需求沒說清楚,脈寬的具體寬度,數量級先搞清楚。對具體實施很關鍵的。
方法有一下:
1、如果單片機有捕捉功能,則在沿上捕捉後記錄定時器時間,然後計算出時間,即可比較輸出信號。
2、如果沒有,接入單片機的中斷管腳(上下沿中斷,如果沒有,進入後立馬改變下次中斷觸發方式,進行上升下降沿中斷的切換),單片機外部中斷服務中記錄定時器時間,然後下次中斷來臨後計算時間,即可比較輸出信號。
3、如果都沒有,功能且單一,脈寬比較寬,要求不高,硬體又沒有在中斷管腳上,可以考慮主程序定時查詢,記錄時間。
5ms,很寬的,如果功能單一的話,定時器都可以免了,直接用單片機指令周期算時間,定義一個長整型變數,不斷監測管腳,監測完變數加一,後再比較。
不過呢,希望還是用我提到的方法2吧,通用些。具體實施自己多想想,另位朋友的代碼慎重使用,問題較多,不一一說明了
B. 單片機測量脈寬 能夠用單片機測量1us以下的脈寬嗎,極限是多少
這個和單片機的時鍾頻率有關,比如51單片機,12MHz外晶振,內部定時器使用的就是1MHz的晶振,測量脈沖寬度誤差就是1us。
換句話說,如果要求測量1us的脈寬,以最大1%的誤差計算(0.01us),要求的測量頻率至少是100MHz。這個頻率恐怕沒有幾個單片機做得到的。
如果放寬要求,可以算算看了。以前曾經採用過FPGA,輸入頻率是50MHz(高穩晶振),經PLL倍頻,測量1us的脈沖才剛剛好。
C. 如何用stc單片機測量脈寬
測量原理,低電平時,等待高電平到來,打開定時器,等待高電平結束,關閉定時器,讀出定時器的值,即是脈沖寬度。當然有時定時器會溢出,要開中斷,把中斷時間也要算上。
D. 利用8051單片機定時器T0測量某正脈沖的寬度
原理:分別用脈沖的上升沿和下降沿出發單片機,上升沿給出中斷1開始計數,下降沿給出中斷2停止計數,最後換算出高電平寬度=計數周期數×一個計數的時間。
設置的SFR:TMODE(一定要注意GATE的設置為1),TCON,IE,TH0,TL0等
最大脈寬計算:我們知道計數器中斷的產生是從全1變為全0產生溢出中斷,所以我們計數器的處置設定為00H,如果我們讓其工作在方式1計數下,最大計數值為2^16=65536,那麼最大計數脈沖寬度就是65536*2us。
一定要注意我們利用GATE的控製作用是計數器用來測量脈沖寬度。
不明白的LZ可以在上網路看看利用GATE的控製作用是計數器用來測量脈沖寬度這方面知識,或者我們在交流,呵呵
E. 單片機PCA能測量1秒脈寬嗎
可以,只要代碼編輯無誤,一般情況下是可以測量的。STC12C系列增強型單片機片上擴展了基本51單片機的功能,如提供了PCA/PWM介面,定時器能工作在1T模式下(基本51單片機的時鍾是Fosc的12分頻,1T模式下1分頻)。PCA可以用於脈寬測量,但是,protues暫不支持該系列單片機的模擬功能,反復燒寫也挺麻煩,所以還是先用基本51單片機實現該功能,在後面的博文里在實現PCA測量脈寬。TMOD最高位GATEn置位後,Tn啟動計數受INTn(Pin3.3)和TRn的共同影響:TRn為1,當INTn引腳輸入為高電平時,Tn才允許計數。利用這個功能可測量INTn上正脈沖的寬度。
F. 如何實現單片機實時測量輸入中斷口的脈沖寬度
您好!可以分以下幾步來解決這個問題!
1、首先設置一個定時器,1us中斷一次,然後每次中斷檢測IO的電平。
2、在定時中斷函數內定義一個static 的int類型靜態變數 count;
3、每次檢測到IO口為高電平(假設為高電平脈沖)的時候,count++;
4、在IO口重新回到低電平的時候,count的值就是時間了,比如count為1000,那麼脈沖寬度就是1000*1us=1ms
5、在讀取count的值之後,復位count為0;繼續測量下一個脈沖寬度。
純手打,給個採納唄~
G. 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
H. 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分,少了點哇。呵呵,寫程序很辛苦的啦~!:)呵呵