1. 怎麼用C語言編寫51單片機測脈寬的程序~ 跪求完整程序!
#include<reg51.h>
#define uint unsigned int
uint width;
sbit pulse=P3^2;
main()
{
TMOD=0x09; //定時器0模式1,GATE=1
TH0=0;
TL0=0;
while(pulse); //等待P3.2變低
TR0=1; //啟動定時器0
while(!pulse); //等待脈沖變高
while(pulse); //等待脈沖變低
TR0=0; //關閉定時器0
pulse=TH0*256+TL0; //取定時值。
while(1);
}
2. 老師布置的課程設計,用51單片機設計一個數字脈寬測量儀,本人剛學51,急求程序!!要求如下:
被測信號接入外中斷引腳,電平變化時立即採集定時器的當前值.
由於定時器值的變化率是已知的,因此可以據此算出高低電平寬度.
顯示和通訊都是最基礎的應用,隨便一本入門書都有詳細講解.
3. 怎樣用51單片機計數器測量一個高電平脈沖的寬度,c語言程式,高電平開始計數,低電平停止並讀取計數值。謝
設你的P0.0接入脈沖,用T0定時計數器計數:
TR0 = 0;
while(P0.0 == 0) //當檢測到高電平,開啟計數器
TR0 =1;
while(P0.0 == 1) //當脈沖變低,關閉計數器
TR0 = 0;
然後直接讀取 TH0和TL0中的計數數據,再乘以你的計數時間間隔(每計一個數的時間,跟你的時鍾頻率有關系)。
4. 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分,少了點哇。呵呵,寫程序很辛苦的啦~!:)呵呵
5. 51單片機測量脈沖寬度
脈沖寬度說白了就是連續兩次電平變化所佔用的時間,單片機實現的話就是利用電平變化中斷打開定時器,到再次變化時定時器的讀數(沒有溢出的情況)。
6. 51單片機怎麼同時測量4路的脈沖寬度
方法如下:
如果單片有捕獲功能的話,直接用捕獲功能測量脈寬就行了,具體怎麼操作得看你用什麼單片機了,STC就有帶捕獲功能的單片的。
如果單片沒有捕獲,那就把輸入的信號接到單片的終埠,用信號的邊沿觸發外部中斷,在程序里開啟計數器計數,等到下次中斷到來時,取計數的值,然後根據計數值頻率就可以算出輸入信號的脈寬了
7. 怎樣用51單片機的計數器0來計一個脈沖寬度
將計數器設置成計數模式,時鍾輸入選擇外部輸入,也就是你那個脈沖作為時鍾,開始計數即可
8. 求助:採用STC2051單片機測量脈沖寬度~~
提供個思路給你
計數器 模式
將脈沖接入定時器0的GATE 和中斷0
將脈沖反向接入定時器1的GATE和中斷1
讓後在中斷0裡面讀取 定時器1的計數器 並清零
讓後在中斷1裡面讀取 定時器0的計數器 並清零
這樣
定時器1的記數就是 正脈寬
定時器0的記數就是負 正脈寬
9. 用51單片機編程測脈沖寬度
現在的霍爾感測器的輸出信號一般都是開關信號,所以使用單片機的任何一個io口都可以,判斷高低電平即可。
10. 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