可以利用定时器产生中断的时间产生时间片效果,在进入中断的次数不同产生不同的紧急事件,设置进入中断的时间我们可以通过ARR(重载载值)和PSC(分频值)设置,假如我们设置这个进入中断时间为1ms。因为不同的时间片切换的很快,所以让人产生一种单片机在同时在进行多任务的错觉。
/*********************************************
函数功能:tim6中断服务函数
形参:void
返回值:void
函数说明:
用TIM6中断实现不同的紧急事件
**********************************************/
u16 time[5]={0};
void TIM6_DAC_IRQHandler(void)
{
//清除标志位
TIM6->SR &=~ (1 << 0);
//紧急事件
time[0]++;
time[1]++;
time[2]++;
//时间片其实就是利用每次定时器产生中断的时间,用ARR和psc设置每次进入中断的时间为1ms
//然后利用buf的递增,比如判断buf[0]=10的时候,相当于过了10ms在时间片进行一次紧急事件
//然后buf[0]再清零,进行下一次,然后不同的buf[x]之间不互相影响,就能产生一种几乎同时进行多任务的错觉
//时间片1
if(time[0] == 10)
{
time[0] = 0;
led1_TAG;
}
//时间片2
if(time[1] == 100)
{
time[1] = 0;
Echo_Start();//超声波模块工作
}
//时间片3
if(time[2] == 300)
{
time[2] = 0;
ADC1->CR2 |= 1 << 30;//开启ADC1转换
}
}