中断没有问题,有问题的是把中断初始化和下面几句放在while(1)中了:
1)--DDRF = 0x01; ---设置端口PF0为输入,其他为输出
2)--PORTF = 0x01;---设置端口PF0为高电平,其他为低电平(包括PF1)
3)--DDRF = 0x02;---设置端口PF1为输入,其他为输出
4)--PORTF = 0x02;---设置端口PF1为高电平,其他为低电平
这样导致程序不断的将PF1设为低,然后马上又设为高,因为你上面几句放在主循环中了。
根据你中断的设置,你的led端口应该是PF1; 你的1.1mhz的频率是上面几句得到的。
解决方法:
1.你把while(1)中的代码全部剪切(不是复制)到while(1)之前;
while(1)中不要任何代码就OK了。
//定时器中断函数
#pragma interrupt_handler second:9
void second()
{
TCNT1H = 0x5B;
TCNT1L = 0x40;
if (num == 0)
{
PORTF = 0x00;
num = 1;
}
else
{
PORTF = 0x02;
num = 0;
}
}
改成以上,你再复制进去试一下!
用的什么编译器写呀?AVR的中断函数不是这么写的哦。亲!