導航:首頁 > 操作系統 > 單片機頻率計數器

單片機頻率計數器

發布時間:2025-01-07 09:57:23

『壹』 51單片機用定時器計數器測量頻率

定時器1對外部脈沖計數時TMOD高4位設置應該是5
因此TMOD=0x51;
以下我的頻率計程序:
#include <reg52.h>//因沒用到STC12C5410專有特殊功能寄存器,此處用52或51的頭文件均可
#define unit unsigned int
#define uchar unsigned char
//定義以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏寫選擇,0命令 1數據
sbit rw=P1^4;//液晶屏讀寫選擇
sbit lcden=P1^5;//液晶屏使能
sbit fm=P1^7;//蜂鳴器

#define db P2 //定義P2為數據輸出口,寫數據時用db代替P2,增加液晶屏程序的通用性

//更改硬體接線時,只更改此處,而不必去更改液晶屏讀寫子程序
uchar aa,bb,cc;//變數聲明
unit dd,ee;
void Delay1ms(unsigned int i) //1ms延時程序

{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化設置

{
TMOD=0x15;//定時器0作為計數器,定時器1作為定時器用
TH0=0;//計數器清0
TL0=0;
EA=1;//開總中斷
ET1=1;//允許定時器1中斷
TH1=0x4c;
TL1=0x5c;
TR0=1;//啟動計數器
TR1=1;//啟動定時器
aa=0;
}
void write_com(uchar com)//向液晶屏寫命令

{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏寫數據

{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);
Delay1ms(10*12);
write_com(0x0f);
Delay1ms(10*12);
write_com(0x06);
Delay1ms(10*12);
write_com(0x01);
Delay1ms(10*12);
}
void display4(unsigned int number) //單行多位顯示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分離出萬,千,百,十,個,對於int型數據,最大不超過65535
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1個數據的位置設定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//寫數據
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);

write_com(0x87);//第6個數據'H'的位置,中間空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很簡單
{
init();//初始化
while(1)//循環程序
{
dd=bb*256+cc;//0.5S的計數值
ee=2*dd;//換算為1秒鍾的計數值
if(aa==1)
{
if(TH0>12)//預判斷,50ms內TH0>12,1s內計數值將超過可計數的最大值65535
fm=0;//報警
}
display4(ee);//顯示
fm=1;//報警停止
}
}
void timer1()interrupt 3//注意:定時器1的中斷序號為3
{
aa++;
TH1=0x4c;//11.0592Mhz
TL1=0x5c;
if(aa==10)//中斷10次,共0.5S
{
TR0=0;//暫停計數
aa=0;
bb=TH0;//讀出計數器數據
cc=TL0;
TL0=0;//計數器清0
TH0=0;
TR0=1;//重新啟動
}
}

『貳』 如何用單片機的定時/計數器計算頻率並用LED數碼管顯示

用的是多倍周期法。。
首先用個計數器來計脈沖的個數,比如說是16個
用定時器來記這16個脈沖的時間t。。。
16/t就是你所求的頻率啊。。

『叄』 單片機中用定時器 和計數器來求頻率 計算公式是怎麼寫的

用定時器來及頻率,你只需將定時器定時為1秒,1秒內的脈沖個數就是頻率了。如果你一定要公式,非常簡單,用計數器計到的脈沖個數除以定時時間就是頻率了。其中定時器每計一次的時間是晶振的十二分之一,例如,12M晶振就是(12*10^6)*(1/12)=1us.

閱讀全文

與單片機頻率計數器相關的資料

熱點內容
oracle命令導出 瀏覽:536
androidaccessory 瀏覽:693
做傳奇什麼情況需要伺服器 瀏覽:635
鄭州鯤鵬伺服器如何選擇 瀏覽:482
怎麼下載商家app 瀏覽:380
貴州省dns伺服器地址雲空間 瀏覽:781
githubpython教程 瀏覽:511
程序員接受別人批評 瀏覽:870
編譯運行按哪個鍵 瀏覽:438
程序員那麼可愛小說免費看 瀏覽:475
華為android招聘 瀏覽:227
php獲取埠號 瀏覽:456
ubuntusudo命令 瀏覽:581
騰訊雲編譯打包 瀏覽:426
混沌pdf 瀏覽:364
安卓手機斷流是什麼意思 瀏覽:371
上滑命令 瀏覽:901
linux紅帽伺服器版 瀏覽:65
檢查jdk版本命令 瀏覽:962
如何加入葉楓伺服器 瀏覽:863