006第六章TCC计时器Word文档下载推荐.docx
- 文档编号:16758286
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:41
- 大小:184.86KB
006第六章TCC计时器Word文档下载推荐.docx
《006第六章TCC计时器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《006第六章TCC计时器Word文档下载推荐.docx(41页珍藏版)》请在冰豆网上搜索。
週邊功能致能控制暫存器(PeripheralsEnableControl)–PRIE(0x80)
SPIE
USBE
WME
ADE
PWM1E
PWM0E
TCCE
FRCE
此暫存器控制是否啟用週邊功能。
當設為0時,表示不啟用該週邊功能,當設為1時,表示啟用該週邊功能。
✓Bit1(TCCE):
計時器(TCC)功能致能位元。
中斷功能致能控制暫存器(InterruptsEnableControl)–INTE(0x81)
1
GIE
RBFIE
PWM1IE
PWM0IE
EINT1E
EINT0E
TCCOE
FRCOE
此暫存器控制是否啟用中斷功能。
當設為0時,表示不啟用中斷功能,當設為1時,表示啟用中斷功能。
✓Bit1(TCCOE):
計時器溢位中斷功能致能位元。
計時器控制暫存器(TimerClockCounterController)–TCCC(0x93)
-
TCCS0
PSR2
PSR1
PSR0
✓Bit0~Bit2(PSR0~PSR2):
PrescalerforTCC
此位元是設定TCC的預除器
ClockRate
1:
8
16
32
64
128
256
✓Bit3(TCCS0):
ClockSourceSelect
此位元是設定TCC的時脈選擇
ClockSource
選擇PLL時脈
選擇外部RC時脈
II.程式範例
1.實習1-TCC計時原理實習
動作說明
程式使用TCC計時,每經過0.5秒LED閃爍。
硬體連接
此範例使用ET44M210的實驗電路板。
程式說明
此範例設定使用IC內部的Clock並設定為6MHz,預除器設定每經過256指令週期TCC的值加1,因此利用公式
TCCTimer=(0x100-TCC)*Prescaler*(1/ClockSource)再乘以自己設定的COUNT1(100)因此(0x100-TCC)*256*(1/6MHz)*100=0.5秒;
所以可得到TCC的值為117。
程式一開始先呼叫Initial副程式:
清除中斷旗標,設定PORTA為輸出端,設定TCC使用IC內部的Clock,預除器設定為1:
256,再設定TCC暫存器的值,之後啟用TCC的功能及中斷的功能,就開始等待TCC的溢位中斷。
當中斷發生之後:
首先清除中斷旗標,之後判斷是否已到達100次(COUNT1),若是則表示已經過0.5秒,將PORTA反相輸出,若否則表示未達0.5秒,程式返回繼續等待。
流程圖
程式碼
INT01.dt中副程式及程式區段說明
INT01.dt程式共包含了5個副程式及程式區段,依照程式的撰寫順序有:
START:
、LOOP:
、INITIAL:
、DELAY:
、D1:
為了方便讀者閱讀瞭解,針對程式中所定義的LABEL,以字母排序,整理如下表:
程式中所定義的副程式或LABEL說明
編號
LABEL名稱
行號
說明
D1:
61
延遲副程式的LABEL
DELAY:
54
延遲副程式
INITIAL:
37
INITIAL副程式
LOOP:
主程式迴圈
START:
29
程式開始
本表格是針對程式中所定義的LABEL所整理出來的,針對表格每一欄的屬性說明如下:
編號:
為該表格中所要說明的LABEL順序編號。
LABEL名稱:
為程式中實際的LABEL名稱。
行號:
為該LABEL實際於程式中第幾行。
說明:
該說明用以描述解釋該LABEL下面的副程式或程式區段所要執行的動作。
INT01.dt完整的原始程式碼
000/***********************************************
001程式說明
002程式使用外部中斷,每按下一次按鍵LED會點亮或熄滅。
003外部中斷0(EINT0)
接腳在PORT
C的bit3
004
005************************************************/
006INCLUDE"
ET44M210_REG.H"
007TIMER1
==
0X40
;
自設的暫存器(延時計數用)
008TIMER2
0X41
009TIMER3
0X42
010
011ORG
0X0000
012
JMP
START
013
014ORG
0X0018
EINT中斷向量位址
015
MOV
A,#0XFF
LED閃爍
016
PORTA,A
LED全亮
017
CALL
DELAY
呼叫DELAY副程式
018
COM
PORTA
將PORT
A反相
019
020
021
022
023
BC
INTF,EINT0F
清除EINT0中斷旗標
024RETI
025
026
027ORG
0X0100
028;
程式開始
029START:
030
INITIAL
呼叫INITIAL副程式
031;
主程式迴圈
032LOOP:
033
INC
034
035
LOOP
等待外部中斷
036;
INITIAL副程式
037INITIAL:
038
A,#0X00
039
IOCA,A
A設為輸出
040
IOCB,A
B設為輸出
041
PORT
A=0
042
PORTB,A
B=0
043
044
IOCC,A
C設為輸入
045
PUCC,A
C接上提昇電阻
046
CLR
INTE
除能所有的中斷功能
047
INTF
清除所有的中斷旗標
048
BS
INTE,EINT0E
致能EINT0中斷
049
EINTED,EINT0ED
設定EINT0使用負緣觸發輸入
050
ENI
致能整體中斷
051RET
052
053;
延遲副程式
054DELAY:
055
056
TIMER1,A
057
TIMER2,A
058
A,#0X05
059
TIMER3,A
060;
延遲副程式的LABEL
061D1:
062
DJZ
TIMER1,$+3
063
D1
064
NOP
065
TIMER2,$+3
066
067
068
TIMER3,$+3
069
070
071RET
072
073
074ORG
0X3FFF
075
DW
0X4000
2.實習2-TCC霹靂燈應用實習
程式使用TCC計時,每經過0.5秒LED輪流點亮(霹靂燈)。
首先清除中斷旗標,之後判斷是否已到達100次(COUNT1),若是則表示已經過0.5秒,之後再判斷是應該左旋還是右旋,將PORTA左旋或右旋1個位元輸出,若未達0.5秒,程式返回繼續等待。
TCC02.dt中副程式及程式區段說明
TCC02.dt程式共包含了10個副程式及程式區段,依照程式的撰寫順序有:
、TCC_INT:
、ROTATE:
、ROLEFT:
、ROLEFT1:
、RORIGHT:
、RORIGHT1:
、OK:
、NOT_ROTATE:
38
NOT_ROTATE:
92
OK:
85
LED左旋或右旋1位元OK,在此重新設定COUNT1的值
ROLEFT1:
69
清除左旋旗標,準備往右旋
ROLEFT:
LED左旋1個位元
RORIGHT1:
80
設定左旋旗標,準備往左旋
RORIGHT:
75
LED右旋1個位元
ROTATE:
60
判斷LED應該左旋或右旋
22
9
TCC_INT:
51
中斷副程式
TCC02.dt完整的原始程式碼
001程式說明:
使用TCC計時中斷,使LED輪流點亮(霹靂燈)。
002TCC
Timer=(0x100-TCC)
*
Prescaler*
(1/Clock
Source)
003Clock
Source:
IC內部的Clock(6MHz)
004Prescaler:
256(PSR0~PSR2==111)
005(0x100-TCC)
*256*
(1/6MHz)*100=0.5秒
006************************************************/
007INCLUDE
"
INCLUDE
ET44M210_REG.H標頭檔
008TCC_VALUE
117
TCC的設定值
009COUNT1
自設的暫存器
010COUNT2
011TEMP1
012LEFT
0X01
017ORG
0X0028
TCC中斷向量
TCC_INT
跳至TCC_INT副程式
020ORG
021;
022START:
024
A,#0X64
COUNT1,A
自設的暫存器值為100
A,#0X07
027
COUNT2,A
028
TEMP1
029
A,#(256-TCC_VALUE)
TCC,A
TCC的值(上數117次)
031
PRIE,TCCE
致能TCC的功能
032
INTE,TCCOE
致能TCC的中斷功能
致能所有中斷功能
PORTA,0
A設為0XFF(LED亮)
TEMP1,LEFT
036
$
等待計時中斷
037;
038INITIAL:
A初始值為0X00(LED不亮)
TCCC,A
046;
CLOCK
SOURCE:
IC內部的CLOCK(6MHZ)
047;
PRESCALER:
048RET
050;
中斷副程式
051TCC_INT:
INTF,TCCOF
清除TCC中斷旗標
053
COUNT1,ROTATE
若COUNT1的值為0則表示已經
054;
過0.5秒,程式跳至ROTATE執行;
055;
若COUNT1的值不為0則表示未
056;
達0.5秒,程式跳至NOT_ROTATE
057;
執行
NOT_ROTATE
059;
判斷LED應該左旋或右旋
060ROTATE:
061
JBS
TEMP1,LEFT,ROLEFT
RORIGHT
063;
LED左旋1個位元
064ROLEFT:
RLC
PORTA,1
A反相輸出
COUNT2,ROLEFT1
OK
068;
清除左旋旗標,準備往右旋
069ROLEFT1:
071
074;
LED右旋1個位元
075RORIGHT:
076
RRC
077
COUNT2,RORIGHT1
078
079;
設定左旋旗標,準備往左旋
080RORIGHT1:
081
082
083
084;
LED左旋或右旋1位元OK,在此重新設定COUNT1的值
085OK:
086
A,#100
087
088
LED不旋轉,在此重新設定TCC的值
089
090;
============================================================
091;
092NOT_ROTATE:
093
094
重新設定TCC的值
095RETI
096
097
098ORG
099
3.實習3-外部RC時脈TCC計時實習
此範例與範例1相同,只是改以外部RC振盪作為TCC的時脈來源。
此範例設定使用外部RC振盪因此振盪頻率是500KHz,預除器設定每經過32正緣觸發(RisingEdge)或負緣觸發(FallingEdge)時,TCC的值加1,因此我們利用公式
TCCTimer=(0x100-TCC)*Prescaler*(1/ClockSource)再乘以自己設定的COUNT1(100)因此(0x100-TCC)*32*(1/500KHz)*100=0.5秒;
所以可得到TCC的值為78。
清除中斷旗標,設定PORTA為輸出端,設定TCC使用外部RC振盪的Clock,預除器設定為1:
32,再設定TCC暫存器的值,之後啟用TCC的功能及中斷的功能,就開始等待TCC的溢位中斷。
TCC03.dt中副程式及程式區段說明
TCC03.dt程式共包含了5個副程式及程式區段,依照程式的撰寫順序有:
、FLASH:
、NOT_FLASH:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 006 第六 TCC 计时器
![提示](https://static.bdocx.com/images/bang_tan.gif)