?? timer.h
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: dac.c
* 文件標識: none
* 適用器件: C8051F020/1/2/3
*
* 摘 要: 本文件是Timer硬件驅動程序頭文件
*
* 當前版本: 1.1
* 作 者: 李林利
* 完成日期: 2006年9月24日
*
* 當前版本: 1.0
* 作 者: 李林利
* 完成日期: 2004年11月14日
*
* 歷史版本: 0.9
* 原作者 : 李林利
* 完成日期: 2004年1月1日
*************************************************************************************/
/*************************************************************************************
* Timer寄存器常量定義
*************************************************************************************/
/************************************************************************************
CKCON: 0x8E 時鐘控制寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
- T4M T2M T1M T0M 保留保留保留00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x8E
位7: 未用。讀=0b,寫=忽略。
位6: T4M:定時器4 時鐘選擇。
方式或計數器方式(即C/T4=1)時該位被忽略。
0:定時器4 使用系統時鐘的12 分頻
1:定時器4 使用系統時鐘
位5: T2M:定時器2 時鐘選擇。
方式或計數器方式(即C/T2=1)時該位被忽略。
0:定時器2 使用系統時鐘的12 分頻
1:定時器2 使用系統時鐘
位4: T1M:定時器1 時鐘選擇。
該位控制提供給定時器1 的系統時鐘的分頻數。
0:定時器1 使用系統時鐘的12 分頻
1:定時器1 使用系統時鐘
位3: T0M:定時器0 時鐘選擇。
該位控制提供給定時器0 的系統時鐘的分頻數。
0:計數器/定時器使用系統時鐘的12 分頻
1:計數器/定時器使用系統時鐘
位2-0: 保留。讀=000b,寫入值必須是000。
************************************************************************************/
// 常量定義:
#define T0M 0x08 //TIMER0,T0M = 0:系統時鐘/12; T0M = 1:系統時鐘
#define TIM 0x10 //TIMER1,TIM = 0:系統時鐘/12; TIM = 1:系統時鐘
#define T2M 0x20 //TIMER2,T2M = 0:系統時鐘/12; T2M = 1:系統時鐘
#define T4M 0x40 //TIMER4,T4M = 0:系統時鐘/12; T4M = 1:系統時鐘
/************************************************************************************
TCON: 0x88, T0,T1控制寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 00000000
位7 位6 位5 位4 位3 位2 位1 位0
(可位尋址) SFR地址:0x88
位7: TF1:定時器1 溢出標志
當定時器1 溢出時由硬件置位。該位可以用軟件清0,但當CPU 轉向定時器1
中斷服務程序時該位被自動清0。
0:未檢測到定時器1 溢出。
1:定時器1 發生溢出。
位6: TR1:定時器1 運行控制
0:定時器1 禁止。
1:定時器1 允許。
位5: TF0:定時器0 溢出標志
當定時器0 溢出時由硬件置位。該位可以用軟件清0,但當CPU 轉向定時器0
中斷服務程序時該位被自動清0。
0:未檢測到定時器0 溢出。
1:定時器0 發生溢出。
位4: TR0:定時器0 運行控制
0:定時器0 禁止
1:定時器0 允許
位3: IE1:外部中斷1
當檢測到一個由IT1 定義的邊沿/電平時,該標志由硬件置位。該位可以用軟件
清0,但當CPU 轉向外部中斷1 中斷服務程序時該位被自動清0(如果IT1=1)。
當IT1=0 時,該標志是/INT1 輸入信號的邏輯電平取反。
位2: IT1:中斷1 類型選擇
該位選擇/INT1 信號檢測下降沿中斷還是檢測低電平有效中斷。
0:/INT1 為電平觸發
1:/INT1 為邊沿觸發
位1: IE0:外部中斷0
當檢測到一個由IT0 定義的邊沿/電平時,該標志由硬件置位。該位可以用軟件
清0,但當CPU 轉向外部中斷0 中斷服務程序時該位被自動清0(如果IT0=1)。
當IT0=0 時,該標志是/INT0 輸入信號的邏輯電平取反。
位0: IT0:中斷0 類型選擇
該位選擇/INT0 信號檢測下降沿中斷還是檢測低電平有效中斷。
0:/INT0 為電平觸發
1:/INT0 為邊沿觸發
*************************************************************************************/
// 常量定義:
#define _TF1 0x80
#define _TR1 0x40
#define _TF0 0x20
#define _TR0 0x10
#define _IE1 0x08
#define _IT1 0x04
#define _IE0 0x02
#define _IT0 0x01
/************************************************************************************
TMOD:0x89, T0,T1定時器方式寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
GATE1 C/T1 T1M1 T1M0 GATE0 C/T0 T0M1 T0M0 00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x89
位7: GATE1:定時器1 門控位
0:當TR1=1 時定時器1 被允許,與/INT1 的邏輯電平無關。
1:只有當TR1=1 并且/INT1=邏輯1 時定時器1 被允許。
位6: C/T1:計數器/定時器1 功能選擇。
0:定時器功能:定時器1 由T1M 位(CKCON.4)定義的時鐘加1。
1:計數器功能:定時器1 由外部輸入引腳(T1)的負跳變加1。
位5-4: T1M1-T1M0:定時器1 方式選擇
這些位選擇定時器1 的工作方式。
T1M1 T1M0 方式
0 0 方式0:13 位計數器/定時器
0 1 方式1:16 位計數器/定時器
1 0 方式2:自動重裝載的8 位計數器/定時器
1 1 方式3:定時器1 停止運行
位3: GATE0:定時器0 門控位
0:當TR0=1 時定時器0 被允許,與/INT0 的邏輯電平無關。
1:只有當TR0=1 并且/INT0=邏輯1 時定時器1 被允許。
位2: C/T0:計數器/定時器0 功能選擇。
0:定時器功能:定時器0 由T0M 位(CKCON.3)定義的時鐘加1。
1:計數器功能:定時器0 由外部輸入引腳(T0)的負跳變加1。
位1-0: T0M1-T0M0:定時器0 方式選擇
這些位選擇定時器0 的工作方式。
T0M1 T0M0 方式
0 0 方式0:13 位計數器/定時器
0 1 方式1:16 位計數器/定時器
1 0 方式2:自動重裝載的8 位計數器/定時器
1 1 方式3:雙8 位計數器/定時器
*************************************************************************************/
// 常量定義:
#define GATE1 0x80
#define C_T1 0x40
#define T1M00 0x00
#define T1M01 0x10
#define T1M10 0x20
#define T1M11 0x30
#define GATE0 0x08
#define C_T0 0x04
#define T0M00 0x00
#define T0M01 0x01
#define T0M10 0x02
#define T0M11 0x03
/************************************************************************************
T0,T1定時器計數值寄存器
TL0:定時器0 低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值 00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x8A
位7-0:
TL0:定時器0 低字節
TL0 寄存器是16 位定時器0 的低字節。
TL1:定時器1 低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x8B
位7-0:
TL1:定時器1 低字節
TL1 寄存器是16 位定時器1 的位字節。
TH0:定時器0 高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x8C
位7-0:
TH0:定時器0 高字節
TH0 寄存器是16 位定時器0 的高字節。
TH1:定時器1 高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x8D
位7-0:
TH1:定時器1 高字節
TH1 寄存器是16 位定時器1 的高字節。
*************************************************************************************/
// 常量定義:無
/************************************************************************************
T2CON:0xC8,定時器2 控制寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
TF2 EXF2 RCLK0 TCLK0 EXEN2 TR2 C/T2 CP/RL2 00000000
位7 位6 位5 位4 位3 位2 位1 位0
(可位尋址) SFR地址:0xC8
位7: TF2:定時器2 溢出標志
當定時器2 溢出時由硬件置位。當定時器2 中斷被允許時,該位置1 導致CPU
轉向定時器2 的中斷服務程序。該位不能由硬件自動清0,必須用軟件清0。
當RCLK0 和/或TCLK0 為邏輯1 時,TF2 不會被置1。
位6: EXF2:定時器2 外部標志
當T2EX 輸入引腳的負跳變導致發生捕捉或重載并且EXEN2 為邏輯1 時,該
位由硬件置位。在定時器2 中斷被允許時,該位置‘1’使CPU 轉向定時器2
的中斷服務程序。該位不能由硬件自動清0,必須用軟件清0。
位5: RCLK0:UART0 接收時鐘標志
選擇UART0 工作在方式1 或3 時接收時鐘使用的定時器。
0:定時器1 溢出作為接收時鐘。
1:定時器2 溢出作為接收時鐘。
位4: TCLK0:UART0 發送時鐘標志
選擇UART0 工作在方式1 或3 時發送時鐘使用的定時器。
0:定時器1 溢出作為發送時鐘。
1:定時器2 溢出作為發送時鐘。
位3: EXEN2:定時器2 外部允許
當定時器2 不是工作在波特率發生器方式時,允許T2EX 上的負跳變觸發
捕捉或重載。
0:T2EX 上的負跳變被忽略。
1:T2EX 上的負跳變導致一次捕捉或重載。
位2: TR2:定時器2 運行控制
該位允許/禁止定時器2。
0:定時器2 禁止。
1:定時器2 允許。
位1: C/T2:計數器/定時器功能選擇
0:定時器功能:定時器2 由T2M(CKCON.5)定義的時鐘加1。
1:計數器功能:定時器2 由外部輸入引腳(T2)的負跳變加1。
位0: CP/RL2:捕捉/重載選擇
該位選擇定時器2 為捕捉還是自動重裝載方式。EXEN2 必須為邏輯1 才能使
T2EX 上的負跳變能夠被識別并用于觸發捕捉和重載。若RCLK0 或TCLK0 被
置位,該位將被忽略,定時器2 將工作在自動重裝載方式。
0:當定時器2 溢出或T2EX 上發生負跳變時將自動重裝載(EXEN2=1)。
1:在T2EX 發生負跳變時捕捉(EXEN2=1)。
*************************************************************************************/
// 常量定義:
#define _TF2 0x80
#define _EXF2 0x40
#define _RCLK0 0x20
#define _TCLK0 0x10
#define _EXEN2 0x08
#define _TR2 0x04
#define _C_T2 0x02
#define _CP_RL2 0x01
/************************************************************************************
T2定時器計數值寄存器
RCAP2L:定時器2 捕捉寄存器低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0xCA
位7-0:
RCAP2L:定時器2 捕捉寄存器的低字節
當定時器2 被配置為捕捉方式時,RCAP2L 寄存器捕捉定時器2 的低字節。當
定時器2 被配置為自動重裝載方式時,它保存重載值的低字節。
RCAP2H:定時器2 捕捉寄存器高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0xCB
位7-0:
RCAP2H:定時器2 捕捉寄存器的高字節
當定時器2 被配置為捕捉方式時,RCAP2H 寄存器捕捉定時器2 的高字節。當
定時器2 被配置為自動重裝載方式時,它保存重載值的高字節。
TL2:定時器2 低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0xCC
位7-0:
TL2:定時器2 的低字節
TL2 寄存器保存16 位定時器2 的低字節。
TH2:定時器2 高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0xCD
位7-0:
TH2:定時器2 的高字節
TH2 寄存器保存16 位定時器2 的高字節。
*************************************************************************************/
// 常量定義:無
/************************************************************************************
TMR3CN:0x91,定時器3 控制寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
TF3 - - - - TR3 T3M T3XCLK 00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x91
位7: TF3:定時器3 溢出標志
當定時器3 從0xFFFF 到0x0000 溢出時由硬件置位。當定時器3 中斷被允許時,
該位置‘1’使CPU 轉向定時器3 的中斷服務程序。該位不能由硬件自動清0,
必須用軟件清0。
位6-3: 未用。讀=0000b,寫=忽略。
位2: TR3:定時器3 運行控制
該位允許/禁止定時器3
0:定時器3 禁止。
1:定時器3 允許。
位1: T3M:定時器3 時鐘選擇
該位控制提供給計數器/定時器3 的系統時鐘的分頻數。
0:計數器/定時器3 使用系統時鐘的12 分頻。
1:計數器/定時器3 使用系統時鐘。
位0: T3XCLK:定時器3 外部時鐘選擇
該位選擇外部振蕩器輸入的8 分頻作為定時器3 的時鐘源。當T3XCLK 為邏
輯‘1’時,T3M(TMR3CN.1)位被忽略。
0:定時器3 的時鐘源由T3M(TMR3CN.1)位定義。
1:定時器3 的時鐘源外部振蕩器輸入的8 分頻。
*************************************************************************************/
// 常量定義:
#define TF3 0x80
#define TR3 0x04
#define T3M 0x02
#define T3XCLK 0x01
/************************************************************************************
T3定時器計數值寄存器
TMR3RLL:定時器3 重載寄存器低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x92
位7-0:
TMR3RLL:定時器3 重載寄存器的低字節
定時器3 被配置為自動重裝載定時器。該寄存器保存重載值的低字節。
TMR3RLH:定時器3 重載寄存器高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x93
位7-0:
TMR3RLH:定時器3 重載寄存器的高字節
定時器3 配置為自動重裝載定時器。該寄存器保存重載值的高字節。
TMR3L:定時器3 低字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x94
位7-0:
TMR3L:定時器3 的低字節
TMR3L 寄存器為定時器3 的低字節。
TMR3H:定時器3 高字節
R/W R/W R/W R/W R/W R/W R/W R/W 復位值00000000
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址:0x95
位7-0:
TMR3H:定時器3 的高字節
TMR3H 寄存器為定時器3 的高字節。
*************************************************************************************/
// 常量定義:無
/************************************************************************************
T4CON:0xC9,定時器4 控制寄存器
R/W R/W R/W R/W R/W R/W R/W R/W 復位值
TF4 EXF4 RCLK1 TCLK1 EXEN4 TR4 C/T4 CP/RL4 00000000
位7 位6 位5 位4 位3 位2 位1 位0
SFR地址:0xC9
位7: TF4:定時器4 溢出標志
當定時器4 從0xFFFF 到0x0000 溢出時由硬件置位。當定時器4 中斷被允許時,
該位置1 導致CPU 轉向定時器4 的中斷服務程序。該位不能由硬件自動清0,
必須用軟件清0。當RCLK1 和/或TCLK1 為邏輯1 時,TF4 不會被置位。
位6: EXF4:定時器4 外部標志
當T4EX 輸入引腳的負跳變導致發生捕捉或重載并且EXEN4 為邏輯1 時,該
位由硬件置位。在定時器4 中斷被允許時,該位置‘1’使CPU 轉向定時器4
的中斷服務程序。該位不能由硬件自動清0,必須用軟件清0。
位5: RCLK1:UART1 接收時鐘標志
選擇UART1 工作在方式1 或3 時接收時鐘使用的定時器。
0:定時器1 溢出作為接收時鐘。
1:定時器4 溢出作為接收時鐘。
位4: TCLK1:UART1 發送時鐘標志
選擇UART1 工作在方式1 或3 時發送時鐘使用的定時器。
0:定時器1 溢出作為發送時鐘。
1:定時器4 溢出作為發送時鐘。
位3: EXEN4:定時器4 外部允許
當定時器4 不是工作在波特率發生器方式時,允許T4EX 上的負跳變觸發
捕捉或重載。
0:T4EX 上的負跳變被忽略。
1:T4EX 上的負跳變導致一次捕捉或重載。
位2: TR4:定時器4 運行控制
該位允許/禁止定時器4。
0:定時器4 禁止。
1:定時器4 允許。
位1: C/T4:計數器/定時器功能選擇
0:定時器功能:定時器4 由T4M(CKCON.6)定義的時鐘觸發加1。
1:計數器功能:定時器4 由外部輸入引腳(T4)的負跳邊觸發加1。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -