1. 單片機控制倒計時定時器
哥們
我做的定時器 的程序
這個是正的 你該一下吧
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code []={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar code da[]={0x40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0x0,0x10};
display(uchar,uchar,uchar,uchar);
uchar x=0;
uchar n=0;
uchar flag=0;
uchar second=0,minute=0;
sbit K1=P3^0;
sbit K2=P3^1;
uchar temp=0;
delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=25;b>0;b--)
;
}
display(uchar m1,uchar m,uchar s1,uchar s)
{
P0=[m1];
P2=0xfe;
delay(10);
P0=da[m];
P2=0xfd;
delay(10);
P0=[s1];
P2=0xfb;
delay(10);
P0=[s];
P2=0xf7;
delay(10);
}
void main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
P3=0XFF;
if(K1==0)
delay(10);
if(K1==0)
TR1=1;
if(K2==0)
delay(10);
if(K2==0)
TR1=0;
if(flag==20)
{
flag=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
}
}
}
display(minute/10,minute%10,second/10,second%10);
}
}
void tim1() interrupt 3
{
TR1=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR1=1;
flag++;
}
2. 跪求用單片機製作長延時定時器的程序
多簡單的事啊,我貼一個AVR採用定時器0計時的,你參考一下吧。
#pragma interrupt_handler timer0_ovf_isr:10 //TIMER0 定時2ms中斷.
void timer0_ovf_isr(void)
{
TCNT0 = 0xD9; //reload counter value
timer2ms++;
if(timer2ms >= 5)
{
timer2ms = 0;
timer10ms ++;
systimer10ms ++;
if(systimer10ms >= 22) //內部1M晶振
{
systimer10ms = 0;
timer1s ++;
}
}
也就是說。你另外起一個變數。與響應時間對照。你別說9999分鍾。你就是9999年都可以做到。不理解時加我QQ問我吧。
3. 怎樣使用51單片機的定時器
51單片機定時器的使用
51單片機定時器/計時器的使用
步驟:
1、 打開中斷允許位:
對IE寄存器進行控制,IE寄存器各位的信息如下圖所示:
EA: 為0時關所有中斷;為1時開所有中斷
ET2:為0時關T2中斷;為1時開T2中斷,只有8032、8052、8752才有此中斷 ES: 為0時關串口中斷;為1時開串口中斷 ET1:為0時關T1中斷;為1時開T1中斷 EX1:為0時關1時開 ET0:為0時關T0中斷;為1時開T0中斷 EX0:為0時關1時開
2、 選擇定時器/計時器的工作方式:
定時器TMOD格式
CPU在每個機器周期內對T0/T1檢測一次,但只有在前一次檢測為
1和後一次檢測為0時才會使計數器加1。因此,計數器不是由外部時鍾負邊沿觸發,而是在兩次檢測到負跳變存在時才進行計數的。由於兩次檢測需要24個時鍾脈沖,故T0/T1線上輸入的0或1的持續時間不能少於一個機器周期。通常,T0或T1輸入線上的計數脈沖頻率總小於100kHz。
方式0:定時器/計時器按13位加1計數,這13位由TH中的高8位和TL中的低5位組成,其中TL中的高3位棄之不用(與MCS-48兼容)。
13位計數器按加1計數器計數,計滿為0時能自動向CPU發出溢出中斷請求,但要它再次計數,CPU必須在其中斷服務程序中為它重裝初值。
方式1:16位加1計數器,由TH和TL組成,在方式1的工作情況和方式0的相同,只是計數器值是方式0的8倍。
1
1/3
方式2:計數器被拆成一個8位寄存器TH和一個8位計數器TL,CPU對它們初始化時必須送相同的定時初值。當計數器啟動後,TL按8位加1計數,當它計滿回零時,一方面向CPU發送溢出中斷請求,另一方面從TH中重新獲得初值並啟動計數。
方式3:T0和T1工作方式不同,TH0和TL0按兩個獨立的8位計數器工作,T1隻能按不需要中斷的方式2工作。 在方式3下的TH0和TL0是有區別的:TL0可以設定為定時器/計時器或計數器模式工作,仍由TR0控制,並採用TF0作為溢出中斷標志;TH0隻能按定時器/計時器模式工作,它借用TR1和TF1來控制並存放溢出中斷標志。因此,T1就沒有控制位可以用了,故TL1在計滿回零時不會產生溢出中斷請求的。 顯然,T0和T1設定為方式3實際上就相當於設定了3個8位計數器同時工作,其中TH0和TL0為兩個由軟體重裝的8位計數器,TH1和TL1為自動重裝的8位計數器,但無溢出中斷請求產生。由於TL1工作於無中斷請求狀態,故用它來作為串口可變波特
3、 為計數器賦值
計數器初值計算
TC=M−C
TC:計數器初值,M:計數器模值(2k),C:把計數器計滿的計數值 定時器初值計算
T=(M−TC)T計數
或
TC=M−T/𝑇計數
M:模值,T計數:單片機時鍾周期TCLK(ΦCLK的倒數)的12倍;TC為定時器的定時初值,T為欲定時的時間。
TC=M−T×𝛷𝐶𝐿𝐾/12
M:模值,ΦCLK:單片機時鍾周期ΦCLK;TC為定時器的定時初值,T為欲定時的時間。 例如:單片機主脈沖頻率ΦCLK為12MHz,最大定時時間為: 方式0時 TMAX = 213×1us = 8.192ms 方式1時 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms
4TR0:為0時,停T0計數;為1時,啟T0計數
2
2/3
TF0:為0時,無T0中斷(硬體復位);為1時,有T0溢出中斷 TR1:為0時,停T1計數;為1時,啟T1計數 TF1:為0時,無T1中斷(硬體復位);為1時,有T1溢出中斷 IE1:為0時,硬體復位;為1時 IT1:為0時,INT1電平觸發(軟體復位);為1時,INT1負邊沿觸發 IE0:為0時,硬體復位;為1時 IT0:為0時,INT0電平觸發(軟體復位);INT0負邊沿觸發
5
在C51的C語言中使用interrupt x來指定中斷入口地址,x為中斷號,例T0中斷: void Time0_Int() interrupt 1 //定時器T0的中斷入口程序
4. 51單片機長定時怎麼做
當晶振頻率為12MHZ時,51單片機定時器一次最長定時時間是65.536ms,要想實現長定時,可以多次定時累加,例如,要讓實現10S定時,可以讓定時器定時50ms,並聲明一個變數,專門累計中斷次數,定時器每中斷一次,該變數加1,當變數值為200時,總定時時間就是10S。
5. 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
6. 郭天祥單片機視頻教程疑問,有定時器為什麼要delay
定時器是控制數碼管每次變換的時間,delay函數是控制數碼管亮的時間。也就是說定時器控制1,2,3,4.。。。的變換,delay測試控制1,2,3,4.。。。。的顯示時間。這樣才能出現一個動態效果
7. 那位兄弟有 郭天祥(51單片機的書籍,好像有本是新概念)
ISBN:978-7-121-07893-4
書名:《新概念51單片機C語言教程——入門、提高、開發、拓展全攻略》
作者:郭天祥
定價:69元(含光碟1張)
作者背景
作者郭天祥是哈爾濱工程大學的碩士生,但是一名電子設計迷,這本書是他學習和實踐單片機設計的經驗總結,本書出版前他發布於網上的他給本科生上課的視頻教程非常受歡迎,受眾主要是高校電子信息類的學生。
請關注後面的附件:本書作者在本書文前「致讀者」的內容,相信會對大學生有非常好的人生啟迪,同時也是本書的一個非常好的賣點。
本書「圖書教材+隨書視頻光碟+可選實驗板」可以完全實現學生的自主學習。
封底文字
本書組織
全書分為5篇,入門篇、內外部資源操作篇、提高篇、實戰篇和拓展篇
特別按照初學者所遇到的問題和需求路徑安排全書內容
以應用需求為主線,搭建了單片機技術上下游的知識體系
從實際工程應用入手,通過實驗過程和現象講解單片機原理,可讀性好
內容源於大量科研和教學實踐,許多C語言代碼可直接應用到工程項目中,實用性強
配套學習光碟,並可提供學慣用實驗板,可以邊學邊練
學習資源
本書含DVD光碟一張,13講教學視頻+課件常式代碼+全書常式代碼
技術支持,天祥電子網站http://www.txmcu.com
讀者對象
高校電子信息類和機電類專業本/專科師生
高校大學生創新基地師生
51單片機C語言編程初學者
計算機、自動控制、智能儀器儀表、電力電子、機電一體化技術人員
讀者層次
入門初學者
中級開發者
本書文前內容
內 容 簡 介
本書從實際應用入手,以實驗過程和實驗現象為主導,循序漸進地講述51單片機C語言編程方法以及51單片機的硬體結構和功能應用。全書共分5篇,分別為入門篇、內外部資源操作篇、提高篇、實戰篇和拓展篇。本書內容豐富,實用性強,書中大部分內容均來自科研工作及教學實踐,許多C語言代碼可以直接應用到工程項目中。本書配套光碟提供13講近30學時的教學視頻和本書實例代碼,可使讀者更快更好地掌握單片機知識和應用技能。本書作者還可提供與本書配套的單片機實驗板。
本書可作為大學本、專科單片機課程教材,適合於51單片機的初學者和使用51單片機從事項目開發的技術人員,也可供從事自動控制、智能儀器儀表、電力電子、機電一體化等專業的技術人員參考。
前 言
本書從實際工程應用入手,以實驗過程和實驗現象為主導,由淺入深、循序漸進地講述使用C語言為51單片機編程的方法、51單片機的硬體結構和各種功能應用。
本書不同於傳統的講述單片機的書籍,本書中的所有常式均以實際硬體實驗板現象為根據,由C語言程序來分析單片機工作原理,使讀者知其然,又能知其所以然,從而幫助讀者從實際應用中徹底理解和掌握單片機。另外,本書中大部分內容均來自作者科研及教學工作實踐,內容涵蓋作者多年來項目經驗總結的精華,並且貫穿一些學習方法的建議。
本書內容豐富,實用性強,許多C語言代碼可以直接應用到工程項目中。本書配套附一張光碟,提供近30小時的單片機教學視頻。同時,作者還開發了與本書配套的TX-1C單片機實驗板,可幫助讀者邊學邊練,達到學以致用的目的。讀者在學習過程中可以將視頻和書互為參考,配合學習,並用單片機實驗板進行實踐,這樣可以更快更好地掌握單片機應用知識和技能。
本書適合作為大學電子信息類和機電類各專業本、專科單片機課程教材,或高校大學生創新基地培訓教材,也適合51單片機的初學者和使用51單片機從事項目開發的技術人員,還可供從事自動控制、智能儀器儀表、電力電子、機電一體化等專業的技術人員參考。
本書內容組織
本書內容共分5篇,分別為入門篇、內外部資源操作篇、提高篇、實戰篇和拓展篇。
第1,2篇與本書配套光碟內容基本對應,內容組織上循序漸進、由淺入深;在知識介紹上,從原理到實踐,再從實驗現象進一步分析原理,對51單片機的主要功能及硬體結構做了詳細介紹。
第3篇在前兩篇的基礎上通過實驗進一步擴展講解了51單片機的其他功能應用,而且還特別將STC單片機與傳統51單片機相比擴展了的功能逐一講解。
第4篇是作者教學和實際項目中精選出的具有代表性的真實項目,其知識涉及面廣,內容豐富,是作者開發經驗的精華總結。
第5篇為拓展部分,詳細講解了使用Protell軟體繪制原理圖、PCB圖、元件庫和元件封裝的過程;詳細介紹了常用的ISD400X系列語音晶元;分別講解了直流電機、步進電機和舵機的原理及驅動方法;介紹了設計電路常用的元件;詳細介紹了如何設計直流穩壓電源及開關電源;最後介紹運放的應用知識。
本書實常式序
作者在編寫本書時,使用的操作系統是英文版Windows XP SP2,開發工具是Keil V6.12,抓圖工具是紅蜻蜓抓圖精靈V1.24,單片機下載軟體是STC-ISP V3.9,使用的硬體實驗設備是天祥電子的TX-1C單片機實驗板,本書中單片機部分的所有實常式序都在該環境中調試通過,並且在TX-1C實驗板上得以驗證。
本書學習建議
配套光碟提供的視頻與本書前兩篇基本對應,建議讀者在學習本書之前,最好有一塊與本書中相同的實驗板。學習時先看視頻,對單片機有一個初步的印象,視頻中互動部分讀者可親自做實驗,在學習過程讀者要多動腦,多動手,單片機是實實在在的硬體,只有在不斷實踐中才能領悟它的工作原理。讀者在對實驗原理理解的前提下,要嘗試獨立編寫出書中每章的例子程序,當有困惑時再查看書中代碼,反思自己的失誤在哪裡,進而積累更多的經驗。
本書配套光碟說明
本書配套光碟提供兩部分內容:本書所有實例代碼和13講視頻教程。
視頻教程內容列表
講 次 內 容 細 節
第1講 學習單片機預備知識
如何點亮一個發光管 單片機能做什麼,基本電子知識,如何用TX-1C單片機學習板學習單片機,C51知識簡介,如何申請免費晶元樣品。點亮一個發光管
第2講 流水燈設計
蜂鳴器發聲
繼電器控制 簡單延時程序、子程序調用、帶參數子程序設計、流水燈同時蜂鳴器響、如何驅動蜂鳴器,及如何驅動繼電器,集電極開路的概念及應用
第3講 數碼管顯示的原理
數碼管的靜態顯示 共陽、共陰數碼管顯示原理、定時器工作方式介紹、重點講述工作方式2、中斷概念及中斷函數寫法、外部中斷試驗、定時器中斷應用
第4講 數碼管的動態顯示原理及應用實現 動態掃描概念、定時器、中斷加深
用單片機的定時器及中斷設計一個60秒定時器
第5講 獨立鍵盤、矩陣鍵盤的檢測原理及實現 鍵盤用來做什麼、如何檢測鍵盤、消抖、鍵盤編碼、帶返回值函數寫法及應用
第6講 A/D、D/A的工作原理及實現、運放電路 模擬電壓與數字電壓的關系、為什麼要使用A/D及D/A、ADC0804的操作方法、DAC0832的操作方法
第7講 串口通信原理及操作流程 串口通信工作方式、10位數據通信、波特率概念、如何根據波特率計算定時器初值
第8講 1602液晶顯示原理及實現 最簡單液晶工作原理、如何開始對一個沒有任何概念的晶元開始單片機的操作
第8講 I2C匯流排AT24C02晶元工作原理 I2C匯流排工作原理、目前非常通用的一種通信機制
第10講 利用51單片機的定時器設計一個時鍾 綜合運用51單片機知識設計一個可以隨意調節時間、帶整點鬧鈴的時鍾(其中用到定時器、中斷、按鍵、蜂鳴器、數碼管或串口通信)
第11講 用DS12C887時鍾晶元設計一個高精度時鍾 DS12C887內部帶有鋰電池,系統掉電情況下可自行精確走10年,並帶有鬧鍾功能、年、月、日、時、分、秒等(本節由學生自己設計電路)
第12講 使用Protell 99繪制電路圖全過程 Protell 99軟體使用、元件庫、封裝庫設計、繪制原理圖、錯誤檢查、生成PCB、手動、自動布線、送去加工
第13講 Altium designer 6.5繪制電路圖全過程 最頂級電路板設計軟體Altium Designer使用、元件庫、封裝庫設計、繪制原理圖、錯誤檢查、生成PCB、手動、自動布線、送去加工
在這里對配套視頻中講解三極體和場效應管部分的一點錯誤給予更正:
作者在講課時說:三極體是壓控流型器件,場效應管是壓控壓型器件。
正確結論應該是:三極體是流控流型器件,場效應管是壓控流型器件。
作者在編寫本書的過程中,得到了哈爾濱工程大學國家電工電子教學基地和信息與通信工程學學院郭黎利教授、刁鳴教授、趙旦峰教授、付永慶教授和王松武教授、劉文智老師和李海波老師的大力支持。本書的部分章節由我的同學葉大鵬、李健編寫,另外我的同學張勇、宋寶森、鍾雙、於振南、郭天宇、李名祺也十分關心本書的編寫進度,為提高書稿的質量提出了許多寶貴的建議和修改意見。在此,對他們一並表示衷心的感謝。
由於作者的水平有限,錯誤和疏漏之處在所難免,歡迎廣大技術專家和讀者指正。作者的聯系方式是[email protected],讀者也可以登錄天祥電子網站發表意見,或聯系購買單片機實驗板,網址是http://www.txmcu.com。
郭天祥
於哈爾濱工程大學
2008年11月