课件第8章-定时器
只要时间片足够短,事件1、事件2、事件3都 可以看作是同时在进行;单片机好像是同时 在处理3件事。
需要哪些装置才可实现上述功能?
定时器,确定时间片的时间; 中断机制,时间一到能转到执行另一件事情, 并记下正处理事件的暂停位置。
思考:古代沙斗计时
需要哪些东 西,如何控 制?
定时 器
事件3 事件2 事件1 事件1 事件2
≥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。这种方式主要用于串口通信。
回答是肯定的,方法是使用单片机内部的定时 器。将定时器与中断结合起来,可以实现多个 任务同时运行。 如,前面我们设计了跑马灯,又设计了交图通 灯,那么能否让单片机控制跑马灯及交通灯在 同一块电路板上同时运行?
完全可以,方法时用定时器将时间分片。只要 时间片足够短,事件1、事件2、事件3都可以 看作是同时在进行;单片机好像是同时在处理 3件事。
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; //打开总中断
方式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!
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示意图
定时器计数初值的确定
定时器只有溢出才会产生中断标志,表示时间 到了,正如沙子斗计时时,只有沙子溢出才表 示时间到了一样。用沙子计时,所要计的时间 是任意时,要预先填入一定的沙子(是容器体 积的补数),同样,计数器也要预装初值,初 值是所要计数值的补数。
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 &
项目二任务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.
着的开关控制定时器的启动与停止(相当于开 关插销)。定时器的核心其实是能自动加一的 计数器(其作用类似于装沙子的容器),每来 一个脉冲,它就加一,这样计数器记录的脉冲 个数乘以脉冲的周期即为定时的时间。计数器 计到最大值后会产生溢出(正如沙子装满容器 后会溢出一样),它将置位中断标志TF产生中 断请求。
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类同。
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
while(1){ if(ldelay) { 理
//主程序循环 //发现有时间溢出标记,进入处
ldelay=0; //清除标记 P0=ledp[ledi]; //读出一个值送到P0口 ledi++; //指向下一个 if(ledi==8)ledi=0;//到了最后一个灯就换到 第一个 } } }
定时器的控制寄存器
以上的这些控制都是通过特殊功能寄存器来实 现的。
一、工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器 的工作方式,低四位用于T0,高四位用于T1。其 格式如下:
字节地址:89H,不可以位寻址。 GATE:门控位。GATE=0时,只要用软件使 TCON中的TR0或TR1为1,就可以启动 定时/计数器工作;GATA=1时,要用软件使 TR0或TR1为1,同时外部中断引脚或也为高电 平时,才能启动定时/计数器工作。即此时定 时器的启动条件,加上了或引脚为高电平这一 条件。
定时器应用举例
项目二任务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
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发出中断请求。
第八章
Байду номын сангаас
单片机的定时器
知识目标:掌握单片机定时器的结构与特点, 掌握其控制寄存器及工作方式的设定方法。 技能目标:能正确设定定时器的控制寄存器, 能正确计算设定定时器的初值,会编写定时器 控制程序,能解决定时相关问题。 素质目标:不断深化对单片机兴趣,养成能克 服学习困难的习惯。