我们在做蓝桥杯单片机比赛试题的时候,经常会遇到超声波和串口共用的情况,此时就需要占用两个定时器资源,如果这个时候我们又需要定时器定时的话,就需要用到第三个定时计数器了,很多初学者不知道定时器有三个或者没意识到使用第三个定时器,这样在设计的时候会遇到很多问题,而当我们掌握了第三个定时器的使用的时候,就拥有了更多的定时器资源。
以下是我们定时器2的打开方式:
Void Time2Init() { EA = 1; IE2 = (1 << 2); AUXR &= 0XFB; //定时器时钟12T模式 T2L = 0X30; //2ms T2H = 0XF8; AUXR |= 0X10; // 定时器2开始计时 }
对于使用的头文件是<reg52.h>的同学,这个头文件里并没有定义IE2、AUXR、T2L、T2H的寄存器地址,所以我们需要在调用头文件后定义他们的地址,当然这个地址不是自己定义的,而是官方给定的,地址定义如下:
sfr AUXE = 0X8E;
sfr IE2 = 0XAF;
sfr T2H = 0XD6;
sfr T2L = 0XD7;
同样的,中断服务程序的数字,是12,即
void Timer2() Interrupt 12 { }
定时器2的中断服务函数里不需要我们放初值,每次运行的时候他会自己放进去,以上就是我们蓝桥杯单片机定时器2的初始化,在我们实际运用中,建议大家将定时器0用作串口通信,定时器1用作超声波检测,定时器2作定时器,合理运用才可以发挥他们最大的价值。