程序如下:
#include <avr/io.h>
#include <macros.h>
volatile uint num;
/*--------------------------------定时器0初始化--------------------------------------*/
void timer0_init()
{
SREG = 0x80; //使能全局中断
TIMSK=0x01; //T0溢出中断禁止
TCCR0=0x07; // T/C0工作于普通模式,1024分频,定时器频率 = 8M/1024 =7812.5Hz
TCNT0 = 61; //定时初值设置,定时时间 =(256-61)/7812.5=25ms
}
/*--------------------------------定时器0中断函数------------------------------------*/
#pragma interrupt_handler timer0_isr:iv_timer0_ovf
void timer0_isr(void)
{
TCNT0=61;
num++;
}
int main(void)
{
init(); //端口初始化
timer0_init();
while(1)
{
if(num>400)
display(1); //数码管显示
if(num<=400)
display(0); //数码管显示
}
}
问题是:数码管只显示0(显示不稳定,高频闪),如果中断程序执行,num总有大于400的时候,可为什么就是检测不到。在线等,求高手帮忙。
另外:端口初始化等都没有问题,是因为所有的显示都正常(此处显示简化,只是说明问题),只是想用定时器定时10秒,让他自动切换显示另一个数,就出问题了。
|