㈠ 用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
;
;
中斷返回
㈡ 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;
}
}
}
㈢ 如何用單片機記脈沖數
1、用單片機產生200ms,占空比為50%的周期信號,即高低電平各100ms;
2、將該200ms信號接到INT0或INT1上,將外部脈沖信號接到T0或T1上,注意要對應接,即INT0與TO一起用或INT1和T1一起用。
3、設置定時器/計數器工作方式控制寄存器TMOD的GATE = 1(門控方式) ,C/T = 1 (計數方式)。
這樣,就可以用100ms作為一個控制門,在這個門有效(相應外部中斷)時,外部計數脈沖就可以進入這個門,定時器/計數器計數初值設為加1就溢出,中斷服務程序中計數就可以了。
㈣ 單片機脈沖計數
將定時器設置為外部輸入下降沿觸發,開中斷
在中斷程序里做一個變數寄存器如TOCNT
每進一次中斷t0cnt++;
if(t0cnt>10)
P1.1=~P1.1
㈤ 51單片機如何用計數器檢測脈沖信號(高低電平),程序怎麼做!沒有思路!
可以利用51單片機的計數器T0、T1,例如用計數器0的外部計數脈沖輸入端T0計數,當計滿100個脈沖數量後,觸發中斷。進入計數服務中斷程序。
如果有脈沖信號,經過電容微分後,在下降沿會產生一個向下的尖端脈沖,電阻R2是作為一個偏置,當有向下的尖端脈沖來後,反相端的電壓會低於同向端的電壓。
從而比較器輸出高電平,這個電路圖要注意的兩個參數是,1,比較器的選擇,你可以選LM339,要加上拉電阻。
(5)單片機脈沖計數實驗擴展閱讀:
通向輸入端的那兩個電阻是用來產生一個參考電壓的,電容用來微分你的PWM波,你可以用示波器在反向輸入端觀察微分信號。
主程序中可根據不同運行狀態調用部分子函數。需要開機按鍵設置時,優先執行按鍵程序,其它需要設置以後才能運行的子函數暫時不調用,減少單片機被佔用過多。
設置後,不需要按鍵了,就不調用按鍵程序了。如果需要隨時按鍵都要反應,可以把按鍵接到外部中斷上,以中斷方式響應按鍵,不受其他子函數影響。
㈥ 51單片機脈沖計數
你好!
那就用外部中斷來檢測吧,速度快精度高
void outside() interrupt 0
{
T0count++;
}
然後將計數,通過液晶顯示出來就可
㈦ 單片機定時/計數器實驗--脈沖計數器
這是個簡易頻率計,程序如下:
;---------------------------------
ORG0000H
JMPSTART
ORG000BH
JMPT0_INT
;---------------------------------
START:
MOVTMOD,#51H;/*01010001T1計數,T0定時*/
MOVTH0,#HIGH(65536-50000);50ms@12MHz
MOVTL0,#LOW(65536-50000)
MOVTH1,#0
MOVTL1,#0
SETBTR0
SETBTR1
SETBET0
SETBEA
MOVR7,#20
SJMP$
;---------------------------------
T0_INT:;50ms執行一次
MOVTL0,#LOW(65536-50000);重新寫入初始值
MOVTH0,#HIGH(65536-50000);50ms@12MHz
DJNZR7,T0_END
MOVR7,#20
MOVP1,TL1
MOVP2,TH1
MOVTL1,#0
MOVTH1,#0
T0_END:
RETI
;---------------------------------
用PROTEUS模擬如下圖。
圖中信號的頻率是5000Hz,顯示的是16進制,這是題目中要求的形式。