A. 51單片機怎麼實現外部脈沖計數
#include<reg51.h>
#define uint unsigned int
uint dat=0,time=0;
bit flag=0;
sbit key=P1^0;
void int00() interrupt 0
{
dat++;
}
void t0isr() interrupt 1
{
time++;
if(time>=400)flag=1;
}
main()
{
TMOD=0x22;
TH0=6;
TL0=6;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
ET0=1;
EX0=1;
IT0=1;
PX0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
TR0=1;
while(flag==0);
TR0=0;
flag=0;
SBUF=dat;
while(TI==0);
TI=0;
SBUF=dat>>8;
while(TI==0);
TI=0;
}
}
}
B. 51單片機,計數器和定時器具體這么用計數器記的是誰的脈沖數
定時器和計數器雖然有定時和技術兩種工作模式,但其本質都是使用加法計數器對脈沖進行計數。定時器/計數器每接受一個計數脈沖,加法計數器的值就加1;計滿時則發生溢出,計數器又從0開始計數並置溢出標志位(TF0=1或TF1=1)。
1)定時模式
在此模式下,計數器的輸入脈沖是由晶振12分頻獲得的。例如,晶振頻率為12MHz的值加1.這樣就可以根據計數值計算定時時間,也可以根據定時時間計算計數器的初值。
2)計數模式
在此模式下,計數器的輸入脈沖是由外部引腳(T0或T1)輸入的。外部引腳出現下降沿時,對應計數器的值加1.如果設置計數器的初值,那麼讀取當時計數器就可以計算脈沖個數。
完全手打,請採納
C. 用C51單片機統計脈沖次數
舉例解答如下:
利用定時器T1,對外部脈沖(P3.5引腳輸入)計數,
每輸入200次脈沖產生一次中斷,累加器+1,
選用T1,計數器模式,方式2(自動重裝初值8位計數器),
TMOD
=0110
0000B
=60H
計數初值
=2^8
-200
=256
-200
=56d
=38H,
匯編程序如下:
;
;
主程序:
MAIN:
CLR
A
;
;
累加器清零
MOV
TMOD,
#60H
;
;置T1計數模式、方式2
MOV
TL1,
#38H
;
;
寫入計數初值
MOV
TH1,
#38H
;
;
寫入留待自動重裝的初值
SETB
TR1
;
;
啟動T1計數
SETB
ET1
;
;
允許T1中斷
SETB
EB
;
;
CPU開中斷
SJMP
$
;
;
等待一輪對外部脈沖計數溢出中斷
;
;
以下是T1中斷處理子程序:
T1_INT:
INC
A
;
;
累加器加1
RETI
;
;
中斷返回
D. 51單片機脈沖計數
你好!
那就用外部中斷來檢測吧,速度快精度高
void outside() interrupt 0
{
T0count++;
}
然後將計數,通過液晶顯示出來就可
E. 51單片機c語言脈沖計數並顯示程序
TMOD=0x05;
TH0=0;TL0=0;
TR0=1;
while(1)
{
a=TH0*256+TL0;
display(a);
}
F. 51單片機計數器怎麼用
51單片機是基礎入門的一個單片機,還是應用最廣泛的。
51單片機的定時/計數器的概念
單片機中,脈沖計數與時間之間的關系十分密切,每輸入一個脈沖,計數器的值就會自動累加1,只要相鄰兩個計數脈沖之間的時間間隔相等,則計數值就代表了時間的流逝,因此,單片機中的定時器和計數器其實是同一個物理的電子元件,只不過計數器記錄的是單片機外部發生的事情(接受的是外部脈沖),而定時器則是由單片機自身提供的一個非常穩定的計數器,這個穩定的計數器就是單片機上連接的晶振部件;MCS-51單片機的晶振經過12分頻之後提供給單片機穩定脈沖;晶振的頻率是非常准確的,所以單片機的計數脈沖之間的時間間隔也是非常准確的。
51單片機的定時/計數器的工作原理
加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鍾振盪器輸出脈沖經12分頻後送來;一個是T0或T1引腳輸入的外部脈沖源。
作為定時器使用時,定時器計數8051單片機片內振盪器輸出經過12分頻後的脈沖個數,即:每個機器周期使定時器T0/T1的寄存器值自動累加1,直到溢出,溢出後繼續從0開始循環計數;所以,定時器的解析度是時鍾振盪頻率的1/12;
作為計數器使用時,通過引腳T0(P3.4)或T1(P3.5)對外部脈沖信號進行計數,當輸入的外部脈沖信號發生從1到0的負跳變時,計數器的值就自動加1由於檢測一個從1到0的下降沿需要2個機器周期,因此要求被采樣的電平至少要維持一個機器周期。當晶振頻率為12MHz時,最高計數頻率不超過1/2MHz,即計數脈沖的周期要大於2微秒。;計數器的最高頻率一般是時鍾振盪頻率的1/24;
由此可知,不論是定時器還是計數器工作方式,定時器T0和T1均不佔用CPU的時間,除非定時器/計數器T0和T1溢出,才可能引起CPU中斷,轉而去執行中斷處理程序。所以說,定時器/計數器是單片機中效率高而工作靈活的部件。
G. 51單片機怎麼實現每50個脈沖計一次數
這個實現還是挺簡單的
可以使用外部中斷方式接收脈沖信號,將外部中斷設置為下降沿觸發,每次產生中斷在中斷處理程序中做一個累加的變數(i),當i值累加到50的時候 再對計數50次脈沖的變數(k)加1,再清i變數為0。
H. 51單片機對脈沖計數的問題
破題:
「脈沖夠10次,"->既然沒有時間的限制,則推斷應該為連續的10個脈沖。
「點亮一個LED,"->應該有多個LED,每當有連續的十個脈沖,則多點亮一個LED。
"脈沖不夠10次,一切回零,」->沒有脈沖了,或者說脈沖連續不上了,則熄滅所有LED。
」等待下次脈沖計數。"->既然已經開始等待下次脈沖計數了,就說明,在脈沖消失的同時應該熄滅所有燈,不需要繼續向後延續10個周期。
分兩個理解:
一、點亮過程:
從第0秒算起,以4秒為一個周期,至第40秒,如果存在「連續」的十個脈沖,點亮LED1。
繼續計算,至第80秒,如果存存在「連續」的十個脈沖,點亮LED2。
.......以此類推,直至點亮LEDn。
二、熄滅過程:
只要有一次,在4秒的周期內沒有脈沖,則判斷為,不夠十次!
不知道項目是誰給你的,最好還是問問提出者,否則一旦出了問題,你的工作就白做了!
I. 51單片機脈沖計數新手求助
void main()
{
TMOD=0X03;//計數器0、16位自動重裝模式
TH0=0xfc;//這里為你想要奇數多少次中斷一次的值(這里的值為1000次中斷一次)
TL0=0x18;//65536-你想要計的次數=TH0+TL0的值
TR0=1;
ET0=1;
EA=1;
while(1)
{
;
}
}
void Counter0_Rountine interrupt 1
{
TH0=0xfc;//每計數1000次就重新裝入一次中斷值
TL0=0x18;
在這里寫你計數1000次後想要執行的內容
}
J. 51單片機如何用計數器檢測脈沖信號(高低電平),程序怎麼做!沒有思路!
可以利用51單片機的計數器T0、T1,例如用計數器0的外部計數脈沖輸入端T0計數,當計滿100個脈沖數量後,觸發中斷。進入計數服務中斷程序。
如果有脈沖信號,經過電容微分後,在下降沿會產生一個向下的尖端脈沖,電阻R2是作為一個偏置,當有向下的尖端脈沖來後,反相端的電壓會低於同向端的電壓。
從而比較器輸出高電平,這個電路圖要注意的兩個參數是,1,比較器的選擇,你可以選LM339,要加上拉電阻。
(10)51單片機對輸入脈沖計數擴展閱讀:
通向輸入端的那兩個電阻是用來產生一個參考電壓的,電容用來微分你的PWM波,你可以用示波器在反向輸入端觀察微分信號。
主程序中可根據不同運行狀態調用部分子函數。需要開機按鍵設置時,優先執行按鍵程序,其它需要設置以後才能運行的子函數暫時不調用,減少單片機被佔用過多。
設置後,不需要按鍵了,就不調用按鍵程序了。如果需要隨時按鍵都要反應,可以把按鍵接到外部中斷上,以中斷方式響應按鍵,不受其他子函數影響。