📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -