定时器(Timer)+计数器(Counter):
=
>
{
I
n
t
0
I
n
t
1
=>\begin{cases} Int0\\ Int1 \end{cases}
=>{Int0Int1
晶振频率:
f
=
12
M
H
Z
/
11.0592
M
H
Z
f=12MHZ/11.0592MHZ
f=12MHZ/11.0592MHZ
计数频率:
f
T
=
f
/
12
f_T=f/12
fT=f/12
(
12
分
频
)
(12分频)
(12分频)</font3
机器周期:
T
=
1
/
f
T
T=1/f_T
T=1/fT
(
12
分
频
)
(12分频)
(12分频)
寄存器配置:
T
M
O
D
(
工
作
方
式
寄
存
器
)
&
T
C
O
N
(
控
制
寄
存
器
)
TMOD(工作方式寄存器)\&TCON(控制寄存器)
TMOD(工作方式寄存器)&TCON(控制寄存器)
工作模式:
T
/
C
T {/} C
T/C
工作方式:
4
种
(
方
式
0
、
方
式
1
、
方
式
2
、
方
式
3
)
4种(方式0、方式1、方式2、方式3)
4种(方式0、方式1、方式2、方式3)
TMOD:
用
⃗
于
选
择
定
时
器
/
计
数
器
的
工
作
方
式
与
工
作
模
式
(
不
可
位
寻
址
)
\vec 用于选择定时器/计数器的工作方式与工作模式(不可位寻址)
用于选择定时器/计数器的工作方式与工作模式(不可位寻址)
(
1
)
G
A
T
E
−
−
−
门
控
位
(1)GATE---门控位
(1)GATE−−−门控位
GATE=0时,仅由TRX(X=0,1)=1启动定时器/计数器
GATE=1时,由TRX(X=0,1)=1和外部中断引脚上的高电平共同启动定时器/计数器(一般默认使用GATE=0)
(
2
)
M
1
、
M
0
−
−
−
工
作
方
式
选
择
位
(2)M_1、M_0---工作方式选择位
(2)M1、M0−−−工作方式选择位
(
3
)
C
/
T
−
−
−
计
数
器
模
式
和
定
时
器
模
式
选
择
位
(3)C/T---计数器模式和定时器模式选择位
(3)C/T−−−计数器模式和定时器模式选择位
C/T=0时,定时器模式
C/T=1时,计数器模式,计数器对外部输入引脚T0(p3.4)或T1(p3.5)的外部脉冲计数。
TCON:
低
四
位
与
外
部
中
断
有
关
(
可
位
寻
址
)
低四位与外部中断有关(可位寻址)
低四位与外部中断有关(可位寻址)
TF1、TF0—T1、T0计数溢出标志位
当计数器计数溢出时,该位置置1。使用查询方式时,此位作为状态位供cpu查询,ps:查询该位有效后以软件方法清零。使用中断方式时,此位作为中断标志位,进入中断服务程序后硬件自动清零。
TR1、TR0—计数运行控制位
TR1位/TR0位=1时,启动定时器/计数器,但是还与GATE位的状态有关。
TR1位/TR0位=0时,停止定时器/计数器。
写程序的流程
1、开头定义 void Timer0_Init()
2、写void Timer0_Init() 里面的函数
{
定
义
T
M
O
D
、
算
出
初
值
并
且
给
T
H
0
和
T
L
0
赋
值
打
开
定
时
器
中
断
允
许
开
关
(
E
T
0
)
、
打
开
总
中
断
开
关
(
E
A
)
、
打
开
定
时
器
(
T
R
0
)
\begin{cases}定义TMOD、算出初值并且给TH0和TL0赋值\\ 打开定时器中断允许开关(ET0)、打开总中断开关(EA)、打开定时器 (TR0)\end{cases}
{定义TMOD、算出初值并且给TH0和TL0赋值打开定时器中断允许开关(ET0)、打开总中断开关(EA)、打开定时器(TR0)
3、写出void Timer0()interrupt 1函数
{
赋
值
静
态
变
量
T
H
0
/
T
L
0
赋
值
i
f
条
件
语
句
来
增
加
次
数
(
注
意
给
i
归
零
,
L
E
D
=
L
E
D
)
\begin{cases} 赋值静态变量\\ TH0/TL0赋值 \\ if条件语句来增加次数(注意给i归零,LED=~LED) \end{cases}
⎩⎪⎨⎪⎧赋值静态变量TH0/TL0赋值if条件语句来增加次数(注意给i归零,LED= LED)
4、主程序引用Timer0_Init();
定时器+计数器
最新推荐文章于 2024-02-07 16:27:35 发布