任务五 定时控制流水灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C2
18 22pF 9 RST XTAL2
C3
10uF
29 30 31
PSEN ALE EA
D1
D2
D3
D4
D5
D6
D7
D8
LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW
p10 p11 p12 p13 p14 p15 p16 p17
• 4、 定时/计数器控制寄存器TCON
TCON是“timer control”的缩写,即“定时/计数器控制” 的意思。它在特殊功能寄存器区的88H上。 TCON的功能有:显示Timer溢出与否、启动/关闭 Timer、外部中断方式控制、外部中断标志位。 TCON的8位中与Timer有直接关系的只有高4位。
Timer 1 寄存器低位
Timer 1 寄存器高位
• 2、 定时/计数器模式控制寄存器TMOD
TMOD是“timer mode”的缩写,意思是“定时/计数 器模 式”,它在特殊功能寄存器区的89H上 。 TMOD寄存器由高4位和低4位组成,分别控制Timer1 和Timer 0。 在高4位或低4位中,M1和M0设置Timer 1或Timer 0 的工作模式 。
定时器0 (8AH) TL0 0 7 0
定时/计数器控制寄存器 Timer 0 寄存器低位
7 0 启 动 启 动 7
Timer 0 寄存器高位
0 7
90H 88H 80H
溢 出 CPU
内部总线 溢出 工作方式 TMOD (8 9H)
工 作 方 式
97H 8FH 87H
中断
TCON (8 8 H)
定时/计数器模式控制寄存器
单片机的定时/计数功能模块使用同一个电路──计数电路。 只是定时/计数功能模块“计算个数”的对象不一样——一 个是时间单位的个数,另一个是外部事件的个数。 1个定时/计数器模块一次只能工作在一种功能下——要么 是定时器,要么是计数器。当计数完成后,模块向CPU输出 一个计数完成信号来中断计数操作。
单片机 时间单 位脉冲 计数电路 外部事件 Timer 定时/计数器模块
THx TLx
M
N3
N2
N1
N0
源自文库P3
P2
P1
0
0
0
P0
Q3
Q2
Q1
Q0
方式0下在C中编程时,定时初值我们可在程序中写下如下公式, 让单片机自己计算并装入。 THx=(213-N/T)/25=(8192-N/T)/32 TLx=(213-N/T)%25=(8192-N/T)%32
其中MM是THx中的数值,LL是TLx中的数值(均为十 六进制数)。
或:t(定时时间)=(216-初始值)×T(机器周期) =(65536-初始值)×T
• 4、 如何选取Timer的计数初始值
例:设计一个方波信号发生器,要求从P1.0口输出频率 。所以 f=2kHz的方波,周期 P1.0口输出高、低电平持续时间分别为250μs。
C1
22pF
X1 R1
1k 12MHz
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
⑤ 关闭Timer。 ⑥ 清溢出标志TFx。 ⑦ 重新装载。
Timer 寄存器 (THx TLx)
EC78 TF0 = 0
EC79 TF0 = 0
EC7A TF0 = 0
FFFF TF0 = 0
0000 TF0 = 1
• 3、 Timer的计数时间与计数初始值
Timer寄存器的低位字节TLx和高位字节THx中装 载的是Timer的计数初始值,当Timer启动后,从这个 初始值开始每过1个机器周期计数值增加1,直到计数 到16位的Timer寄存器的最大值——FFFFH后溢出为 止。
• 5、 如何利用Timer进行长时间定时
Timer的设计时间t取决于两个因素:晶振频率,THx 和TLx中装载的计数初始值 。 硬件一旦完成,意味着晶振频率确定,Timer的设计 时间就取决于THx和TLx中装载的计数初始值。 当MMLL=0000H时,设计时间t具有最大值,如果晶 振频率为12MHz,设计时间的最大值=65536,即 65.536ms。这个设计时间连0.1秒都不到,无法满足 需要长时间定时的场合。
• 5、 Timer的时钟源
TMOD寄存器中的C/T#位=0,即Timer用作定时器, 单片机的时钟信号就成了Timer的时钟源,时钟信号 由晶振决定:
如晶振为12MHz,则单位时间T (即机器周期)为:
定时器/计数器工作方式 方式1
• 1、 方式1下的Timer特点
Timer工作在方式1时是一个16位定时/计数器,计数 初始值的低位和高位分别装载到Timer寄存器TLx和 THx中。 Timer通过将TRx置1启动。 当TFx=1,表明计数完成,通过将TRx清0来关闭Timer。 想要重复Timer的计数过程,Timer寄存器中必须重新 装载原来的计数初始值,并将TFx位清0。
计数完成信号
• 2、 时间单位脉冲
单片机中的时间单位脉冲的周期是:1个机器周期, 即12个振荡周期。 如果晶振的频率是12MHz,则1个机器周期=1µ s,每 1秒钟Timer所记录的时间单位脉冲的个数是:
1s = 10 6个 1μs
如果Timer从0数到50000需要的时间可以这样计算:
50000个单位时间脉冲 = 0.05s 6 10 个/s
任务五 ——定时控制
1 定时控制流水灯任务单描述 2 相关知识:定时器/计数器
3 定时器应用程序设计点拨
在单片机最小系统的基础上,添加8个发光二 极管VD0~VD7,与P1端口的P1.0~P1.7分别相连。 要求实现: 1.利用定时器/计数器T1查询方式(工作方式0) 控制流水灯,每个灯亮、灭时间均为1s。 2.利用定时器/计数器T1中断方式(工作方式1) 控制流水灯,每个灯亮、灭时间均为1s。
• Timer工作在方式0下产生一个500µ s的延时,使用的晶 振频率为12MHz。则计数初始值可以这样计算: ① 500µ s /1µ s = 500;② 8192 – 500 = 7692; ③ 7692= 11110000 01100B;④ THx = 1111 0000B, TLx =0000 1100B。转换成十六进制数:THx = 0F0H, TLx= 0CH。所以Timer寄存器计数初始值为F00CH。
• 3、 定时/计数器模式控制寄存器TMOD
GATE 门控位。 C/T# Timer定时/计数器选择位。 M1 Timer方式选择位1。M0 Timer 方式选择位0。设置方法为:
M1 M0 方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3 工作模式 13位定时/计数器(THx 8位,TLx 5位) 16位定时/计数器 8位自动重载入定时/计数器(TLx),溢出时从THx 重载 Timer 0有此模式,Timer 1没有
定时/计数器的控制者
• Timer的启动、设置和关闭与特殊功能寄存 器中的TCON、TMOD、TL0、TH0等寄存器 有关。 • AT89S51单片机中有两个Timer,分别为 Timer 0和Timer 1。有些单片机具有3个Timer, 如AT89S52等。 • 两个Timer可以工作在定时器模式下,也可 以工作在计数器模式下。
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
R2
300
R3
300
R4
300
R5
300
R6
300
R7
300
R8
300
R9
300
p10
p11
p12
p13
p14
p15
p16
p17
相关知识:单片机的定时/计数器
• 1、 定时/计数器的实质
• 2、 方式1的设置步骤
① 设置Timer的工作方式。程序中向定时/计数器模式控 制寄存器TMOD中装载01H。
0 GATE 0 C/T# 0 M1 0 M0 0 GATE 0 C/T# 0 M1 1 M0
Timer 1
Timer 0
② 往TLx和THx中载入计数初始值。 ③ 启动Timer。将TRx置1以启动Timer。 ④ 监测Timer溢出标志TFx。
3
单片机
T=500
μs
P1.0
T/2=250
μs
T/2=250
μs
μs
例:250即Timer计数时间,称之为设计时间。计数初始值 步骤为: ① 将设计时间(以μs为单位,且小于65536)除以 。 即用设计时间除以机器周期。 ② 用65536减去步骤①得到的数。 ③ 将步骤②中的得数转换成十六进制形式MMLL。如果转 换结果<100H,则MM=00。 ④ 最后得计数初始值:THx=MM,TLx=LL。 根据这个步骤,假设晶振频率为12MHz,设计时间 250:① 250µs /1µ s = 250;② 65536 – 250 = 65286; ③ 65286 = FF06H;④ THx = FF,TLx = 06。所以 Timer寄存器的计数初始值为 FF06H。
解决办法是多次重新装载计数初始值,累计计数多次 的定时值。
• 5、如何利用Timer进行长时间定时(C语言程序)
#include <reg51.h> Void main() { unsigned char i; TMOD=0x10; for (i=0; i<50; i++) { TH1=0xb1; TL1=0xe0; TR1=1; while (!TF1) ; TR1=0; TF1=0; } ……. }
方式0
• 方式0与方式1基本相同,不同的是方式1下Timer寄 存器是16位的,而方式0下Timer寄存器是13位的。 在载入计数初始值时,向THx载入高8位,向TLx的 低5位上载入5位。 • 方式0的计数初值的计算方法如下: ① 将设计时间(以μs为单位,且小于8192)除以 ② 用8192减去步骤①得到的数。 ③ 将步骤②中的得数转换成13位二进制数,高位如果 是空的用0补上,依次填入THx的8位和TLx的低5位 中,TLx的高3位用0代替。 ④ 最后得计数初始值。
#include <reg51.h> Void main() { unsigned char i; TMOD=0x10; //设置Timer 1工作在方式1下定时模式 for (i=0; i<50; i++) //重复定时计数器,定时50次 { TH1=(65536-20000)/256; //往TH1中载入计数初值高8位 TL1=(65536-20000)%256; //往TL1中载入计数初值低8位定时20ms TR1=1; //启动Timer 1 while (!TF1) ; //检测Timer1溢出标志,当TF1=1,跳出 TR1=0; //关闭Timer 1 TF1=0; //将TF1清0 } }
• 1、 Timer寄存器
Timer 0和Timer 1各有1个长度为2个字节的Timer寄存 器,每个Timer寄存器由低位字节TL0或TL1和高位字节 TH0或TH1两个特殊功能寄存器组成。
INT1 INT0 (P3 .3) (P3 .2) T1 (P3 .5) T0 (P3 .4)
定时器1 (8DH) TH1 (8B H) TL1 (8C H) TH0
//设置Timer 1工作在方式1下定时模式 //重复定时计数器,定时50次 //往TL1和TH1中载入计数的初始值B1E0H //定时20ms //启动Timer 1 //检测Timer1溢出标志,当TF1=1,跳出 //关闭Timer 1 //将TF1清0
总延时 1s
//这里是所要处理的程序
事实上,在C中编程时,定时初值我们可在程序中写下如下公式,让单片机自己计算 并装入。 THx=(216-N/T)/28=(65536-N/T)/256 TLx=(216-N/T)%28=(65536-N/T)%256
相关文档
最新文档