碰上WINAVR20090313 + AVR Studio 编译不正确的问题了。望高人指点
WINAVR20090313 + AVR Studio 4.17以下简单的测试代码所用的器件是ATTINY13A。led0.8秒一闪地指示定时器工作.
但现在LED一直不亮
换到MEGA16L 也是相同的效果
换WINAVR20100110 无果
。
。
。
搞了一整天都无法解决。
烦请有相似经历的朋友指点一下,谢谢!
#include <avr/io.h>
#include <avr/interrupt.h>
typedef unsigned int uint;
uint time_temp = 0;
/*******************************************************************/
/* */
/* 定时中断为100uS TINY13A */
/* */
/*******************************************************************/
void TIME0_CTC_MODE_init()
{
TCCR0A = 0x02; //COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00
//CTC模式
TCCR0B = 0x03; //FOC0A FOC0B – – WGM02 CS02 CS01 CS00
// clkI/O / 64 ( 来自预分频器 )
TIMSK0 = 0x04;// –––– OCIE0B OCIE0A TOIE0 –
OCR0A = 150;
__asm__ __volatile__ ("sei" ::) ; //开总中断
}
/*******************************************************************/
/* */
/*定时器0比较匹配A中断服务函数 */
/* */
/*******************************************************************/
ISR(TIM0_COMPA_vect)
{
time_temp++;//指示时间基准用
}
int main()
{
TIME0_CTC_MODE_init();
DDRB = 0XEF;//只有PB4为输入
PORTB = 0X18;
while(1)
{
if(time_temp >=1000)
{
PORTB ^= 0X08; // led接PB3
time_temp = time_temp-1000;
}
}//while
}//main
经检验 定时器0比较匹配A 配置正确,就是不执行while(1)循环程序中的 if(time_temp >=1000) . 请有相似经历的朋友指点一下,谢谢! 看门狗关掉试试 volatile unsigned int time_temp = 0; 额~~发生过高版本的winavr编译老工程出一堆错的路过。
d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。
我也同样遇到过。我调试的结果是执行速度变了导致时序错乱。 d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。
你是怎么样解决的啊 prow 发表于 2013-12-30 08:54
看门狗关掉试试
看门狗没开啊 askme 发表于 2013-12-30 11:04
volatile unsigned int time_temp = 0;
很感谢你的回答!就是加了类型修饰符volatile解决这个问题了 perfect@ 发表于 2013-12-30 12:22
你是怎么样解决的啊
额~~~找回老版本GCC的编译。 shawn_bu 发表于 2013-12-30 11:45
我也同样遇到过。我调试的结果是执行速度变了导致时序错乱。
我的程序里面用了好多printf,新版本和老版本处理上好像差距比较大,根本连编译都过不了。
最后换回老的WINAVR才算完事。
页:
[1]