我的代码有问题。
虽然它说语法void
之前有错误。
帮我找到原因。
(该行错误: SIGNAL(SIG_OVERFLOW0))
#include <avr/io.h>
#include <avr/interrupt.h>
#define outp(x,y) ((y)=(x))
#define inp(x) (x)
#define TCCR0 TCCR0B
volatile unsigned int flag,sec,count,flag2;
unsigned int m=0,i=0;
unsigned char number[10]={0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x77,0x4c,0x7f,0x6f}
SIGNAL(SIG_OVERFLOW0)
{
if(flag>790)
{
if(sec>49)
{
if(count==49)
count=0;
else count++;
sec=0;
}
else
sec++;
flag=0;
}
else
flag++;
if(flag2>6)
flag2=0;
else
flag2++;
outp(0,TCNT0);
}
int main(void)
{ outp(0x80,SREG);
outp(0xff,DDRD);
outp(0xff,DDRB);
outp((1<<TOIE0),TIMSK);
outp(0x00,TCNT0);
outp(0x01,TCCR0);
sei();
for(;;)
{
if(count>89)
{m=9;
i=count-90;}
else if(count>79)
{m=8;
i=count-80;}
else if(count>69)
{m=7;
i=count-70;}
else if(count>59)
{m=6;
i=count-60;}
else if(count>49)
{m=5;
i=count-50;}
else if(count>39)
{m=4;
i=count-40;}
else if(count>29)
{m=3;
i=count-30;}
else if(count>19)
{m=2;
i=count-20;}
else if(count>9)
{m=1;
i=count-10;}
else
{m=0;
i=count;}
}
}
答案 0 :(得分:0)
你的第一个问题是你在这一行末尾缺少一个分号:
unsigned char number[10]={0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x77,0x4c,0x7f,0x6f}
如果不知道你的目标设备,很难说是否有任何其他错误,但我愿意打赌你还需要改变其他几条线路。
您应该使用ISR而不是SIGNAL:
ISR(TIMER0_OVF_vect)
{
...
}
如何启用定时器中断看起来很可疑。如果你需要改变它,我不会感到惊讶:
outp((1<<TOIE0),TIMSK0);