4-1 控制LED发光二极管隔1秒闪烁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LP1: CLR TF0 MOV TH0,#3CH MOV TL0,#0B0H DJNZ R1,LOOP MOV R1,#5 CPL P1.1 AJMP LOOP END
任务4-1 控制LED发光二极管隔1秒闪烁
(2)中断方式
ORG 0000H AJMP MAIN ORG 000BH
T0_INT:MOV TH0,#3CH MOV TL0,#0B0H DJNZ R1,RETURN
2)软件分析 ①采用定时/计数器T0,方式1为例进行程序设计。 TMOD=00000001B=01H ②这里我们假定采用Proteus系统默认的晶振频率fosz=12MHz,由此可以计 算得出机器周期T=12/12M=1μs ∵最大定时时间=(2^16-计数初值)*机器周期=(2^16-0)*1μ=65536μs<1s ∴采用多次溢出的方法,即定时器设定定时时间为50000μs=50ms,溢出20 次,间接实现定时1s的功能 ∴初值=最大计数值-定时时间/机器周期=2^16-50m/1μ =65536-50000=15536D=3CB0H ∴TH0=3CH,TL0=B0H 这里给同学们提供一个MCS-51单片机的定时/计数器初值计算工具
AJMP T0_INT MAIN: MOV TMOD,#01H
MOV TH0,Hale Waihona Puke Baidu3CH MOV TL0,#0B0H
MOV R1,#5 CPL P1.1 RETURN:RETI
END
SETB EA SETB ET0 MOV R1,#5 SETB TR0 AJMP $
修改要求:选用T1的方式0,使用查询方式或者中断方式实现任务
(2)C/T:定时/计数器方式选择位。C/T=1,作计数器用,对送到 T0/T1引脚的外部脉冲计数;C/T=0,作定时器用。
(3)M1、M0:工作方式选择位。具体见下表。
任务4-1 控制LED发光二极管隔1秒闪烁
M M 工作方式 10
功能
0 0 方式0 13位定时/计数器
0 1 方式1 16位定时/计数器
第4章 看看单片机的闹钟——定时/计数器
任务4-1 控制LED发光二极管隔1秒闪烁
任务4-1 控制LED发光二极管隔1秒闪烁
1、任务要求: 通过P1.x口线控制外接的LED发光二极管亮1秒、灭1秒,循环不止。 2、相关知识 实现1秒的时间定时可以使用我们之前给大家介绍的CJNE指令来实现多 层嵌套循环延时,但这种实现方法有两大缺陷: (1)占用了CPU资源; (2)定时精度低。 对于精确定时,一般需要采用定时/计数器来实现。 1)16位加法计数器 MCS-51单片机集成有两个定时/计数器,即T0(Timer0)和T1(Timer1); 定时器和计数器的区别: 定时器与计数器从本质上来说是一致的,都是对脉冲计数,不同的是, 定时器是对单片机机器周期计数,而计数器则是对单片机引脚T0(P3.4) 和引脚T1(P3.5)上的输入脉冲计数;
任务4-1 控制LED发光二极管隔1秒闪烁
定时/计数器的工作原理:T0和T1的“计数容器”分别为特殊功能寄存 器TH0、TL0及TH1、TL1。
以T0为例,TH0、TL0分别作T0“计数容器”的高字节与低字节,组成一 个十六位存储器。定时/计数之前,先赋予初值,则当计数溢出时,则 完成定时/计数功能。设定的初值不同,则计数或定时时间就不同。
1 0 方式2 8位自动重装初值定时/计数器
1 1 方式3 T0:分为两个8位定时/计数器
T1:停止工作
4)定时/计数器方式0
此时,T0/T1是13位定时/计数器,“计数容器”由THx的全部8位和TLx 的低5位构成,可用程序将0~8191(2^13-1)中的某一数作为初值送入 THx和TLx(方式0赋初值容易犯错,具体后面讲)。THx、TLx从初值开 始加法计数,直至溢出。所以初值不同,定时时间或计数值不同。
D3
D2
D1 D0
(89H)
GATE C/T M1 M0 GATE C/T
M1 M0
(1)GATE:门控位。门控位的用法有两种:
①当GATE=0时,定时/计数器的工作由TR0/TR1位控制。这是定时/计数 器最常用的控制方式;
________ ________
②当GATE=1时,必须满足TR0/TR1=1,和INT0/ INT1 引脚为高电平这双重 条件,T0/T1才能运行。
(如果采用方式0,必须把初值计算结果展开为二进制数,取低高八位赋给 TH0,低5位赋给TL0)
③④略 思考:(1)这种定时方式不精确,为什么?
任务4-1 控制LED发光二极管隔1秒闪烁
3)软件程序 用两种编程方式,即查询方式和中断方式 (1)查询方式
ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV R1,#5 SETB TR0 LOOP:JB TF0,LP1 AJMP LOOP
作计数器用:计数次数=2^13-计数初值
作定时器用:定时时间=(2^13-计数初值)*机器周期
其中:机器周期=12/fosc(fosc是晶振频率)
注意:定时/计数器溢出后,必须手动重设初值,否则下次将从0开始计 数。
任务4-1 控制LED发光二极管隔1秒闪烁
5)定时/计数器方式1 此时,T0/T1是16位计数器,“计数容器”采用THx、TLx构成。因此计 数范围比方式0大,可用程序将0~65536(2^16-1)中的某一数作为初值 送入THx和TLx。THx、TLx从初值开始加法计数,直至溢出。所以初值不 同,定时时间或计数值不同。 作计数器用:计数次数=2^16-计数初值 作定时器用:定时时间=(2^16-计数初值)*机器周期 关于方式2和方式3我们放到下次课再给大家继续介绍 6)定时/计数器初始化(*补充、重要) 初始化操作是使用可编程定时/计数器的关键,使用前可参照以下步骤 分析,然后编程实现: ①根据实际需要选择合适的工作方式和定时/计数方式,对TMOD寄存器 赋值;
任务4-1 控制LED发光二极管隔1秒闪烁
②利用下面的表达式计算初值,写入TH0、TL0或TH1、TL1。 作计数器时:初值=最大计数值-计数次数 作定时器时:初值=最大计数值-定时时间/机器周期 【机器周期=12/fosc(fosc是晶振频率)】 最大计数值由选择的工作方式决定,可选2^13(方式0)、2^16(方式 1)、2^8(方式2和T0 的方式3) ③若定时/计数器工作在中断方式下,则通过对IE寄存器赋值开放相应 中断; ④将TR0或TR1置1启动定时/计数器。若将GATE位设为1,用于检测送到
结束!
2)定时/计数器控制寄存器TCON(Timer Control) TCON我们在上一章曾给各位介绍过,它的低四位与外部中断有关,因此 不再赘述;高四位与定时/计数器T0和T1有关。 (1)TR0(Timer Run 0)、TR1(Timer Run 1):分别为T0、T1的运行 控制位。以TR0为例,TR0=1时T1工作,TR0=0时T0停止。 (2)TF0(Timer Flag 0)、TF1(Timer Flag 1):分别为T0、T1的溢出 标志位。以TF0为例,T0定时/计数溢出时由硬件自动将TF0置1,并向 CPU申请中断。如果T0中断开放,CPU响应中断进入中断服务程序后,硬 件将TF0自动清0;如果屏蔽了T0中断,可软件查询TF0位等待定时/计数 溢出,并进行相应处理,此时TF0必须手动清0。由此,定时/计数器使 用有两种编程方式:中断方式、查询方式。
任务4-1 控制LED发光二极管隔1秒闪烁
2)定时/计数器方式控制寄存器TMOD(Timer Mode) 定时/计数器T0、T1各有四种工作方式,可通过对TMOD的设置来选择。 TMOD的低4位用于设定T0,高4位用于设定T1。 注意:TMOD不能位寻址,复位时TMOD=00H
TMOD
D7 D6 D5 D4
________ ________
INT0/ INT1 引脚的正脉冲宽度,只有正脉冲送达中断引脚时才开始运行 (不常用)。
任务4-1 控制LED发光二极管隔1秒闪烁
3、任务分析 1)硬件电路 不妨使用P1.1引脚作为LED发光二极管的驱动引脚,采用低电平驱动的方 式。
任务4-1 控制LED发光二极管隔1秒闪烁