1.定时器&蜂鸣器
一般定时器中断函数里的内容最好是能够快速地去执行完,比如只执行几条简单的语句,这样与主函数配合才会使程序更加高效。前期教学里,我们只使用定时器中断负责某个IO引脚间隔跳变或者使一个变量间隔自加1的简单语句。
比如我们现在要实现间隔50ms左右的时间让流水灯左右循环移动的同时,还需要无源蜂鸣器一直响,这样的功能,思路该怎么去思考?
首先我们知道无源蜂鸣器要想鸣叫的比较尖锐,那P1.6需要一个合适的脉冲信号,这个信号笔者打算使P1.6高低电平保持的时间为300微秒不断循环。
所以我们用定时器中断实现P1.6的电平间隔跳变,主函数里负责完成流水灯的任务即可。
2.代码#include
#include //详见第六章第8讲
u8 T0RH, T0RL;
void TIM0_Init(u32 us,int trim)//trim:微调
{
u32 tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = ( tmp * (us/100) )/10000;//计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp+trim; //补