课件第8章-定时器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
项目二任务5信号发生器
要求:设单片机的fosc=12MHz,采用T0定时 方式1在P1.0脚上输出周期为2ms的方波,试 计算定时器的初值。
周期为2ms的方波由2个半周期为1ms的正负脉 冲组成,定时1ms后将端口输出电平取反即中 得到方波。
已知机器fosc =12MHz, 1ms定时对应的计数 值为:1ms/T机=1000us/(12/fosc)=1000 则1ms定时的计数初值应为:x = 216t×fosc/12 =216 -1000=55536. 其实,由于初值是计数值的补数,在C语言中 也可直接用负数表示,即x=-1000.
关于交通灯项目的再讨论
ห้องสมุดไป่ตู้
延时程序占用大量时间,CPU空转,效率不 高,如何提高效率? 延时,即定时问题能否交给专门的装置去管? 定时器即专门处理时间问题; 如何有多个程序要求“同时”运行怎么办?
为什么要中断? 要跑马灯与交通灯同时运行, 怎么办?
时间分片可以解决这一问题
A时间 段, CPU 做事 件1 B时间 段, CPU 做事 件2 C时间 段, CPU 做事 件3 A时间 段, CPU 做事 件1 B时间 段, CPU 做事 件2 C时间 段, CPU 做事 件3
着的开关控制定时器的启动与停止(相当于开 关插销)。定时器的核心其实是能自动加一的 计数器(其作用类似于装沙子的容器),每来 一个脉冲,它就加一,这样计数器记录的脉冲 个数乘以脉冲的周期即为定时的时间。计数器 计到最大值后会产生溢出(正如沙子装满容器 后会溢出一样),它将置位中断标志TF产生中 断请求。
180R
LED-GREEN
180R
R5 R6
LED-GREEN
180R LED-GREEN D5
18
XTAL2
180R
9
RST
R7
180R
D6
LED-GREEN
29 30 31
R8
180R
LED-GREEN D7
PSEN ALE EA
LED-GREEN
R9
180R
D8
LED-GREEN
1 2 3 4 5 6 7 8
要求:掌握定时器的控制机制; 掌握定时器的工作方式1、2; 能编制控制定时器的程序
项目二任务4 定时器中断控制的跑 马灯
要求:采用定时中断方式,实现图8.1跑马 灯控制功能。要求跑马灯的闪烁速率为每秒1 次。
任务分析:用软件延时的方法虽然简单,但效 率不高。本任务就是要用更高效的方法解决延 时问题。 前面已经谈到,用软件延时的办法虽然方法简 单,但单片机的效率低下。能否在单片机CPU 工作的同时进行定时呢?
D0
M1 C/T INT0引脚 GATE D7
方式2
方式2为自动重装初值的8位计数方式。 可自动重装载计数初值(TLi溢出后THi中数值可 自动装入TLi适合于作串口波特率发生器(定时 精度较高) TCON TMOD
TF1 D7 申请 中断 TR1 TF0 TR0 TH0 8位 D0图 8.10 定时器工作方式2示意图 溢出 1 TL0 &
定时器的控制寄存器
以上的这些控制都是通过特殊功能寄存器来实 现的。
一、工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器 的工作方式,低四位用于T0,高四位用于T1。其 格式如下:
字节地址:89H,不可以位寻址。 GATE:门控位。GATE=0时,只要用软件使 TCON中的TR0或TR1为1,就可以启动 定时/计数器工作;GATA=1时,要用软件使 TR0或TR1为1,同时外部中断引脚或也为高电 平时,才能启动定时/计数器工作。即此时定 时器的启动条件,加上了或引脚为高电平这一 条件。
timer0() interrupt 1 { t++; if(t==20) { t=0; ldelay=1;//每次溢出置一个标记,以便 主程序处理 } TH0 =0x3c; //重置T0初值0x3cb0 TL0 =0xb0; }
void main(void) { uchar code ledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar ledi=0; //用来指示显示顺序 TMOD=0x01; //定义T0定时方式1 TH0 =0x3c; //溢出20次=1秒(12M晶 振) TL0 =0xb0; TR0=1; //启动定时器 ET0=1; //打开定时器0中断 EA=1; //打开总中断
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51
分析:图 8.12 跑马灯电路图6 利用定时器直接进行1s延时是无法实现的,但 可以利用硬件/软件联合法(利用定时中断进 行中断次数统计),从而增加延时长度。
在12M晶振定时方式1时,1s延时可以视为20 次中断,每次50ms的累积延时。 此时的计数初值为:a = -50000
方式1
方式1的计数位数是16位,由TL0作为低8位、 TH0作为高8位,组成了16位加1计数器 。
TCON TF1 申请 中断 TR1 TF0 TR0 D7 溢出 1 TH0 8位 TL0 8位 &
≥1
TMOD T0引脚 1 M0 0 M1 C/T 0 机器周期 GATE M0 1 D0
图8.9 定时器工作方式0、1示意图
四种方式初值可按如下方法计算: X = M – 计数值 对于不同的工作方式,计数器位数不同,故最大计数 值M也不同: 方式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:定时器0分为2个8位计数器,每个M均 为256。 计算出来的结果X转换为16进制数后分别写入TL0 (TL1)、TH0(TH1)。 注意:方式0时初始值写入时,对于TL不用的高3位应 填入0!
项目二任务6计数器实验 要求:使用T1作为定时器,T0 作为计数器,均按方式1工作, 测试P3.4(T0)引脚上每50ms 来了多少脉冲,将其数值按二 进制数在LED灯上显示出来, 每隔3秒测试一次。
回答是肯定的,方法是使用单片机内部的定时 器。将定时器与中断结合起来,可以实现多个 任务同时运行。 如,前面我们设计了跑马灯,又设计了交图通 灯,那么能否让单片机控制跑马灯及交通灯在 同一块电路板上同时运行?
完全可以,方法时用定时器将时间分片。只要 时间片足够短,事件1、事件2、事件3都可以 看作是同时在进行;单片机好像是同时在处理 3件事。
TH、TL
TH、TL是计数器的高8位和低8位,包括TH1、 TL1(对应定时器T1) TH0、TL0(对应定时器 T0)。
定时器的工作方式
工作方式0
——13位的定时/计数器(THi7-0+TLi4-0) 由TL0的低5位(高3位未用)和TH0的8位组成。 TL0的低5位溢出时向TH0进位,TH0溢出时, 置位TCON中的TF0标志,向CPU发出中断请求。
只要时间片足够短,事件1、事件2、事件3都 可以看作是同时在进行;单片机好像是同时 在处理3件事。
需要哪些装置才可实现上述功能?
定时器,确定时间片的时间; 中断机制,时间一到能转到执行另一件事情, 并记下正处理事件的暂停位置。
思考:古代沙斗计时
需要哪些东 西,如何控 制?
定时 器
事件3 事件2 事件1 事件1 事件2
定时器应用举例
项目二任务4解答 定时器中断控制的跑马灯
R2
180R
D1 D2 D3 D4
LED-GREEN
R3 R4 U1
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
TH0 (8位) 振荡器
TF1
中断
12
振荡器
TR1
12
S T0脚
C/T =0 C/ T =1
TL0 (8位)
TF0
中断
& GATE 1
1 INT 0
S T1脚
C/T =0
TL1 TH1 至串行口
C/ T =1
A TR0
图 8.11 定时器工作方式3示意图
定时器计数初值的确定
定时器只有溢出才会产生中断标志,表示时间 到了,正如沙子斗计时时,只有沙子溢出才表 示时间到了一样。用沙子计时,所要计的时间 是任意时,要预先填入一定的沙子(是容器体 积的补数),同样,计数器也要预装初值,初 值是所要计数值的补数。
while(1){ if(ldelay) { 理
//主程序循环 //发现有时间溢出标记,进入处
ldelay=0; //清除标记 P0=ledp[ledi]; //读出一个值送到P0口 ledi++; //指向下一个 if(ledi==8)ledi=0;//到了最后一个灯就换到 第一个 } } }
第八章
单片机的定时器
知识目标:掌握单片机定时器的结构与特点, 掌握其控制寄存器及工作方式的设定方法。 技能目标:能正确设定定时器的控制寄存器, 能正确计算设定定时器的初值,会编写定时器 控制程序,能解决定时相关问题。 素质目标:不断深化对单片机兴趣,养成能克 服学习困难的习惯。
单片机的定时器
≥1
T0引脚
0 M0 1 M1 C/T GATE M0
D0
0
机器周期
1 INT0引脚
M1 C/T GATE D7
方式3
方式3只适用于定时/计数器T0,定时器T1处于 方式3时相当于TR1=0,停止计数。 工作方式3将T0分成为两个独立的8位计数器 TL0和TH0 。 TH0+TF1+TR1组成的8位定时 器,TL0+TF0+TR0组成的8位定时/计数器, T1组成的无中断功能的定时器。 特点:方式3下T0可有2个具有中断功能的8位 定时器。在定时器T0用作方式3时,T1仍可设 置为方式0~2。这种方式主要用于串口通信。
#define uchar unsigned char //定义一下 方便后面使用 #include <reg51.h> //包括一个 51标准内核的头文件 bit ldelay=0; //长定时溢出标记 uchar t=20; //定时溢出次数 //定时器0中断函数,中断号为1.
事件3 事件2 事件1
定时器怎样实现呢?我们看看古代沙斗计时是 怎样实现的。需要哪些机构? 沙子:计时的基本单位; 接沙子的容器:能确定定时时间(沙子多少及 是否溢出); 开关插销:控制开启定时器及结束定时; 单片机的定时器的结构与此是类似的,只是采 用电子器件实现这些功能。
最左边的选择开关用来选择计数脉冲(相当于 沙子)的来源,打到上面时,选择的是内部一 机器周期计数一次,打到下面时,选择的是外 部脉冲,外部脉冲的输入引脚是T0(P3.4)、 T1(P3.5)。
C /T
:定时/计数模式选择位。 =0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种 工作方式,由M1M0进行设置。
控制寄存器TCON
TCON的低4位用于控制外部中断,已在前面介 绍。TCON的高4位用于控制定时/计数器的启 动和中断申请。
TF1(TCON.7):T1溢出中断请求标志位。T1计数 溢出时由硬件自动置TF1为1。CPU响应中断后TF1由 硬件自动清0。T1工作时,CPU可随时查询TF1的状态。 所以,TF1可用作查询测试的标志。TF1也可以用软 件置1或清0,同硬件置1或清0的效果一样。 TR1(TCON.6):T1运行控制位。TR1置1时,T1开 始工作;TR1置0时,T1停止工作。TR1由软件置1或 清0。所以,用软件可控制定时/计数器的启动与停止。 TF0(TCON.5):T0溢出中断请求标志位,其功能与 TF1类同。 TR0(TCON.4):T0运行控制位,其功能与TR1类同。