智能車培訓階段一第三部分內容摘要

天津大學智能車隊階段一第三部分培訓內容主要包括:
1、回顧上節課內容;
2、定時器中斷演示。
3、定時器原理和定時器中斷介紹。
(1)方式0
(2)方式1
(3)方式2
(4)方式3:省略。






1、定時器/計數器意義和作用:

1、時間對於單片機的運行來說非常重要,時鐘信號相當於單片機的心臟,正常情況下單片機的時鐘是穩定不變的,每一句代碼運行的時間也都是固定的(彙編語言),但特殊情況下也可以超頻或者降頻運行,就好比人劇烈運動起來了心臟跳得更快一樣,此時單片機每句代碼運行的時間縮短,表現出來效果就是單片機速度提升了。
2、定時器是單片機集成的一個模塊,跟人在內心默唸計時有一定的區別,定時器是獨立於程序的運行的,他只在特定時間到達後發出中斷請求才能打斷主程序的運行。
定時器模塊有兩個功能,一個是定時使用,相當於另外有一個人在數着你的心跳來計時,到達一定時間後告訴你,吸引你的注意力,如果你的定時器中斷允許標誌位打開了,你就會被他吸引,也就是主程序被打斷轉去執行中斷服務函數(當然,還有中斷優先級的問題)。另一個是計數器,模塊有對應的引腳,該引腳可以輸入脈衝,而模塊可以記錄脈衝個數,脈衝個數到達設定的值也可以產生中斷。
作用:
1、像例程一樣當定時器使用來控制LED燈的亮滅時間,而且不影響主程序的運行。
2、電機測速,位移需要對時間求導。(計數器+定時器)
3、PID算法的誤差對時間積分。
4、保證系統的控制週期是一定的,對算法有好處。
5、很多傳感器如超聲波和編碼器輸出信號都是脈衝方波。







2、定時器/計數器的結構

在這裏插入圖片描述
圖中振盪器(晶振)與(/12)部分構成振盪器分頻輸入電路,Ti爲計數器外部輸入引腳,C/T反爲計數器脈衝選擇端,反相器、或門、與門及啓/停電路C構成計數器啓停電路,THi、TLi爲加1計數器,TFi爲中斷標誌位。此外,還涉及一個方式寄存器TMOD和一個8位的控制寄存器TCON,用於選擇、控制及反應定時器/計數器的工作模式、啓動方式及相關參數的狀態。

3、工作原理

定時器/計數器實質上是一個加1計數器,它可以工作於定時器方式,此時輸入脈衝是系統固定的機器週期(晶振脈衝頻率12分頻後是機器週期),也可以工作在計數器模式,此時輸入的脈衝就是外部脈衝。

注意:計數器模式下外部輸入的最高脈衝頻率有限制。因爲一個脈衝週期必須要能被單片機檢測至少兩次才能判斷出這個週期裏存在跳變沿。

4、工作方式

每個定時器T0和T1都有四種工作方式,分別是方式0,方式1,方式2,方式3.
方式0:(13位計數器最大計數值8192)
1、THi提供高8位,TLi提供低5位(高3位未使用)!
要讀當前計時時間:Time = (THi <<8) +TLi;
2、需要軟件重裝初值,否則下一次計數從0開始。
3、中斷標誌位TFi硬件自動清零。
方式1:(16位計數器最大計數值65536)
1、THi提供高8位,TLi提供低8位
2、需要軟件重裝初值,否則下一次計數從0開始。
3、中斷標誌位TFi硬件自動清零。
方式2:(8位計數器最大計數值256)
1、TLi用於進行計數工作,THi用於存放計數初值並保持不變,
2、中斷標誌位TFi硬件自動清零。
方式3:(8位計數器可用於配置串口波特率)
省略。













5、配置方式

涉及寄存器:TMOD(8位) TCON(8位)

TMOD:
在這裏插入圖片描述
GATE:門控制位。用於啓、停操作方式的選擇。
C/T反:計數器/定時器方式選擇。
M1,M0:模塊工作方式選擇位。



注意:不允許位尋址!!!!
TCON
在這裏插入圖片描述
TFn:溢出中斷標誌位。
TRn: 運行控制位(1:啓動定時器。0:關閉定時器)
(低四位是外部中斷的)
可以位尋址。





定時器啓動開關:
GATE爲0時:定時器/計數器啓停由TRi的狀態(1/0)來決定。
GATE爲1時:定時器/計數器啓停必須有TRi和INTi同時爲1才能啓動。(可通過引腳來控制定時器的啓動)

THi
計數寄存器高8位
TLi
計數寄存器低8位


6、計數初值計算

定時方式下:
tOV爲所需定時時間:
t O V = ( 2 n − N ) ∗ t tOV= (2^{n}-N)*t tOV=(2nN)t
其中t爲機器週期:
t = 12 / f o s c t = 12/fosc t=12/fosc
計數方式下:
N爲要求計數的次數:
N = 2 n − X N = 2^{n} - X N=2nX






7、使用定時器/計數器步驟

1、根據需要選擇工作方式(M1,M0)
2、根據需求選擇啓動定時器還是計數器(C/T反)。
3、根據需求選擇定時器/計數器啓停方式(GATE)。
4、將步驟1、2、3涉及的bit拼成8位長度的數,賦值給TMOD寄存器。
5、(定時器)根據需求和工作方式計算計數寄存器初值,分別賦值給THi和TLi。
6、(計數器)根據需求和工作方式計算計數寄存器初值,分別賦值給THi和TLi。
7、打開定時器中斷:ETi = 1
8、啓動定時器:TRi = 1(根據GATE的值做考慮,見上述)
9、打開全局中斷:EA = 1
10、書寫定時器中斷服務函數(T0中斷號爲1,T1中斷號爲3)
11、在中斷服務函數裏重新賦初值。
(12、在中斷服務函數裏清中斷標誌位TFi = 0)










例程

#include<reg52.h>
 
sbit LED=P0^0;
sbit button = P3^2;
 
int T0_delay = 0;
char button_flag = 0;
 
void main()
{
   
   
	TMOD = 0x01;    // 0000 0001  方式1
	
	TH0 = 0x00;     //2^16×(12 / 11.0592*10^6)  最長定時約爲71ms
	TL0 = 0x00;
	
	ET0 = 1;
	TR0 = 1;
	EA =1;	       //總中斷開關
	
	while(1)
	{
   
   
		if(button == 0 && button_flag == 1)
		{
   
   
			LED=~LED;
		}
		else
		{
   
   
			button_flag = 1;
		}
	}

}

void T0_ISR(void) interrupt 1
{
   
   
	TF0 = 0;
	TH0 = 0x00;   
	TL0 = 0x00;
	
	T0_delay ++;
	if(T0_delay > 50)
	{
   
   
	  LED=~LED;
		T0_delay = 0;
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章