『壹』 有關單片機定時器的使用和定時器的介紹
導語:單片機,其實就是一種用於集成電路中的芯銀塌片,而單片機的定時器是一個電子元件,它是一個穩定的計數器,是由單片機本身提供的。它也是察搏羨單片機上的一個連接部件,可以用來編程。定時器還有一個功能顯而易見就是可以用來定時,同時,它也可以用來統計一些脈沖信號。下面就來介紹下單片機定時器的使用的相關內容。
定時器的結構
定時器是由兩個寄存器組成的,其中一個寄存器是用來確定計數器的工作形式和功能的,另外一個計時器是用來控制單片機的啟動和停止的,同時它也是設置溢出的一個標志。
計數過程
每來一個脈沖計數器加1,當加到計數器為全1(即FFFFH)時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發出中斷請求(定時器/計數器中斷允許時)。如果定時器/計數器工作於定時模式,則表示定時時間已到;如果工作於計數模式,則表示計數值已滿。
定時應用
用作定時器:此時設置為定時器模式,加1計數器是對內部機器周期計數(1個機器周期等於12個振盪周期,即計數頻率為晶振頻率的1/12)。計數值N乘以機器周期Tcy就是定時時間t。
計數運用
用作計數器:此時設置為計數器模式,外敗拍部事件計數脈沖由T0或T1引腳輸入到計數器。每來一個外部脈沖,計數器加1。但單片機對外部脈沖有基本要求:脈沖的高低電平持續時間都必須大於1個機器周期。
定時器的使用
定時器的使用主要分為五個步驟,首先是要打開中斷的可以允許的位置,主要是對IE寄存器的控制,然後選擇定時器的工作的形式,定時器的一個格式是TMOD的形式,主要有四種方式。第一種計數的方式是十三位加一的形式,第二種是十六位加一的計數器,第三種的定數器被分解成兩部分,一個是八位的寄存器,另外一個是八位的計數器。第三步就是要為定時器進行賦值,首先定時器的初值是等於計數器模值減去計數器記滿的招滿值,而定時器的初值是等於模值減去預定時的時間與單片機時鍾周期的十二倍。接下來就是啟動計時器,當TRO為0的時候,停止TO開始計數,而TRO值為1的時候,就啟動TO進行計數。當TFO為0的時候,沒有TO的中斷,這時是沒有硬體復位,而當值為1的時候有TO溢出中斷的情況。當TR1為0的時候,停止TI進行計數,而值為1的時候開啟T1進行計數。
當TF1為0的時候,沒有T1的中斷,為1的時候會出現T1的溢出中斷情況。當IE1的值為0的時候時,出現硬體的復位而當其值為1的時候出現中斷。當IT1的值為0的時候INT1出現電平觸發的情況,也就是軟體復位,而當值為1的時候,INT1的負邊沿會出現觸發的情況。當IE0的值為0時會出現硬體復位,而當IEO的值為1的時候,INT0上會有中斷的情況。當IT0的值為0時,INT0會發生電平觸發,也就是軟體復位,同時INT0的負邊沿觸發。最後一步就是計數器中斷入口程序。
定時器/計數器的工作方式
方式0為13位計數,由TL0的低5位(高3位未用)和TH0的8位組成TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發出中斷請求。
方式1的計數位數是16位,由TL0(TL1)作為低8位、TH0(TH1)作為高8位,組成了16位加1計數器。
方式2為自動重裝初值的8位計數方式。
在方式2下,當計數器計滿255(FFH)溢出時,CPU自動把TH的值裝入TL中,不需用戶干預。因此特別適合於用作較精確的脈沖信號發生器。
方式3隻適用於定時器/計數器T0,定時器T1方式3時相當於TR1=0,停止計數。
工作方式3將T0分成為兩個獨立的8位計數器TL0和TH0。
總而言之,定時器的使用可以為單片機的功能增加一些性能上的增強。所以,合理的運用定時器將會幫助我們使用單片機。以上就是有關單片機定時器的使用的相關內容,希望能對大家有所幫助!
土巴兔在線免費為大家提供「各家裝修報價、1-4家本地裝修公司、3套裝修設計方案」,還有裝修避坑攻略!點擊此鏈接:【https://www.to8to.com/yezhu/zxbj-cszy.php?to8to_from=seo__m_jiare&wb】,就能免費領取哦~
『貳』 單片機定時器做的時鍾,定時不準。
單片機定時器做時鍾,確切的說在環境溫度變化不大的前提下,可以調整的很准,畢竟它是基於MHz級的晶振的,提兩點建議,1】建議使用12MHz晶振;2】請注意對於不同的編程,定時器賦值時,如果需要50ms定時則絕不一定是賦值50000,也不一定是循環20次就是1S;你琢磨下這里的道理,你就明白了,具體方法是,找一個比較準的時鍾,比如在線時鍾,每10小時記錄一次找出規律,細細調整,畢竟它是在微秒范圍內進行調整,你肯定行的,祝成功。
『叄』 51單片機的定時器用作定時方式是
51單片機的定時器用作緩廳定時方式是一個時鍾周期加1。根據查詢相關公開信息顯示,51單片機的定時器用作定時方式是由內部時鍾頻率定時,一個時鍾周期加1。51單片機是對兼容英特爾8051指令系統的單片機的統稱,51單片機廣泛應用於家用電器、汽車激慶、工業測控、通信設備中,因為51單片機的指令系統、內部擾鉛隱結構相對簡單,所以國內許多高校用其進行單片機入門教學。
『肆』 單片機定時器時鍾設計程序,急求
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char sec=0,min=0,hour=12,scanled;
unsigned char key,flashbit,mode,time;
unsigned char disdat[6];
sbit led=P1^0;
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
void flash()
{
switch(flashbit)
{
case 0:break;
case 1:
disdat[4]=0x10;
disdat[5]=0x10;
delay(50);
dischg();
delay(80);
break;
case 2:
disdat[2]=0x10;
disdat[3]=0x10;
delay(50);
dischg();
delay(80);
break;
case 3:
disdat[0]=0x10;
disdat[1]=0x10;
delay(50);
dischg();
delay(80);
break;
default:break;
}
}
void t0isr() interrupt 1 //秒計時
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case 0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
hour++;
if(hour>23)hour=0;
}
}
}
break;
case 1:
if(time==20)
{
time=0;
if(sec>0)sec--;
else if(min>0){sec=59;min--;}
else if(hour>0){sec=59;min=59;hour--;}
else {hour=0;min=0;sec=0;}
}
break;
}
dischg();
}
void t1isr() interrupt 3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case 4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case 5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=0;
min=0;
hour=12;
flashbit=0;
scanled=0;
time=0;
mode=0;
dischg();
while(1)
{
flash();//閃爍
// led=1;
if((P3&0x0f)!=0x0f){
key=P3&0x0f;
while((P3&0x0f)!=0x0f);
led=0;
delay(10);
key|=0xf0;
switch(~key)
{
case 0x01: //p3.1選擇調時、分、秒
TR0=0;
flashbit+=1;
if(flashbit>3){flashbit=0;TR0=1;}
break;
case 0x02: //p3.2調數
if(flashbit==0)break;
if(flashbit==1)
{
hour++;
if(hour>23)hour=0;
}
if(flashbit==2)
{
min++;
if(min>59)min=0;
}
if(flashbit==3)
{
sec++;
if(sec>59)sec=0;
}
break;
case 0x04: //選擇正/倒
TR0=0;
mode++;
mode&=0x01;
if(mode==0){sec=0;min=0;hour=0;}
dischg();
break;
case 0x08: //啟動/暫停
TR0=~TR0;
break;
default:break;
}
}
}
}
『伍』 單片機定時器怎麼實現時間計時越細越好
定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設置溢出標志。
加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鍾振盪器輸出脈沖經12分頻後送來;一個是T0或T1引腳輸入的外部脈沖源。每來一個脈沖計數器加1,當加到計數器為全1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作於定時模式,則表示定時時間已到;如果工作於計數模式,則表示計數值已滿。
可見,由溢出時計數器的值減去計數初值才是加1計數器的計數值。
•設置為定時器模式時,加1計數器是對內部機器周期計數(1個機器周期等於12個振盪周期,即計數頻率為晶振頻率的1/12)。計數值N乘以機器周期Tcy就是定時時間t。
『陸』 單片機的時鍾源和定時器有什麼區別
時鍾源也就是晶振了,就是一個產生固定頻率脈沖的器件,單片機的定時器是一個可以編程式控制制的功能模塊,其本身是不能輸出脈沖的。
『柒』 51單片機的定時器的時間怎麼算
51單片機1個機器周期=12個時鍾周期,頻率為12MHZ,則一個機器周期為1US,具體到定時器程序就是,假如你想定1MS,那麼單片機每次加一個一,就要過1US,那麼1MS就要加1000次,所以用65535-1000=64535;再把64535換成16進制為FC17,把FC付給TH0,17給TLO,即可定時1MS,因為65535他就溢出進入中斷。
『捌』 請問如何使用單片機定時器製作一個以00-00-00為初始的24小時制時鍾
程序比較長,可用定時器定時50mS,累積20次,即1S,秒加1,60S後分加1,秒清0,60分後,小時加1,分清0 ,24小時後小時清0,這些都在定時器中斷程序中完成,主程序只管顯示時 分 秒即可。
『玖』 單片機定時器定時的時間怎麼算
單片機的定時時間的計算公式=計數值(定時值)* 機器周期= 計數值(定時值)* 12 / 晶振頻率。
上面的兩個等號是等價的,因為,單片機的機弊頃器周期=12秒/晶振頻率,因此兩個公式通用。
完成一個基本租桐陸操作所需要的時間稱為機器周期。一般,輪滲一個機器周期由 若干個S周期(狀態周期)組成。80C51系列單片機一個機器周期由6個S周期組成。一個S周期(狀態周期),由2個時鍾周期組成。
若干個機器周期,組成了指令周期。根據指令不同,所需的機器周期數也不同。
(9)單片機定時器時鍾擴展閱讀
幾種典型指令;
1、單位元組周期指令(比如 INC A)
2、雙位元組單周期指令(比如 ADD A,#data)
3、單位元組雙周期指令 (比如 INC DPTR)
4、單位元組雙周期指令 (比如MOVX A @DPTR)