導航:首頁 > 操作系統 > 單片機脈沖計數程序

單片機脈沖計數程序

發布時間:2025-02-07 16:46:53

1. 51單片機使用T0和T1外部脈沖計數,C語言如何編程

1、使用T0和T1外部脈沖計數,控制兩個電機,到1700個脈沖電機停止,
--統計脈沖個數,用外部中斷更好。
--T0和T1,留著定時用。
用四個按鍵控制,按鍵1控制電機正轉,按鍵2控制電機反轉,按鍵3控制電機1正轉,按鍵4控制電機2正轉。


2、常式:

#include<reg51.h>
sbitk1=?;//自己定義
sbitk2=?
sbitk3=?
sbitk4=?
sbitDIAN1=?
sbitDIAN2=?
sbitDIAN3=?
sbitDIAN4=?
sbitSEN1=?
sbitSEN2=?
voiddelay(unsignedintx)
{
unsignedintm,n;
for(m=x;m>0;m--)for(n=115;n>0;n--);
}
voidmain(void)
{
TMOD=0x55;
IE=0x8a;
while(1){
if(!k1){
delay(10);
if(!k1){
while(!k1);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=0;DIAN2=1;
SEN1=1;
TR0=1;
}
}
if(!k2){
delay(10);
if(!k2){
while(!k2);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=1;DIAN2=0;
SEN1=1;
TR0=1;
}
}
if(!k3){
delay(10);
if(!k3){
while(!k3);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=0;DIAN4=1;
SEN2=1;
TR1=1;
}
}
if(!k4){
delay(10);
if(!k4){
while(!k4);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=1;DIAN4=0;
SEN2=1;
TR1=1;
}
}
}
}

2. 51單片機c語言脈沖計數並顯示程序

TMOD=0x05;
TH0=0;TL0=0;
TR0=1;
while(1)
{
a=TH0*256+TL0;
display(a);
}

3. 單片機用c語言編一個程序,要求用內部定時/計數器對30個脈沖進行計數,並同時對這三十個脈沖進行計時。

看了一下你的要求,單片機里有個GATE位的設置如果你懂得用,編這個程序就不難了。下面是我個人按照你要求剛編的程序:
/***********************
功能:內部定時/計數器記錄脈沖個數和這些脈沖通過後所用的時間。
硬體:單片機用AT89c51,12M晶振。
原理:當門控位GATE為「1」時,TR0/1=1,INT0/1才能啟動定時器。
利用這個特性可以測量外部輸入脈沖的寬度。
分析:設外部脈沖由(P3.2)輸入,T0工作於定時方式1(16位計數),
GATE設為1.測試時,應在INT0低電平時,設置TR0為1(避免檢測
到正在進行的脈沖);當INT0為高電平時,就啟動計數,INT0再
次變低時,停止計數。此計數值與機器周期的乘積即為被測正脈
沖的寬度。因晶振為12MHz,機器周期為1us.
************************/
#include <reg51.h>
//sbit INT0=P3^2;//INT0在頭文件里已定義為P3^2口
#define uint unsigned int
uint pulseWidth[30],num;
void init()
{
num=0;
TMOD=0x09;//選擇定時器並設T0為方式1
TH0=0x00; //設計數初會為最大值
TL0=0x00;
}
main()
{
init();
while(1)
{
if(num<30) //記錄30個脈沖
{
while(INT0);//等待INT0變低
TR0=1; //應在INT0低電平時,設置TR0為1
while(!INT0);//等待INT0變高,啟動定時器開始計數
while(INT0); //等待INT0變低,停止定時器開始計數
TR0=0;
pulseWidth[num]=(uint)TL0;
pulseWidth[num]|=(uint)(TH0<<8);
//因機器周期為1us,故pulseWidth數組里存的數目加上單位us,
//即為所求的脈沖寬度
num++;
}
}
}

4. 基於單片機的脈沖定時計數器C語言程序

#include<reg52.h>

unsigned int ui_n = 0;

void main(void)
{
TR0 = 1; //啟動
IE = 0x82;
while(1);
}
void T0_INT(void) interrupt 1
{
ui_n++;
if(ui_n == 7324) ui_n = 0;
}

5. 51單片機對脈沖計數的問題

