大家帮我看看mega16的程序哪出问题了呗
//PWMvoid timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x01; //set count
OCR0= 85;//set compare
TCCR0 = 0x71; //start timer
cou=A/OCR0;
}
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
counter++;//compare occured TCNT0=OCR0
}
和
if(counter>=cou)
{
PORTA^=0b00000001;//取反PA0
counter=0;
}
为什么实际运行时PA0高低电平时间不一样? 按我的理解,这个中断优先级比较低,如果前面还有别的中断的话,是会影响到定时的准确性的。 if(counter>=cou)这一段代码位置在哪?
lcw_swust 发表于 2013-3-2 12:06 static/image/common/back.gif
if(counter>=cou)这一段代码位置在哪?
void main(void)
{
port_init();
init_devices();
while(1)
{
key_scan();
if(counter>=cou)
{
PORTA^=0b00000001;
counter=0;
}
if(counter>=cou)
{
PORTA^=0b00000010;
counter=0;
}
if(counter>=cou)
{
PORTA^=0b00000100;
counter=0;
}
if(counter>=cou)
{
PORTA^=0b00001000;
counter=0;
}
}
} 星星亮了夜空 发表于 2013-3-2 12:24 static/image/common/back.gif
void main(void)
{
port_init();
那就把它们放到counter++;后面看看 同意楼上的 lcw_swust 发表于 2013-3-2 12:49 static/image/common/back.gif
那就把它们放到counter++;后面看看
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
counter++;
if(counter>=cou)
{
PORTA^=0b00000001;
counter=0;
}//compare occured TCNT0=OCR0
}
void main(void)
{
port_init();
init_devices();
key_scan();
//insert your functional code here...
}
是这样么?试了还是不行 mingqiang 发表于 2013-3-2 14:01 static/image/common/back.gif
同意楼上的
看看7楼呗,谢谢 星星亮了夜空 发表于 2013-3-2 19:19 static/image/common/back.gif
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
是吗,while(1)去哪了呢?
lcw_swust 发表于 2013-3-2 20:59 static/image/common/back.gif
是吗,while(1)去哪了呢?
while(1)只括key_scan? 星星亮了夜空 发表于 2013-3-2 21:32 static/image/common/back.gif
while(1)只括key_scan?
对 lcw_swust 发表于 2013-3-2 21:46 static/image/common/back.gif
对
还是不行
页:
[1]