找回密码
 立即注册
楼主: 张庆龙

学习AI8051U

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

7

主题

13

回帖

65

积分

注册会员

积分
65
发表于 2025-3-5 12:34:48 | 显示全部楼层
第七课 :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

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

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 23:08 , Processed in 0.170389 second(s), 42 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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