打印
[AVR单片机]

遇到个有趣的问题

[复制链接]
1733|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doliphin|  楼主 | 2012-5-9 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个板子上跑点单个LED的程序,用ICCAVR编译代码点的LED出的比IAR编译出的代码点的亮,感觉很诡异呀

相关帖子

沙发
NE5532| | 2012-5-9 20:23 | 只看该作者
AVR的代码速度很快,不应该有时间延时,楼主示波器测下每个位的点亮时间有没有区别呢?

使用特权

评论回复
板凳
doliphin|  楼主 | 2012-5-9 20:41 | 只看该作者
#include <iom16.h>
#include <intrinsics.h>   //nop

void Delay(void)
{
  unsigned char i,j;
  for(i=200;i>0;i--)
  {
  for(j=200;j>0;j--);
  }
}

void main()
{
  DDRD=0x00;
  PORTD=0xff;
  __no_operation();
  __no_operation();
  while(1)
  {
        PORTD = 0xff; //
        Delay(); //延时
        Delay(); //延时
  }
}

使用特权

评论回复
地板
doliphin|  楼主 | 2012-5-9 20:42 | 只看该作者
这是程序,只是点PD7一个灯,我测了,跑ICCAVR的程序输出电压是5V,跑IAR的程序是1.7V·······(高电平灯会亮,LED串联1K电阻)

使用特权

评论回复
5
NE5532| | 2012-5-9 20:51 | 只看该作者
那就是另外一个问题了,楼主是设了端口以后死循环的,跟时间无关,1.7V那个可能程序都没有正常编译的。

使用特权

评论回复
6
doliphin|  楼主 | 2012-5-9 21:04 | 只看该作者
while(1)
  {
        PORTD = 0xff; //
        Delay(); //延时
        Delay(); //延时
        PORTD = 0x00; //
        Delay(); //延时
        Delay(); //延时     
  }

使用特权

评论回复
7
doliphin|  楼主 | 2012-5-9 21:05 | 只看该作者
把循环改成上面那样的它确实开始闪了,所以说应该是编译了但就是那么暗淡·····
5# NE5532

使用特权

评论回复
8
NE5532| | 2012-5-9 21:07 | 只看该作者
void main()
{
  DDRD=0x00;
  PORTD=0xff;
  while(1);
}

你这样烧进去再不一样亮,就去找示波器抓端口波形吧。

使用特权

评论回复
9
gary_xu| | 2012-5-13 23:09 | 只看该作者
这个很简单看一下,目标代码有什么不同啦。就知道啦。

使用特权

评论回复
10
好吃好好吃| | 2012-5-28 09:52 | 只看该作者
估计是编译优化掉了。

使用特权

评论回复
11
hyhmh| | 2012-5-30 14:22 | 只看该作者
要 在 分析 硬件接法、具体MCU型号 等的 基础上, 才能 确认 是否 由 软件引起

使用特权

评论回复
12
doliphin|  楼主 | 2012-6-16 23:02 | 只看该作者
恩 感谢大家的热心解答 我直接换ICCAVR了 反正以前也没玩过,又是自己玩的小项目,用什么都一样  目标代码也没看  但是以后会注意这一点的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:路漫漫其修远兮,吾将上下而求索

0

主题

195

帖子

2

粉丝