1. 程式人生 > >51微控制器定時器/計數器的使用程式與分析

51微控制器定時器/計數器的使用程式與分析

定時器的使用能夠使延時更加的準確定時器/計數器由振盪器,12分頻電路,多路轉換開關MUX,16位的加1計數器T0和16位的T1暫存器組成。定時器/計數器的核心是16位的加1計數器。1、計數功能:對外部脈衝進行計數。外部脈衝通過T0(P3.4)、T1(P.5)兩個訊號引腳輸入,輸入的脈衝再負跳變時有效,進行加1計數,一個下降沿脈衝計數一次,並將技術的結果儲存在計數暫存器中。2、定時器功能:對微控制器內部進行的相關計數,即每個機器週期產生一個計數脈衝,每經過一個機器週期計數器加1.定時器/計數器的控制暫存器與工作方式1、定時器/計數器工作方式暫存器TMOD(一個不可以按位定址的8位特殊功能暫存器,89H,高四位-T1,低四位-T0)
T1T1T1T1T0T0T0T0
TMODD7D6D5D4D3D2D1D0
位符號GATEC/TM1M0GATEC/TM1M0
含義我們稍後再說,,,2、定時器控制暫存器TCON(用來啟動進入工作狀態)
TCOND7D6D5D4D3D2D1D0
位符號TF1TR1TF0TR0IE1IT1IE0IT0
位地址8FH8EH8DH8CH8BH8AH89H88H
3、中斷允許控制器IE,,,本程式將簡單的利用定時器對時間進行控制,發光二極體按P1.0,P1.1,P1.2,,,,P1.7,P1.0,,,,的順序依次迴圈點亮。每次發光二極體點亮的時間精準的控制在1s。
#include<reg51.h>
unsigned int num=100;
unsigned char x=0xfe;
void timer1() interrupt 3
{
num--;
TH1=0x63;
TL0=0x18; //重新設定初值
if(num==0)
{
if(x==0x7f)
x<<=1;
else 
{
x<<=1;
x++;
}
P1=x;
num=100;
}
 }
void main()
{
TMOD=0x00; //設定定時器工作模式
TH1=0x63;
TL0=0x18;	//設定初值

EA=1;		   //總中斷允許
ET1=1;		 //定時器中斷允許
TR1=1;		  //定時開始
for(;;)
{
		   //迴圈等待定時器溢位
}
}

後續在做補充