AVR单片机定时器中断的值不能保存到主程序中--请教

chenmengzhong   2009-7-9 09:53 楼主
#include
#include
#define uchar8 unsigned char

const uchar8 Relay[] =
        {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar8 count = 0;

void time0_init(void)
{
        TCCR0 = 0x00;
        TCNT0 = 0xD9;
        TCCR0 = 0x05;//1024分频,定时器开始
}

void port_init(void)
{
        DDRC = 0xff;
        PORTC = 0x00;
}

SIGNAL(SIG_OVERFLOW0)//定时器0溢出中断
{
        TCNT0 = 0xD9;
        count++;/////////////////////////////在中断时已经执行++操作,}

void devices_init(void)
{
        cli();
        port_init();
        time0_init();

        TIMSK = 0x01;//使能溢出中断0
        sei();
}

int main(void)
{       
        uchar8 i = 0;
        devices_init();
        while(1)
        {
                if(count = 99)//////////////////////////在这里count的值怎么一直是0呢
                {
                        PORTC = Relay[i%8];
                        i++;
                        count = 0;
                }
        }       
        return 0;
}



初接触有的时 AVR ATmega128,4M,怎么会这样呢,请指教

回复评论 (7)

中断发生后中断标示没被清楚,中断只能发生一次
点赞  2009-7-9 10:03
if(count = 99)//////////////////////////
if(count == 99)????
点赞  2009-7-9 10:39
引用: 引用 2 楼 zyzhang365 的回复:
if(count = 99)//////////////////////////
if(count == 99)????

原来的程序if(count=99)总成立,所以总被赋值成0。揭帖吧。
点赞  2009-7-9 10:42
这个是我拷贝时不小心搞的,当时调试时,我将if(count == 1)看他是否会进入 IF语句内,拷贝过来的时候 又改成原来的99 改
的时候多删除了一个,我用的是AVR Studio 是不是哪里没有设置好,还时怎么的,请帮忙看下,谢谢!!
点赞  2009-7-9 10:54
你可以定义
volatile uchar8 count;
试试。

另外,看是不是别的地方把变量修改了。
点赞  2009-7-9 11:43

7楼 huj 

谢谢,5楼的 问题解决了,但是还又点不明白这是什么原因呢,
点赞  2009-7-9 12:47
我也碰到同样的问题,按6楼的方法就解决了!
点赞  2012-8-21 10:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复