单片机原理及应用第6章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章单片机的定时器/计数器
实例1 设单片机的fosc=12MHz,采用T1定时方式1在P2.0脚 上输出周期为2ms的方波。
U?
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
(M0 M1为01组合时)
fosc
定时方式
查询 / 中断
定时时间:t = (216- a)×12/fosc (s) 计数初值:a = 216- t×fosc/12 最大定时时间(a=0,fosc =12MHz):t = 216(s) = 65536 (s)
定时范围为1~65,536 μs(≈65ms)。
分析:计数初值TL0= ((256-250)*12/12)%256 = 0x06,TMOD = 0x02 (1)查询方式 #include <reg51.h> sbit P2_0 = P2^0; main(){ TMOD = 0x02; TH0= TL0 = 0x06; TR0=1; for(;;){ do{} while(!TF0); P2_0 =!P2_0; TF0 = 0; } }
第6章单片机的定时器/计数器
6.1 定时/计数器的结构与工作原理
6.2 定时器/计数器的控制
6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用
第6章单片机的定时器/计数器
T0
M1 0 0 1 1
M0 0 1 0 1
工作方式 功能说明 0 1 2 3 13位定时/计数器 16位定时/计数器 8位自动重装定时/计数器 3种定时/计数器关系
第6章单片机的定时器/计数器
注意:TMOD只能以字节方式进行初始化
TMOD
(89H)
D7 D6
D5 M1
T1
D4
D3
D2
D1 M1 T0
D0 M0
GATE
C/T C /T
M0
GATE
CC/T /T
例如,设置T0为定时方式1,允许TR0启动; T1为计数方式0,允许INT1启动。 则 TMOD = 1100 0001B =0xc1 又如,系统上电默认值为TMOD = 0,则默认状态应为: T0和TI均为定时方式0,允许TR0、TR1启动。
8BH IE1
8AH IT1
89H IE0
88H IT0
定时器控制位
fosc
T1 查询/ 中断
T0脚
外部中断控制位
fosc
T0 TF0 查询/ 中断
INT0 TR0
注意,系统上电默认值为TCON = 0,则默认状态应为: TR0和TR1均为关闭状态、电平触发方式、没有0 # ~3# 中断请求
第6章单片机的定时器/计数器
T0
第6章单片机的定时器/计数器
实例1仿真运行效果
第6章单片机的定时器/计数器
(2)中断方式 #include <reg51.h> sbit P2_0=P2^0; timer0 () interrupt 3 { //T1中断函数 P2_0 = !P2_0; //P2.0取反 TH1 = 0xfc; //装载计数初值 TL1 = 0x18; } main () { TMOD = 0x10; //T1定时方式1 TH1 = 0xfc; //装载计数初值 TL1 = 0x18; EA=1; //开总中断 ET1=1; //开T1中断 TR1=1; //启动T1 while(1); } 注意:中断响应后系统可自动将TFx标志位清0
第6章单片机的定时器/计数器
纯软件定时/计数方法: 定时——空循环预定周次,等待预定时间 计数——读取I/O口电平,统计变化次数
delay(unsigned int time ){ unsigned int j = 0; for(;time>0;time--) for(j=0;j<125;j++); }
查询 / 中断
1ms 2ms
方波输出原理:定时1ms后将端口输出电平取反。 1ms定时的计数初值应为: a = 216 – t* fos / 12 = 216 – 1000* 12/ 12 = 64536 = 0xfc18 TH1 = 0xfc TL1 = 0x18 注意:需要不断重装计数初值。
第6章单片机的定时器/计数器
第6章单片机的定时器/计数器
T0有4种工作方式,T1有3种工作方式,每种工作方式都有定时 和计数2种方式,故共有14种组合关系。
T0 定时方式0 定时方式1 定时方式2 定时方式3 计数方式0 计数方式1 计数方式2 计数方式3 定时方式0 定时方式1 定时方式2 T1 计数方式0 计数方式1 计数方式2
系统时钟脉冲
外来信号脉冲
K
加1计数器
TFx→1
查询或中断
定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.
第6章单片机的定时器/计数器
基本工作原理:
fosc
(12分频 = 1个机器周期→1个计数脉冲)
查询 / 中断
TFx Tx端
(X = 0、1) 2n
溢出 空间
逻辑开关: C T = 0→定时器方式, C T = 1计数器方式
D7 GATE D6 C/T C /T T1
fosc
T1 查询/ 中断
T0脚
TMOD
(89H)
D5 M1
D4 M0
D3 GATE
D2
D1 M1 T0
D0 M0
CC/T /T
fosc
T0 TF0 查询/ 中断
INT0 TR0
T1方式选择位 00-方式0 T1工作 01-方式1 状态 10-方式2
T0方式选择位 00-方式0 01-方式1 T0工作 状态 10-方式2 11-方式3
T1
M1
0 0 1
M0
0 1 0
工作方式 功能说明
0 1 2 13位定时/计数器 16位定时/计数器 8位自动重装定时/计数器
注意: T1只有3种工作方式(T0的方式3中占用了T1的部分资源)。
学习顺序:方式1→方式2 →方式0 →方式3
第6章单片机的定时器/计数器
(1) 方式1 ——使用16位定时/计数器(n=16,THx+TLx)
查询 / 中断
门控位 GATE=0→允许TR1 启动计数器 GATE=1→允许INT1 启动计数器
外部中断1 参与定时器 的启停管理
启动控制位 TR1=1→启动计数器 TR1=0→停止计数器
TCON
TMOD
第6章单片机的定时器/计数器
TCON
(88H)
8FH TF1
8EH TR1
8DH TF0
8CH TR0
a
计数器溢出空间 = 计数器最大空间 - 计数初值 定时时间t = (计数器最大空间 - 计数初值)×机器周期
计数 初值
=(2n-a)×12/fosc (s)
t与n、a、fosc三个因素有关
第6章单片机的定时器/计数器
fosc
查询 / 中断
TFx Tx端 (X = 0、1)
定数计数值 N = (计数器最大空间 - 计数初值) = (2 n – a ) N与n、a两个因素有关
第6章单片机的定时器/计数器
小结:使用定时/计数器的步骤 (1)设置TMOD——确定定时/计数器的工作状态
使用T0还是T1? 采用定时模式还是计数模式? 采用工作方式0、方式1、方式2、方式3?
T0
强调:TMOD的设置只能以字节形式给出
第6章单片机的定时器/计数器
(2)计算计数初值——产生期望的定时/定数间隔 定时计数初值 a = 216- t×fosc/12 (t ≤65536 s, fosc=12MHz时) 定数计数初值 a = 216- N (N≤65536, 脉冲频率≤0.5MHz,fosc=12MHz时) 装载计数初值: THx = a / 256 TLx = a % 256
基本思路:由CPU统计状态变化次数,待预定结果出 现后结束统计。
存在问题:占用过多CPU机时
第6章单片机的定时器/计数器
单片机软硬件联合定时/计数方法:
(已知剩余空间)
定时器 溢出 (中断请求标志)
系统时钟脉冲
加1计数器
溢出
TFx→1
查询或中断
计数器
外来信号脉冲
加1计数器
溢出Leabharlann Baidu
TFx→1
查询或中断
定时/ 计数器
第6章 单片机的定时器/计数器
6.1 定时/计数器的结构与工作原理 6.2 定时器的控制
6.3 定时/计数器的工作方式
6.4 定时/计数器的编程和应用
第6章单片机的定时器/计数器
6.1 定时/计数器的结构与工作原理
6.1.1 定时/计数器的基本原理
6.1.2 定时/计数器的结构 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用
18
XTAL2
9
RST
D1
LED-YELLOW
R1
100
29 30 31
PSEN ALE EA
A B C D
虚拟示波器
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51
第6章单片机的定时器/计数器
分析:周期为2ms的方波由2个半周期为1ms的正负脉冲组成
第6章单片机的定时器/计数器
fosc
计数方式
查询 / 中断
定数计数值: N = (216 – a ) 最大计数值:N = 65536 (脉冲) 由于检测一个负跳变需要2个机器周期,即24个振荡周期, →最高计数频率=
1 f osc 。 24
当fosc=12MHz时,外部脉冲的最大允许频率为0.5MHz 。
第6章单片机的定时器/计数器
6.1 定时/计数器的结构与工作原理
6.1.1 定时/计数器的基本原理
6.1.2 定时/计数器的结构 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用
第6章单片机的定时器/计数器
51单片机定时/计数器的结构
2个16位计数器T0 (TH0、TL0)和T1 (TH1、TL1)——加1计数器 2个8位控制寄存器TCON和TMOD——管理计数器的运行 2个外部引脚T0(P3.4)和T1(P3.5)——接入外部脉冲
第6章单片机的定时器/计数器
6.1 定时/计数器的结构与工作原理
6.2 定时器/计数器的控制
6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用
第6章单片机的定时器/计数器
定时/计数器的控制关系(以T1为例)
模式选择位
C T =0→定时 C T =1→计数
fosc
T1
中断请求标志位 TF1=1→请求中断 TR1=0→没有中断
第6章单片机的定时器/计数器
4)启动定时器: TR0 = 1 或 TR1= 1 5)进行定时或计数结束后的其它工作 6)为下次定时/计数做准备(清TFx标志+重装载计数初值) 若是中断方式,则无需软件清TFx标志位; 若是查询方式,需要软件清除TFx标志位。
第6章单片机的定时器/计数器
(2) 方式2
第6章单片机的定时器/计数器
3)确定采用何种方式处理溢出结果 若是中断方式→中断初始化设置和中断服务程序:
ETx =1; EA = 1; //开定时x中断,x=0或1 //开总中断
tx_srv () interrupt n { „ „ }
//n=1或3
若是查询方式——采用条件判断语句
do {}while (!TFx) ; …… // x=0或1
(1)查询方式 #include <reg51.h> sbit P2_0 = P2^0; main () { TMOD = 0x10; //设置T1定时方式1(0001 0000B) TR1=1; //启动T0 for(;;){ TH1 = 0xfc; //装载计数初值 TL1 = 0x18; do{ } while(!TF1); //等待TF1溢出 P2_0 =!P2_0; //定时时间到P2.0反相 TF1 = 0; //TF1标志清0 } }
采用8位计数器,TLx
可自动重装载计数初值(TLx溢出后, THx→TLx);
fosc
查询 / 中断
没有装载计数初值的延误,方式2定时精度相对较高; 延时时间 t = (28-a)×12/fosc (微秒) → 12MHz时的最大定时量为 256s;
第6章单片机的定时器/计数器
实例2 采用T0定时方式2在P2.0口输出周期为0.5ms的方波(设 fosc=12MHz)。