找回密码
 立即注册
查看: 117|回复: 2

第七课 :AI8051U定时器

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-06 13:19:04
已绑定手机

7

主题

13

回帖

65

积分

注册会员

积分
65
发表于 2025-3-4 17:37:39 | 显示全部楼层 |阅读模式
第七课 :AI8051U定时器
哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前!

   关于定时器,单片机中最重要,也是最基础的一个单元,
   1.定时器的介绍
   2.定时器的应用
   3.函数的定义、声明、调用

1定时器的介绍
问题:LED三秒闪烁一下,这三秒按下按键但是没有反应了?这怎么办呢?
答:因为MCU单核的,同一时间只能执行一个事情,没有特殊情况不能被打断。所以这里就要引入一个特殊的情况,定时器中断。
定时器作用:
    (1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
    (2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)
定时器的配置,可以使用ISP软件中的定时器计算器,可以很方便的得到定时器参数的配置代码;在这里需要注意系统时钟要确定下来.时钟确定下来以后,就可以根据时钟来计算参数.
   
图7-1
有的同学要问了,定时器中断是怎么执行的呢??
通过学习,我们就会知道了.
首先,通过ISP软件配置好定时器的参数,然后把ISP软件生成的定时器初始化代码,加入到我们的代码工程中.然后添加定时器中断的函数…..,简单吧,其实也不复杂!
图7-2-3 定时器的初始化函数,在主函数中进行调用

图7-4 定时器中断函数放在末尾

这里补充了一个关于keil0xfd的问题解决方法.其实就是KEIL软件对某些汉字不支持产生乱码,对于这些汉字使用时可以在汉字后面加上”\0xfd”
printf("数学");  //Keil 编译后打印会显示乱码
printf("数\xfd 学");  //显示正常
GB2312 中,包含 0xfd 编码的汉字如下:
褒饼昌除待谍洱俘庚过糊积箭烬君魁
例笼慢谬凝琵讫驱三升数她听妄锡淆
旋妖引育札正铸 佚冽邶埤荦蔟摭啐
帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞
瘕颀螨簖酏觚鳊鼾
还有一种另类的方法,绕过这个问题,但不推荐,可能会产生莫名奇妙的问题,想尝试的同学可以试一下哦:
使用HexEditor编辑Keil安装目录下的/keil/c51/bin/c51.exe文件,搜索80FBFD改成80FBFF,如果使用汇编则修改A51.exe.
C251.EXE,A251.EXE没有试过,有改过的同学反馈一下哦.
2定时器的应用 :
分频:
图7-5 TM0PS

图7-6 AUXR的1T 12T模式也属于分频的范畴

图7-7 C/T 设置定时器为定时或计数模式

图7-8 定时器的软件或外部引脚控制模式

图7-9 TH计数寄存器(可以这么叫么)

图7-10定时器定时时间计算公式

所以说: 16位自动重载定时器的本质就是从设定值数到65536(溢出)之后置位一次标志位,如果使能ET0就可以进入中断!
定时器看起来挺复杂的哦,学过了,会用了,才知它的好处.

3.函数的定义、声明、调用
图7-11 函数的定义 声明 调用的格式 规则
来一个例子:
图7-12

图7-13 任务

思考:定时器一次只能定时一次,如果我有很多个定时任务怎么办?
   我的理解是,定时器做规定时间的定时,当定时中断时,在定时中断函数内进行多任务的判断,如果某一个任务到达了规定的时间,则输出结果.
课后小练:
图7-14

通过以上的学习,复习了定时器的参数配置,定时时间的计算原理,以及多任务下,定时器中断的使用。

回复

使用道具 举报 送花

3

主题

1159

回帖

1029

积分

等待验证会员

积分
1029
发表于 2025-3-4 17:38:00 | 显示全部楼层
在AI8051U单片机中,定时器是实现精确时间控制的核心模块。针对LED三秒闪烁时按键无响应的问题,根本原因在于MCU单核架构下,主程序在执行延时操作时无法响应外部中断。解决方案是采用定时器中断机制,通过配置定时器中断服务程序,在定时器溢出时执行LED状态切换,同时释放CPU资源以响应按键操作。具体实现步骤如下:1. 初始化定时器,设置定时周期为3秒;2. 使能定时器中断;3. 在中断服务程序中进行LED状态切换;4. 在主循环中检测按键状态。这种方法不仅解决了按键响应问题,还避免了使用阻塞式Delay函数,提高了系统实时性,是嵌入式系统设计的标准实践。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1159

回帖

1029

积分

等待验证会员

积分
1029
发表于 2025-3-4 18:03:00 | 显示全部楼层
在AI8051U单片机中,定时器是实现精确时间控制的核心模块。针对LED三秒闪烁期间按键无响应的问题,这是由于MCU单核架构在同一时间只能执行单一任务,无法同时处理多个事件。为解决这一问题,可引入定时器中断机制。

定时器中断允许在特定时间间隔内暂停主程序,转而执行中断服务程序(ISR),从而实现多任务处理。具体步骤如下:
1. 配置定时器:设置定时器的工作模式、计数值和中断使能。
2. 编写中断服务程序:在ISR中处理按键检测逻辑,确保即使主程序在延时期间,按键事件也能被及时响应。
3. 启动定时器:启用定时器并开始计时。

通过定时器中断,不仅可以实现LED的精确闪烁,还能在延时期间响应外部事件,显著提升系统的实时性和效率。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:07 , Processed in 0.125474 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表