A. 怎樣用51單片機定時器測一個高電平的持續的時間謝謝
給你提供個思路,以12M晶振為例,
如果高電平時間比較短(大概35ms以內)可以使用外部中斷的下降沿中斷,當外部中斷發生時關閉定時器,記錄定時器TH0TL0的值,記錄的定時器TH0TL0的值就是高電平的時間、等待中斷輸入引腳電平為高電平,清零TH0TL0並啟動定時器,反復循環。
如果高電平的時間大於35ms,則需要打開定時器中斷,定時器溢出一次中斷溢出次數Count++,用外部中斷的下降沿中斷,當外部中斷發生時關閉定時器,記錄定時器TH0TL0的值、計算高電平時間(高電平時間=定時器的值+Count*定時器的溢出時間),清零Count,等待中斷輸入引腳電平為高電平,清零TH0TL0並啟動定時器,反復循環。
B. HC600S-51單片機開發板 定時器計數器實驗
看樣子是想要實現LED燈閃爍。定時器1定時時間到產生中斷,取反P1.1引腳,但是沒有中斷返回,而是一直高速取反P1.1,幾乎看不出引腳狀態變化。
C. 51單片機定時器原理
很簡單,就是系統時鍾同步觸發定時器計數(向上或向下),定時器與比較寄存器內的預設值比較,當達到預設值或者向下計數歸零後再次載入預設值到比較寄存器裡面,定時器啟動和停止都受到TON標志位計算,對其操作即可。
D. 關於MCS-51系列單片機定時器/計數器實驗的幾個問題
(1)計數和定時有什麼區別?怎樣選擇和設定?
(2)計數或定時初始值怎樣計算與裝入?
(3)定時器T0和T1各有哪幾種工作方式?工作原理如何?
(4)怎樣啟動定時器?
這些,夠寫十多頁了。
E. 51單片機定時器的使用
51單片機定時器的GATE=1時,用外部INT0啟動定時器,當INT0=0時,
定時器T1會停止計數,這個時候讀取T1的值是可以計算出高電平的寬度的。
F. 51單片機實驗程序
#include "REG52.H"
unsigned char Extep_Time ;
/*
* T0定時器初始化 //
*/
void SystemInit(void)
{
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
int main(void)
{
// IO初始化
P0 = 0xFF;
P1 = 0xFF;
P0 = 0xFF;
P1 = 0xFF;
// T0定時器初始化
SystemInit();
while(1);
}
/*
* T0定時器中斷服務程序
*/
void Timero_IRQ(void) interrupt 1
{
Extep_Time++;
if(Extep_Time == 20)
{
Extep_Time = 0;
P0 = ~P0;
}
}
G. 51單片機的定時器是怎麼設置的
單片機定時器的設置步驟為:
1、設置定時器的工作模式,共4種工作方式,兩種模式(計數器/定時器)。比如:
MOV TMOD,#01;設置定時器0位定時器模式,工作方式1
2、根據定時時間賦初值。比如定時10毫秒,那麼如果12M晶振的話是10000個機器周期。定時器是溢出申請中斷,所以用溢出值減去定時周期為初值。
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
3、開啟中斷、定時器。
SETB ET0
SETB EA
SETB TR0
H. 51單片機實驗(關於定時器計數器)
6mz的晶振 可算出一個時鍾周期為2微秒,200毫秒去除一下2微秒就是10000,然後吧10000取16進制為 27A0 ,用 FFFF減27A0再加1 得 C860,用定時方式一,TL0 ,#60H
TH0, #C8H