张庆龙 发表于 2025-3-4 17:37:39

第七课 :AI8051U定时器

第七课 :AI8051U定时器哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前!
   关于定时器,单片机中最重要,也是最基础的一个单元,   1.定时器的介绍   2.定时器的应用   3.函数的定义、声明、调用
1定时器的介绍问题:LED三秒闪烁一下,这三秒按下按键但是没有反应了?这怎么办呢?答:因为MCU单核的,同一时间只能执行一个事情,没有特殊情况不能被打断。所以这里就要引入一个特殊的情况,定时器中断。定时器作用:    (1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作    (2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)定时器的配置,可以使用ISP软件中的定时器计算器,可以很方便的得到定时器参数的配置代码;在这里需要注意系统时钟要确定下来.时钟确定下来以后,就可以根据时钟来计算参数.https://www.stcaimcu.com/data/attachment/forum/202412/19/153043awzgi2eniz0ss7q0.png   图7-1有的同学要问了,定时器中断是怎么执行的呢??通过学习,我们就会知道了.首先,通过ISP软件配置好定时器的参数,然后把ISP软件生成的定时器初始化代码,加入到我们的代码工程中.然后添加定时器中断的函数…..,简单吧,其实也不复杂!图7-2-3 定时器的初始化函数,在主函数中进行调用https://www.stcaimcu.com/data/attachment/forum/202412/19/153043wj0vv09pp9p5oc7c.png https://www.stcaimcu.com/data/attachment/forum/202412/19/153043ng3jyt8qygtawjqq.png
图7-4 定时器中断函数放在末尾https://www.stcaimcu.com/data/attachment/forum/202412/19/153044jjrwoqzvrns7pjso.png
这里补充了一个关于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 TM0PShttps://www.stcaimcu.com/data/attachment/forum/202412/19/153044fkfxcbpcxxbo0xd0.png
图7-6 AUXR的1T 12T模式也属于分频的范畴https://www.stcaimcu.com/data/attachment/forum/202412/19/153045bd3j4wztdy3ubcum.png
图7-7 C/T 设置定时器为定时或计数模式https://www.stcaimcu.com/data/attachment/forum/202412/19/153045hbqsxs5fqfpgxu5p.png
图7-8 定时器的软件或外部引脚控制模式https://www.stcaimcu.com/data/attachment/forum/202412/19/153046jvpj7hgr4rzpv3ng.png
图7-9 TH计数寄存器(可以这么叫么)https://www.stcaimcu.com/data/attachment/forum/202412/19/153048arayyzg0agbb34kg.png
图7-10定时器定时时间计算公式https://www.stcaimcu.com/data/attachment/forum/202412/19/153046iwd86wh11wnqzhvs.png
所以说: 16位自动重载定时器的本质就是从设定值数到65536(溢出)之后置位一次标志位,如果使能ET0就可以进入中断!定时器看起来挺复杂的哦,学过了,会用了,才知它的好处.
3.函数的定义、声明、调用图7-11 函数的定义 声明 调用的格式 规则https://www.stcaimcu.com/data/attachment/forum/202412/19/153046umkoko9a5d22dek2.png来一个例子:图7-12https://www.stcaimcu.com/data/attachment/forum/202412/19/153047bazrchb6w33pnuio.png
图7-13 任务https://www.stcaimcu.com/data/attachment/forum/202412/19/153047hhhivm1ybxynigvv.png
思考:定时器一次只能定时一次,如果我有很多个定时任务怎么办?   我的理解是,定时器做规定时间的定时,当定时中断时,在定时中断函数内进行多任务的判断,如果某一个任务到达了规定的时间,则输出结果.课后小练:图7-14https://www.stcaimcu.com/data/attachment/forum/202412/19/153047i1s0z6oojb1068qo.png
通过以上的学习,复习了定时器的参数配置,定时时间的计算原理,以及多任务下,定时器中断的使用。

国芯人工智能 发表于 2025-3-4 17:38:00

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

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-4 18:03:00

在AI8051U单片机中,定时器是实现精确时间控制的核心模块。针对LED三秒闪烁期间按键无响应的问题,这是由于MCU单核架构在同一时间只能执行单一任务,无法同时处理多个事件。为解决这一问题,可引入定时器中断机制。

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]
页: [1]
查看完整版本: 第七课 :AI8051U定时器