破題:

「脈沖夠10次,"->既然沒有時間的限制,則推斷應該為連續的10個脈沖。

「點亮一個LED,"->應該有多個LED,每當有連續的十個脈沖,則多點亮一個LED。

"脈沖不夠10次,一切回零,」->沒有脈沖了,或者說脈沖連續不上了,則熄滅所有LED。

」等待下次脈沖計數。"->既然已經開始等待下次脈沖計數了,就說明,在脈沖消失的同時應該熄滅所有燈,不需要繼續向後延續10個周期。

分兩個理解:

一、點亮過程:

從第0秒算起,以4秒為一個周期,至第40秒,如果存在「連續」的十個脈沖,點亮LED1。

繼續計算,至第80秒,如果存存在「連續」的十個脈沖,點亮LED2。

.......以此類推,直至點亮LEDn。

二、熄滅過程:

只要有一次,在4秒的周期內沒有脈沖,則判斷為,不夠十次!

不知道項目是誰給你的,最好還是問問提出者,否則一旦出了問題,你的工作就白做了!

6. 51單片機的計數器程序

為了使T1能夠進行計數,需要在外接P3.5引腳上添加計數脈沖信號。接著,我使用了特定的程序進行模擬,結果顯示在下圖中,通過數碼管顯示了TL1等於1的狀態。

具體來說,這個程序設計的目的是為了實現外部計數脈沖信號的輸入,並通過T1進行計數。當T1接收到計數脈沖信號時,它會根據設定的計數規則進行相應的計數操作。在模擬過程中,我們通過數碼管直觀地展示了TL1的計數值,以便於觀察計數器的工作狀態。

在程序中,我們設置了TL1寄存器的初始值為1,以測試計數器的性能。當外部計數脈沖信號被輸入到P3.5引腳時,T1會根據計數規則進行遞增計數。在模擬結果中,我們可以清晰地看到TL1的計數值變化,從而驗證了計數器的工作效果。

此外,為了確保計數器能夠穩定工作,我們還進行了多次模擬實驗,以驗證程序的可靠性和准確性。通過這些實驗,我們發現該計數器能夠正確地響應外部計數脈沖信號,並且計數結果符合預期。

總之,通過上述程序的實現和模擬,我們成功地驗證了51單片機的計數器功能。這一過程不僅展示了計數器的基本工作原理,還為我們提供了寶貴的經驗,以便在未來開發更復雜的應用程序時,能夠更加靈活地運用計數器功能。

7. 怎麼實現mcs-51單片機對外部脈沖的計數功能

外部脈沖接單片機的外部中斷或2 個定時/計數器都可以計數的。

8. 用單片機對外來脈沖計數(C語言程序)

要設定16位定時讀數器T0或T1,工作方式1、2、3,計數值最大為65536=0xFFFFH,即給高低位分別裝入計數初始值TH0(TH1)=FFH,TL0=FFH,可設為中斷函數,當計數溢出後自動引發中斷,在程序運行時調用即可~

鍵盤設置到處都有,搜一下就行了

閱讀全文

與單片機脈沖計數程序相關的資料

熱點內容
嵌入式py編譯器 瀏覽:318
rplayer下載安卓哪個文件夾 瀏覽:296
安卓手機里的電子狗怎麼用 瀏覽:748
pythonspyder入門 瀏覽:764
趣質貓app是什麼 瀏覽:60
皮帶壓縮機經常吸不上 瀏覽:205
西部隨行版怎樣加密 瀏覽:996
釘釘上如何壓縮圖片 瀏覽:924
cad輸入命令不顯示窗口 瀏覽:618
小米視頻加密之後怎麼看 瀏覽:76
超級程序員劉芳閱讀 瀏覽:833
顧家九爺在哪個app 瀏覽:820
我的世界怎麼在聯機大廳做伺服器 瀏覽:290
分手程序員 瀏覽:447
php將html導出為word 瀏覽:801
騰訊加密視頻能破解嗎 瀏覽:1007
反編譯後導入eclipse 瀏覽:948
買阿里雲伺服器有郵箱嗎 瀏覽:825
pdf卡片2004 瀏覽:309
e算量加密鎖檢測不到 瀏覽:777