㈠ 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
㈡ 單片機定時器設置步驟
搜狐網
晴 / -25°
新手入門!如何設置單片機定時器?
嵌入式資訊精選
2018-12-05
訂閱
在單片機的學習過程中,單片機定時器的合理設置和應用是非常關鍵的一步,也是剛開始接觸單片機知識的新人工程師們比較容易出錯誤的一個環節之一。在今天的文章中,我們為大家總結了單片機定時器應用過程中的兩大常見問題進行實時解析,希望能夠對各位新人工程師的學習提供一定幫助。
問題一:51單片機的T0、T1定時器四種工作方式各有什麼特點?
在單片機定時器的應用過程中,定時器在進行設置時會有四種不同的工作方式,合理選擇相應的工作方式可以幫助工程師快速完成及時設置。下面我們就來逐一講解一下這四種不同的計時方式。方式0是單片機計時器的第一種計時方式,這一方式13位計數模式。方式1則採用16位計數模式,方式2採用8位自動重裝入計數模式,這兩種技術模式也是目前在單片機應用過程中最常使用的及時方式。最後一種單片機定時器的計時方式是方式3,這一模式下只有T0有的雙8位計數模式。
㈢ 單片機定時器的使用方法
第一步:設置特殊功能寄存器 TMOD,配置好工作模式。
第二步:設置計數寄存器 TH0 和 TL0 的初值。
第三步:設置 TCON,通過 TR0 置 1 來讓定時器開始計數。
第四步:判斷 TCON 寄存器的 TF0 位,監測定時器溢出情況。
寫程序之前,我們要先來學會計算如何用定時器定時時間。我們的晶振是 11.0592M,時鍾周期就是 1/11059200,機器周期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器周期得到 0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。16 位定時器的溢出值是 65536(因 65535 再加 1 才是溢出),於是我們就可以這樣操作,先給 TH0 和 TL0一個初始值,讓它們經過 18432 個機器周期後剛好達到 65536,也就是溢出,溢出後可以通過檢測 TF0 的值得知,就剛好是 0.02 秒。那麼初值 y = 65536 - 18432 = 47104,轉成 16 進制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。
這樣 0.02 秒的定時我們就做出來了,細心的同學會發現,如果初值直接給一個 0x0000,一直到 65536 溢出,定時器定時值最大也就是 71ms 左右,那麼我們想定時更長時間怎麼辦呢?用你小學學過的邏輯,倍數關系就可以解決此問題。
好了,我們下面就用程序來實現這個功能。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
unsigned char cnt = 0; //定義一個計數變數,記錄 T0 溢出次數
ENLED = 0; //使能 U3,選擇獨立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
TMOD = 0x01; //設置 T0 為模式 1
TH0 = 0xB8; //為 T0 賦初值 0xB800
TL0 = 0x00;
TR0 = 1; //啟動 T0
while (1){
if (TF0 == 1){ //判斷 T0 是否溢出
TF0 = 0; //T0 溢出後,清零中斷標志
TH0 = 0xB8; //並重新賦初值
TL0 = 0x00;
cnt++; //計數值自加 1
if (cnt 》= 50){ //判斷 T0 溢出是否達到 50 次
cnt = 0; //達到 50 次後計數值清零
LED = ~LED; //LED 取反:0--》1、1--》0
}
}
}
}
程序中都寫了注釋,結合前幾章學的內容,自己分析一下,不難理解。本程序實現的結果是開發板上最右邊的小燈點亮一秒,熄滅一秒,也就是以 0.5Hz 的頻率進行閃爍
㈣ 單片機定時器如何用按鍵調整
判斷咯
while(1) 監控外面狀態
將延時函數的定義成delay(int a){while(a--);}這種形勢
調用的時候可以用delay(b); b的定義為全局變數
可以設定一個初值
如果有按鍵按下 在判斷按鍵按下的時候 將b的值改變成你想要的就OK
如果不用WHILE 監控狀態 用外部中斷也可以
按鍵讀取別忘記去抖哦 :-)
㈤ 51單片機定時器的使用
51單片機定時器的GATE=1時,用外部INT0啟動定時器,當INT0=0時,
定時器T1會停止計數,這個時候讀取T1的值是可以計算出高電平的寬度的。
㈥ 你好 就單片機按鍵修改定時器時間問題。
恩!按鍵修改定時器時間的意思就是說!
按鍵控制定時器的的定時時間的改變!
定時器的定時時間是由TH和TL這倆個控制的!如果你改變了這倆個寄存器的值。那麼你就實現了定時器定時時間的修改!
剩下的就是按鍵的控制了!如果你按下按鍵定時器的時間TH和TL增加或者是減少!你就實現了按鍵控制的功能!
//下面的這個程序是一個很好的說明!不過這個程序不是我寫的!如果你想加分就給程序的主人加分吧!我只對程序做一個解釋
#include <reg51.h>
sbit key = P3 ^ 0;
unsigned char Mode = 0;//在程序中有倆個定時時間的模式0和1
//通過按鍵來控制選擇的是那種模式
void delayms( unsigned int t );
void main( void )
{
TMOD = 0x01;
TH0 = 0XFF;
TL0 = 0XFF;
ET0 = 1;
TR0 = 1;
EA = 1;
while(1)
{
if( !key )//按鍵的判斷是否有按鍵按下,並且每次按下後實現模式1和模式0的相互轉換
{
delayms(30);// 延時我就不寫了,你自己寫
if( !key )
{
Mode++;
if( Mode == 3 ) Mode = 0;
}
}
}
}
void timer0_isr( void ) interrupt 1
{
switch( Mode)
{
//下面case 0:是模式0時候的定時器的定時時間
case 0: TH0 = 0XF0;TL0 = 0X01;break; // 我隨意賦值的
//下面case 1:是模式1時候的定時器的定時時間
case 1: TH0 = 0XFd;TL0 = 0X01;break; // 我隨意賦值的
// 自己加
}
希望你能明白
}
㈦ 單片機按鍵怎麼累加定時器
你將顯示放main主循環里顯示即可,還有,在你的按下去的按鍵按下裡面,也加上顯示函數不就可以顯示了。
㈧ 單片機,我在學定時器,希望按下按鍵後定時器能運行,松開後保持,再按一次後停止運行
首先定義一個變數state來標記是運行還是停止,設state為1時運行為0時停止,可以在主程序中不停的進行按鍵掃描,當檢測到按鍵按下時執行兩個操作:
令state取反,那麼state為1的時候就會變為0,為0的時候就會變為1。
判斷state的值如果為1開啟定時器,為0就關閉定時器。
㈨ 如何用單片機定時器進行按鍵消抖
這個方法很多,我經常採取的方法是,定時5到10毫秒,中斷服務程序裡面掃碼鍵盤,連續3次掃碼鍵值一樣,就認為是有效按鍵,這樣來消抖。
㈩ 51單片機電子定時器
用51做定時給電器完全夠用了
IO輸出的5V電壓後面加三極體或低壓mos管完全可以驅動,干嗎要加數模轉換而且程序和電路要復雜很多?
8591是數模轉換電路,提供的電流很有限
如果用廢電腦主板上的mos管,電流能達到數A