❶ 單片機定時器設置步驟
搜狐網
晴 / -25°
新手入門!如何設置單片機定時器?
嵌入式資訊精選
2018-12-05
訂閱
在單片機的學習過程中,單片機定時器的合理設置和應用是非常關鍵的一步,也是剛開始接觸單片機知識的新人工程師們比較容易出錯誤的一個環節之一。在今天的文章中,我們為大家總結了單片機定時器應用過程中的兩大常見問題進行實時解析,希望能夠對各位新人工程師的學習提供一定幫助。
問題一:51單片機的T0、T1定時器四種工作方式各有什麼特點?
在單片機定時器的應用過程中,定時器在進行設置時會有四種不同的工作方式,合理選擇相應的工作方式可以幫助工程師快速完成及時設置。下面我們就來逐一講解一下這四種不同的計時方式。方式0是單片機計時器的第一種計時方式,這一方式13位計數模式。方式1則採用16位計數模式,方式2採用8位自動重裝入計數模式,這兩種技術模式也是目前在單片機應用過程中最常使用的及時方式。最後一種單片機定時器的計時方式是方式3,這一模式下只有T0有的雙8位計數模式。
❷ 51單片機定時器程序五分鍾的怎樣寫呀!
設置定時器中斷時間,比如1s,然後做一個全局的變數進行累加,當終端產生300次,就給蜂鳴器導通。
❸ 51單片機555定時器原理
555定時器的電路結構 555定時器的電路結構如圖所示。C1和C2為兩個電壓比較器,其功能是如果「+」輸入端電壓v+大於「-」輸入端電壓v-,即v+>v-時,則比較器輸出vc為高電平(vc=1),反之輸出vc為低電平(vc=0)。比較器C1參考電壓v1+(VREF1)=2/3Vcc,比較器C2的參考電壓v2-(VREF2)=1/3Vcc。如果v1+(VREF1)的外接端vco接固定電壓Vco,則v1+(VREF1)=vco,v2-(VREF2)=1/2Vco。與非門G1和G2構成基本觸發器。其中輸入/R為置0端,低電平有效。比較器C1和比較器C2的輸出vc1、vc2為觸發信號。三極體TD是集電極開路輸出三極體,為外接提供充、放電迴路,稱為泄放三極體。反相器G3為輸出緩沖反相器,起整形和提高帶負載能力的作用。
555定時器的功能表
將高觸發端TH和低觸發端TR連接在一起,上述的555功能表變為如下功能表。
555定時器的應用 由於555定時器使用靈活、方便,所以在波形變換與產生、測量與控制、家用電器、電子玩具等領域得到了廣泛的應用。
(1)構成施密特觸發器,用於TTL系統的介面,整形電路或脈沖鑒幅等;
(2)構成多諧振盪器,組成信號產生電路;
(3)構成單穩態觸發器,用於定時延時整形及一些定時開關中。
555定時器的種類及性能 555定時器產品有TTL型和CMOS型兩類。TTL型產品型號的最後三位都是555,CMOS型產品的最後四位都是7555,它們的邏輯功能和外部引線排列完全相同。
雙極性與CMOS型555定時器性能比較:兩者有相同的引腳排列,互相兼容,功能相同,可以互換,但應注意使用上的差異。
用555定時器構成施密特觸發器 電路結構與工作原理:
當第5腳接直流電壓VI時,則VT+=VI,VT-=1/2VI。因此改變電壓控制端CO(5腳)的電壓可改變回差電壓。一般電壓控制端CO越高,ΔU越大,抗干擾能力越強,但靈敏度相應降低。
不使用5腳時,可懸空;也可接0.01uF的電容,旁路高頻干擾。
形成回差原因:
由於C1與C2的參考電壓不同,因而基本RS-FF的置0信號和置1信號必然發生在輸入信號vi的不同電平。從而形成了電壓傳輸回差。
用555定時器構成單穩態觸發器 單穩態觸發器只有一個穩態狀態。在未加觸發信號之前,觸發器處於穩定狀態,經觸發後,觸發器由穩定狀態翻轉為暫穩狀態,暫穩狀態保持一段時間後,又會自動翻轉回原來的穩定狀態。單穩態觸發器一般用於延時和脈沖整形電路。
單穩態觸發器電路的構成形式很多。圖(a)所示為用555定時器構成的單穩態觸發器,R、C為外接元件,觸發脈沖u1由2端輸入。5端不用時一般通過0.01uF電容接地,以防干擾。下面對照圖(b)進行分析。
(1) 穩態
接通T導通,使電容C放電。此後uc<,若不加觸發信號,即u1>,則u0保持0狀態。電路將一直處於這一穩定狀態。
(2) 暫穩態
在t=t1瞬間,2端輸入一個負脈沖,即u1<,基本RS觸發器置1,輸出為高電平,並使晶體管T截止,電路進入暫穩態。此後,電源又經R向C充電,充電時間常數=RC,電容的電壓 按指數規律上升。
在t=t2時刻,觸發負脈沖消失(u1>),若uc<,則/RD=1,/SD=1,基本RS觸發器保持原狀態,u0仍為高電平。
在t=t3時刻,當uc上升略高於時,/RD=0,/SD=1,基本RS觸發器復位,輸出u0=0,回到初始穩態。同時,晶體管T導通,電容C通過T迅速放電直至uc為0。這時/RD=1,/SD=1,電路為下次翻轉做好了准備。
輸出脈沖寬度tp為暫穩態的持續時間,即電容C的電壓從0充至所需的時間。由得
由上式可知:
① 改變R、C的值,可改變輸出脈沖寬度,從而可以用於定時控制。
② 在R、C的值一定時,輸出脈沖的幅度和寬度是一定的,利用這一特性可對邊沿不陡、幅度不齊的波形進行整形。 大叔為您解答,希望您滿意!!
❹ 單片機定時器原理及使用
這里通俗的說下C51單片機的定時器的工作原理,C51單片機的定時器是由計數器構成的,所計量的時間是通過計算固定周期的脈沖個數的累計獲得的,通過設置定時器的工作模式,可以由16位(高、低兩個8位)寄存器模式或其他位數的寄存器模式來計數,以16位計數模式來討論,那就是無論那種工作模式只有當計數用的寄存器的各個位全部置1,也就是滿值後下一個計數脈沖進入時使寄存器產生溢出,而這個溢出才會使計數產生中斷從而完成一次定時控制,因此,如果我們想產生某個時長的定時,那麼我需要將這個時長根據單片機運行的時鍾頻率、周期等等相關因素換算成需要計數的個數,進而在這個滿值的16位寄存器中扣除需要計數的個數,啟動運行後當計數值補充滿了寄存器就完成了一次計時,而一個16位寄存器滿值為2的16次方=65536,假如一個計數脈沖的周期為1us,那麼滿值後就會耗時65536us,假如我們需要計時36us,那麼我們只需要為寄存器賦值65500就可以了,這里需要注意的是,因為C51單片機的寄存器是8位的,我們需要將這個65500拆分出高8位數據裝入THx中計算方法為THx=65500/256,再計算出低8位數據裝入TLx中,THx=65500%256。
❺ 如何用單片機定時
朋友,我覺得你還是要懂得定時的原理。c52內部有兩個定時器,t0和t1,。他們分別有4中工作模式。就拿t0來說。模式0:是一個13位計數器。模式1:是一個16位計數器。模式2:是一個自帶重裝的8為計數器。模式3:t0被拆為兩個獨立的計數器。
定時計數器,是定時還是計數要看自己對相關寄存器的設置,但是總的來說都是對t0計數器進行計數,只是定時器,的計數時鍾源是晶振經過12分頻提供的,計數是由外部輸入的信號提供。
真對你問題對定時器進行設置如下:
EA=1;//總中斷使能
ET0=1;//T0中斷使能
TR0=1;//T0定時器啟動使能
TMOD=0X01;//將t0設置為模式1,定時器。
TL0=(65536-8*1000000/12*TIME)%256;//地位賦初值
TH0=(65536-8*1000000/12*TIME)/256;//高位賦初值
//TIME為你要定時的時間,當然,此值不能大於定時器最大定時時間。8m晶振模式1:最大時間:大約為98毫秒
。所可以去time為50毫秒,然後在中斷裡面設個靜態變數,或者用個全局變數計數,記滿200次剛好10s,此時改變相應二極體的電平就可以了。
❻ 單片機定時器的使用方法
第一步:設置特殊功能寄存器 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 的頻率進行閃爍
❼ 單片機常用的三種定時方法
1 方法1
在定時器溢出中斷得到響應時,停止定時器計數,讀出計數值(反映了中斷響應的延遲時間),根據此計數值算出到下一次中斷時,需多長時間,由此來重裝載和啟動定時器。例如定時周期為1ms,則通常定時器重裝載值為-1000(0FC18H)。下面的程序在計算每個定時周期的精確重裝載值時,考慮了由停止計數(CLR TR1)到重新啟動計數(SETB TR1)之間的7個機器周期時間。程序中#LOW(-1000+7)和#HIGH(-1000+7)是匯編符號,分別表示-1000+7=0FC1FH這個立即數的低位位元組(1FH)和高位位元組(0FCH)。
……
CLR EA ;禁止所有中斷
CLR TR1 ;停止定時器T1
MOV A,#LOW(-1000+7) ;期望數的低位位元組
ADD A,TL1 ;進行修正
MOV TL1,A ;重裝載低位位元組
MOV A,#HIGH(-1000+7) ;對高位位元組處理
ADDC A,TH1
MOV TH1,A
SETB TR1 ;重啟動定時器
SETB EA ;重開中斷
……
此方法適用於各種原因造成的定時誤差的情況,為通用方法。
2 方法2
假如定時周期為10ms,通常定時器重裝載值為0D8F0H,中斷子程序如下[2]:
ORL TL1,#0F0H
MOV TH1,#0D8H
……
這里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定時精度。此方法只適用於重裝載值低位位元組的低4位為零,且中斷響應的延遲時間小於16個機器周期的情況。類似的定時器重裝載值有0FFF0H,0FFE0H等。
3 方法3
假如定時周期為1ms,通常定時器重裝載值為0FC18H,中斷子程序如下:
MOV A,#LOW(-1000+4) ;期望數的低位位元組
ADD A,TL1
MOV TL1,A
MOV A,#HIGH(-1000+4) ;對高位位元組處理
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢復提前了的2個機器周期
……
這種方法中不停止定時器計數過程,若在執行指令ADDC A,TH1 或MOV TH1,A時,恰好產生TL1溢出向TH1進位的情況,則TH1的值就不對了,會產生更大的誤差。為此,程序段開頭為重裝載值加4,若有溢出進位,則可提前發生,其中2個機器周期是考慮到為TL1重裝載佔用的時間。
此方法適用於系統中無其它更高優先順序中斷源的情況。若類似方法1,在程序段開頭和結尾分別加上禁止所有中斷(CLR EA)和開中斷(SETB EA)指令,則將適用於所有情況。
4 方法4
假如定時周期不確定,只知道定時器重裝載值存放在寄存器R3、R2中,中斷子程序如下:
MOV A,#05H ;3個機器周期裝載TL1,2個周期提前
ADD A,TL1
ADD A,R2
MOV TL1,A
MOV A,R3 ;處理高位位元組
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢復提前了的2個機器周期
……
此法適用於定時周期不確定的情況,其它同方法3。
5 方法5
當定時中斷發生的位置可預知時,通常出現在主程序的AJMP $ (或SJMP $)等待指令處,中斷延遲時間為3個或4個機器周期。取固定值4可簡化補償程序。以定時周期1ms為例,中斷子程序如下:
ORG 001BH
MOV TL1,#LOW(-1000+4)
MOV TH1,#HIGH(-1000+4)
……
此方法適用於定時中斷總發生在同一條指令位置,且無其它中斷源的情況。
結 語
上述5種方法誤差均不超過1個機器周期,其中方法1、3、4較為通用,適用於任何情況,但程序較長;方法2、5簡單,但必須注意滿足對應條件,才能使用。當然,也還有其它方法[3],但比較煩瑣,並不理想,這里不一一介紹。
❽ 如何通過單片機控制定時打開電視機並選台
如果僅僅是在電視的基礎上進行開電視,並選定一個台還是很簡單的
現在電視多是紅外遙控的
開機用繼電器控制電源導通斷開即可
選台,在單片機上加個紅外發射管(最好加上紅外接收),
首先利用單片機上的紅外接收,來解碼電視機的遙控信號,比如調台,頻道加頻道減,之後存儲
然後利用單片機上的紅外發送,進行編碼,發送存儲的命令即可。
就好比用單片機做個定時遙控器一樣哈哈
如果想好好玩下的話 最好是直接控制數字高頻頭。
可以網上查下資料,希望能幫到樓主
❾ 51單片機定時功能如何實現
#include"reg51.h"
#define
uchar
unsigned
char
#define
uint
unsigned
int
/**************初始化程序****************/
void
initiation()
{
TMOD=0x11;
//設定計數方式等
TH0=-10000/256;
TL0=-10000%256;
//10MS定時初值(T0計時用)
TH1=-25000/256;
TL1=-25000%256;
//25MS定時初值(T1計時用)
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}
/****************定時器0中斷服務程序*****/
void
init_timer0(void)
interrupt
1
{
TH0=-10000/256;
TL0=-10000%256;
//10MS定時初值(T0計時用)
//下面寫用戶程序
}
/****************定時器1中斷服務程序*****/
void
init_timer1(void)
interrupt
3
{
TH1=-25000/256;
TL1=-25000%256;
//50MS定時初值(T1計時用)
//下面寫用戶程序
}
/****************主程序******************/
main()
{
initiation();
while(1)
{
;
}
}
❿ 關於定時導通電路的裝置
我就剛剛做了一下,放到遙控器里,代替手按了。原理是用單位片機一個IO口控制一個光藕,再寫一個程序,設定你要的時間,當到時間後單片機就發一個高電平,光藕就接通了,光藕的端的電平就輸出了。單片機可用8PIN封裝,內部晶振的,做成一個最小系統,放在一小塊PCB上,如用3V單片機,用兩節電池供電。搞定。我還有成品哦。