本节课程的内容如下:
1、定时器的介绍
实例问题led三秒闪烁不起作用,没有使用中断功能,一个mcu是单核。
作用如下:用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作。
替代长时间的延时函数,提高程序运行效率和处理速率,从而打断主循环来进行其他事项处理。
2、定时器的应用
还是引用上述的任务:LED灯三秒取反一次,期间任意时刻按下按钮,串口打印按键次数。
24位定时器,
使用ISP定时器来生成定时器,24M频,初始化设置TMOPS/AUXR/TMOD/TL0/TH0/TF0/TR0/ET0
调用定时器
定时器中断,在函数名后增加 interrupt关键字来表示此处为中断函数处理
void Timer0_ISR(void) interrupt 1
编译并下载,演示。
AI8051U中关于keil的0xfd问题说明。
初始化设置意义:TM0PS/TM1PS定时器0/1的8位预分频寄存器、
AUXR辅助寄存器1:0-对应12T模式,CPU12分频,1-对应1T模式,CPU不分频
TMOD:定时器0/1模式寄存器,T1_M1和T1_M0设置不一样;定时器0模式0,16位自动重装模式
定时频率 = 系统频率 / ((TM0PS + 1)* (65536 - 【TH0, TL0】) * T)
定时时间 = ((TM0PS + 1)* (65536 - 【TH0, TL0】) * T)/ 系统频率
T=1或12,超过65536后溢出重置标志位
3、函数的定义、声明、调用
一般的函数包括: 返回值类型、函数名、入口参数、函数体、return 返回值,返回值可以不需要这时应为void
4、多任务的定时中断如何实现?
5、课后小练:电子功德箱。
本节课要掌握中断函数的使用,中断用于传感器输入的控制非常重要。 到货,以咨纪念。
《8051U深度入门到32位51大型实战教学视频》第8集:定时器周期性调度任务
本节课程的内容如下:
1、上一趟课程的BUG调整和优化
例如: 大小写、中英文符号、如何查抄问题所在位置、串口更多设置
2、周期性任务介绍
任务1:用1个定时器实现这个任务,led1实现03秒取反一次,led2实现0.6秒取反一次,led3每0.9秒取反一次。
思路:通过一个变量计数,假设这个变量1ms自加一次,加到300即为300ms,加到600即为600ms, 计数达到后重新清0.
中断函数中应调整为1ms的延时函数,定义变量来接受计数300/600/900以判别是否达到led1/led2/led3的反转条件。
多个相同类型的变量可以用一个数组来替代。
任务2:数组点亮led,实现流水灯。0-点亮,1-熄灭。数组长度需要把握好。流水灯移动时间。
多行注释。数组中定义0,1时要注意
任务3:按键按一下,LED通过数组移动一下。这里要考虑抖动。
3、创建c和h文件
三步骤:创建文件并保存,添加到工程,添加引用路径。1个C配置一个H。
4、结构体的介绍
5、结构体数组的周期性任务调度。
led1 0.3秒闪一次,led2 0.6秒闪一次, led3 0.9秒闪一次,
任务要求有如下特点:1、有定时器1ms的计数目标,2都有一个设定的目标值。3、都需要有执行的功能。4、定时时间到了才能执行。
typedef struct{}
本节课要掌握结构体数组再周期性重复性任务重的使用,以减少代码的重复编写和一次写完可反复使用,结构体也经常用于数据代码编写。
页:
1
[2]