『壹』 如何用單片機接收脈沖信號
STC15W系列單片機,採用外部INT觸發中斷(可以上升沿 與下降沿 同時使能), 脈沖輸入信號用電阻分壓就可以(峰值控制在 3.3 或者 5V,根據VCC電源),可以運行 在 空閑時 掉電狀態(單片機 掉電狀態 電流在 微安 級 低功耗)。
『貳』 STC12C5A60S2單片機如何接收計數脈沖信號脈沖信號需要電壓范圍嗎對外部脈沖信號的要求是什麼
STC12C5A60S2中有2個定時/計數器T0和T1,對應外部引腳是P3.4和P3.5,你可以用其中一個定時/計數器接收脈沖信號。以T1定時器為例,把需要計數的脈沖接在P3.5口,編程時把TOMD定時器中的TOMD.6設置為1(即設為計數工作模式),通過讀取寄存器TH1,TL1值得到脈沖的計數值。需要注意的是最大計數值為65535,超過計數范圍則翻轉,啟動計數前先把TH1,TL1清零。脈沖信號的電壓范圍是0~5V,脈沖寬度不小於1個機器周期。如果脈沖信號和單片機不共地,最好用光耦隔離。
『叄』 求大神幫忙寫個51單片機的接收脈沖程序。
用計數器T1的中斷控制蜂鳴器發出1KHz音頻
#include<reg51.h> // 包含51單片機寄存器定義的頭文件
sbit sound=P3^7; //將sound位定義為P3.7引腳
/**************************************************************
函數功能:主函數
**************************************************************/
void main(void)
{
EA=1; //開總中斷
ET1=1; //定時器T1中斷允許
TMOD=0x10; //TMOD=0001 000B,使用定時器T1的模式1
TH1=(65536-921)/256; //定時器T1的高8位賦初值
TL1=(65536-921)%256; //定時器T1的高8位賦初值
TR1=1; //啟動定時器T1
while(1)//無限循環等待中斷
;
}
/**************************************************************
函數功能:定時器T1的中斷服務程序
**************************************************************/
void Time1(void) interrupt 3 using 0 //「interrupt」聲明函數為中斷服務函數
{
sound=~sound;
TH1=(65536-921)/256; //定時器T1的高8位重新賦初值
TL1=(65536-921)%256; //定時器T1的高8位重新賦初值
}
改改 就成了你的
『肆』 51單片機處理接收的脈沖
核心的思想就是在一個時間段內計算脈沖的數量。可以用外部中斷,有下降沿的時候找個標記位標記一下。程序外通過掃描標記位,對脈沖進行計數。
對脈沖計數的時候可以根據脈沖寬度進行一下過濾。脈沖的計數周期也需要根據脈沖輸出特性進行調整。
『伍』 請大家幫忙:單片機採集外來輸入的脈沖,經過處理輸出4到20ma的電流。
用51單片機控制的話,我建議如下
1.T1、T0設置工作方式為TMOD=0x52;這意思是,T1工作在16位計數狀態,T0工作在8位計時狀態
2.T1引線(P3.5)就可以直接接脈沖信號
3.利用定時T0中斷,執行中斷斗笑讀取T1計數的程序。這里要注意設置T0中斷的時間,該時間為脈沖最大頻率小於65355的時間最好,但你也可以多次采樣,求平均值的方法來獲得頻率F,再把這F存到全局變數K中,就可以了,這里要注意,存的位置是全局變數!!
4.采樣來的頻率F經過轉換如下公式羨銷哪轉化為數字量D,我舉例採用的是8位的D/A,DAC0832是個輸出電流型D/A,你也可以選用16位的,可分點就更多了,如果要很精確的話,記得兄碼數據類型要用FLOAT來計算結果轉為INT,最後賦給D
D=((F+最大頻率/5)/最大頻率)*256
這里說明下,你要輸出的是4~20,F=0時,D要等於4mA