第七课 :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
通过以上的学习,复习了定时器的参数配置,定时时间的计算原理,以及多任务下,定时器中断的使用。
|