文章目录
- 知识准备
- 工作方式寄存器TMOD
- TCON寄存器
- IE寄存器
- 定时/计数器的使用
- 初始化
- 常考题型
- 例题1
- 题目描述
- 题目解析
- 题解
- 例题2
- 题目描述
- 题目解析
- 题解
知识准备
工作方式寄存器TMOD
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
-
[注]:TMOD
高4位
与T1
相关,低4位
与T0
相关。 -
GATE
- 0:定时器/计数器的运行由
TRX
决定; - 1: 定时器/计数器的运行由
TRX
和外中断
引脚共同决定;
- 0:定时器/计数器的运行由
-
C/T
- 0:定时器模式;
- 1:计数器模式;
-
M1/M0
M1 | M0 | 方式 | n | |
---|---|---|---|---|
0 | 0 | 方式0 | 13位 | (重要) |
0 | 1 | 方式1 | 16位 | (重要) |
1 | 0 | 方式2 | 8位 | |
1 | 1 | 方式3 | 2个8位 | (仅适用于T0) |
TCON寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
-
IT0/IT1:外部中断0/1的中断
触发方式选择
:- 1:
沿边触发
,由1
到0
的下降沿有效; - 0:
电平触发
,低电平有效;
- 1:
-
IE0/IE1:外部中断0/1的
中断标志位
:- 1:发生中断;
- 0:未发生中断;
-
TR0/TR1:T0/T1
运行控制位
:- 1:运行;
- 0:不运行;
-
TF0/TF1:T0/T1的
溢出标志位
:- 0:定时器未溢出;
- 1:定时器溢出;
IE寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
EA | – | – | ES | ET1 | EX1 | ET0 | EX0 |
-
EX0/EX1:
外部中断0/1
的中断允许设置位:- 1:允许中断;
- 0:禁止中断;
-
ET0/ET1:
定时器中断T0/T1
的中断允许设置位:- 1:允许中断;
- 0:禁止中断;
-
ES:
串行口
的中断允许设置位:- 1:允许中断;
- 0:禁止中断;
-
EA:
中断允许总开关
设置位:- 1:允许总中断;
- 0:禁止总中断;
定时/计数器的使用
初始化
- 设置
TMOD
:设置定时器的工作方式(四种工作方式,一般选择方式0或方式1); - 计算
初值
(上一章中已详细介绍): - 将初值写入
TH0、TL0
或TH1、TL1
; - 开放定时器中断和
ETX
和EA
(若选择中断的方式则需要开启,查询方式不需要); - 启动定时器/计数器:
TR0
或TR1
;
常考题型
例题1
题目描述
- 系统时钟晶振频率为
12MHZ
,利用T0
定时器选择方式0
在P1.0引脚上输出周期为2ms
的方波,允许中断
。
题目解析
- 方波周期为2ms,则波峰、波谷各持续1ms,所以解决本题的主要思路为:利用定时器实现定时1ms,当定时器溢出(即计时1ms后),立即对P1.0进行取反,实现方波一低一高。
题解
准备工作
- 设置
TMOD
:GATE = 0
,C/T = 0
,M1、M0 = 00
(因为选择方式0),所以TMOD = 00H
; - 计算初值(步骤参考上一篇文章),定时时间为1ms,代入公式得 初值
X = 7192 = 1C18H
=1 1100 0001 1000
; - 写入TH0,TL0:因为选择方式0,所以
TH0
取X的高8位
,TL0
取X的后5位
,即TH0
= 1 1100 000 =0E0H
,TL0
= (前面补0)0001 1000 =18H
;
中断方式程序设计
ORG 0000H
AJMP MAIN
ORG 000BH ;T0中断入口地址
AJMP TIME ;跳转到定时中断服务程序
ORG 0030H
MAIN:
MOV TMOD, #00H;设置TMOD
MOV TL0, #18H;填充定时器初值
MOV TH0, #0E0H
SETB ET0 ;允许定时器0中断
SETB EA ;中断允许总开关
SETB TR0 ;启用定时器T0
LOOP:
SJMP LOOP ;死循环
TIME:
MOV TL0, #18H;重装初值
MOV TH0, #0E0H
CPL P1.0 ;P1.0取反,实现方波一低一高
RETI
END
查询方式程序设计
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV TMOD, #00H;设置TMOD
MOV TL0, #18H;填充定时器初值
MOV TH0, #0E0H
SETB TR0 ;启用定时器T0
HERE:
JBC TF0, LOOP;当(TF0) = 1时,跳转到LOOP并且(TF0) -> 0
AJMP HERE
LOOP:
MOV TL0, #18H;重装初值
MOV TH0, #0E0H
CPL P1.0 ;P1.0取反,实现方波一低一高
RETI
END
- 注意查询方式与中断方式最明显的不同是省略了设置中断各种开关的步骤。查询方式把定时器溢出就中断的效果代替为HERE所在的指令,即一直监视TF0(定时器溢出标志位),若定时器溢出则跳转到LOOP,否则继续原地死循环。
例题2
题目描述
- 系统时钟晶振频率为
12MHZ
,利用T1方式2
定时模式,在P1.0引脚上输出周期为500微秒
的方波。
题目解析
- 本题与上一题思路完全相同,不同的是定时时间为250微秒,晶振频率为12MHZ,并且选择T1方式2。
题解
- 设置
TMOD
:GATE = 0
,C/T = 0
,M1、M0 = 10
(因为选择方式2),所以TMOD = 20H
; - 计算初值:由公式 T定时 = (2n - X) · 12/ ∫晶振 = (28 - X) · 12/12MHZ = 250,解得初值
X = 06H
; - 写入TH0,TL0:
TH1 = 06H
,TL1 = 06H
;
中断方式程序设计
ORG 0000H
AJMP MAIN
ORG 001BH ;T1的中断入口地址
AJMP TIME ;跳转到定时中断服务程序
ORG 0030H
MAIN:
MOV TMOD, #20H;设置TMOD
MOV TL0, #06H;填充定时器初值
MOV TH0, #06H
SETB ET1 ;允许定时器1中断
SETB EA ;中断允许总开关
SETB TR1 ;启用定时器T1
LOOP:
SJMP LOOP ;死循环
TIME:
CPL P1.0 ;P1.0取反,实现方波一低一高
RETI
END
查询方式程序设计
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV TMOD, #20H;设置TMOD
MOV TL0, #06H;填充定时器初值
MOV TH0, #06H
SETB TR1 ;启用定时器T1
HERE:
JBC TF1, LOOP;当(TF1) = 1时,跳转到LOOP并且(TF1) -> 0
AJMP HERE
LOOP:
CPL P1.0 ;P1.0取反,实现方波一低一高
RETI
END
可将题解当作解题模板背下……