4-1 控制led发光二极管隔1秒闪烁.pptVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-1 控制led发光二极管隔1秒闪烁

第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“计数容器”的高字节与低字节,组成一个十六位存储器。定时/计数之前,先赋予初值,则当计数溢出时,则完成定时/计数功能。设定的初值不同,则计数或定时时间就不同。 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 任务4-1 控制LED发光二极管隔1秒闪烁 任务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,用于检测送到 引脚的正脉冲宽度,只有正脉冲送达中断引脚时才开始运行(不常用)。 任务4-1 控制LED发光二极管隔1秒闪烁 3、任务分析 1)硬件电路 不妨使用P1.1引脚作为LED发光二极管的驱动引脚,采用低电平驱动的方式。 任务4-1 控制LED发光二极管隔1秒闪烁 2)软件分析 ①采用定时/计数器T0,方式1为例进行程序设计。 TMOD=01H ②这里我们假定采用Proteus系统默认的晶振频率fosz=12MHz,由此可以计算得出机器周期T=12/12M=1μs ∵最大定时时间=(2^16-计数初值)*机器周期=(2^16-0)*1μ=65536μs1s ∴采用多次溢出的方法,即定时器设定定时时间为5000

文档评论(0)

badjka + 关注
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档