mega16多线程任务怎么编写

2019-03-24 20:20发布

楼主是小白。现在遇到一些问题,求大神指点迷津。
小弟想实现两个任务同时运行,各自延时不交叉的目标。例如以k1按键按下的时间为起点。同时运行三个命令,三个命令运行时间可控,三个命令之间的延时也可控,并且这之间相互不干扰。也就是任务的独立运行。是需要用到中断和定时器么。我用的是iccavr编辑器。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
英雄
2019-03-25 10:07
石玉 发表于 2016-5-11 09:41
用定时器定时,时间到了就运行一个命令

void timer0_init(void)
{
   TCCR0=0X0D;
   TCNT0=0X00;
   OCR0=78;
   TIMSK|=0X02;
   TIFR|=0X02;
}
//******************************
//interrupt_init
//Mega16中断初始化,使能总中断
//******************************
void interrupt_init(void)
{
  SREG=0X80;
}
//****************************
void timer1_init(void)
{
   TCCR1A=0X00;
   TCCR1B=0X0D;
   TCNT1=0X00;
   OCR1A=7813;
   TIMSK|=0X10;
   TIFR|=0X10;
}
// 主函数

void main(void)
{
     port_init();
         Lcd_inital();  
         int_count=0;
         timer0_init();
          
         interrupt_init();
         while(1)
         {
     
            
         }
       
}   
#pragma interrupt_handler timer0_interrupt:20
void timer0_interrupt(void)
{

TIFR|=0X02;
TCNT0=0X00;
PORTB&=~(1<<2);

int_count++;

if(int_count==1)
{
LcdWriteString(5,2,tab5);
PORTB&=~(1<<3);

}
if(int_count==2)
{
LcdWriteString(5,2,tab5);
PORTD&=~(1<<0);

}
if(int_count==5)
{

LcdWriteString(5,1,tab5);
PORTB|=(1<<3);
}
if(int_count==6)
{
LcdWriteString(5,2,tab5);
PORTD|=(1<<0);

}
if(int_count>=6)
{
  int_count=0;
}
}
麻烦看下我的程序,为什么B3口和D0口的动作时间不是相差10ms,时间中断不是10ms触发一次么。

一周热门 更多>