打印
[AVR单片机]

发现程序幽灵啊........................求钟馗捉鬼

[复制链接]
2822|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tzmark2009|  楼主 | 2012-3-19 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AI, ui, DM, I/O, IDMA
#include<iom8515v.h>
#define uint unsigned uint :'(
void kaishi()
{
DDRB=0xff;
}
void main()
{
kaishi();
PORTB=0xfe;//全亮
while(1);//让程序停止
} //我就想不通了,LED一直为默认的全亮!!!就是说主程序里的fe根本就没有作用。但是加在kaishi()里面又可以。以前用MEGA16的时候好好的,换了mega8515就成这样了,看了数据手册I/O口的部分也没怎么变啊。。。求大神指教。。。

相关帖子

沙发
tzmark2009|  楼主 | 2012-3-19 13:34 | 只看该作者
原来已经发表成功了。。。这网速太差都看不到。。。管理员不要封我号啊

使用特权

评论回复
板凳
mxh0506| | 2012-3-19 14:21 | 只看该作者
如果换个位置写这条语句就不行,建议把编译优化级别降低,或禁用优化试试;或者看一下生成的代码里有没有写PORTB的指令。

使用特权

评论回复
地板
tzmark2009|  楼主 | 2012-3-19 16:49 | 只看该作者
好的,我试试。谢谢楼上的大哥!!!这是第二次来21发帖了!!

使用特权

评论回复
5
NE5532| | 2012-3-19 17:24 | 只看该作者
楼主的LED是怎么接的呢?

使用特权

评论回复
6
tzmark2009|  楼主 | 2012-3-19 21:09 | 只看该作者
共阳,然后PB口接一组,低电位触发的。

使用特权

评论回复
7
NE5532| | 2012-3-19 21:12 | 只看该作者
但是你的0xFE只有PB.0是低电平啊,那万用表量过端口电平没?

使用特权

评论回复
8
tzmark2009|  楼主 | 2012-3-19 22:07 | 只看该作者
我想和硬件没关系的,因为我将#include<iom8515v.h>
#define uint unsigned uint  
void kaishi()
{
DDRB=0xff;
PORTB=0xfe;
}
void main()
{
kaishi();
while(1);//让程序停止
}
它就可以亮。
哦我之前注释错了。

使用特权

评论回复
9
tzmark2009|  楼主 | 2012-3-19 22:12 | 只看该作者
我的意思是将PORTB=0xfe;
放到kaishi();
外面以后PORTB无**常工作。
表现就是LED为默认的低电平,全亮。

如果在DDRB=0xff;
和PORTB=0xfe;中间随便隔一个程序,PORTB=0xfe;这一条程序也是没反应。

我还试过这样的
DDRB=0xff;
PORTB=0xfe;
PORTB=0xff;
while(1);
正常情况下应该全灭,但是表现为亮一个。也就是说PORTB=0xff;没有反应。

使用特权

评论回复
10
tzmark2009|  楼主 | 2012-3-19 22:16 | 只看该作者
要么是8515还有什么特殊的设置位?但是我翻了手册发现和以前用的16没什么不同啊,就是定时器设置有点不一样。。。我用8515控制18路PWM输出的,本来想今天可以让六足机器人动起来的。。。。悲剧了。。。
真TM蛋疼。。。

使用特权

评论回复
11
NE5532| | 2012-3-19 22:17 | 只看该作者
先不要把自己给误导了,单片机所有软件最后都落实到硬件上,你说点不亮,端口总有个电平把,找万用表实际量一下,说不定会有收获。我不是在告诉你问题在哪里,是在教你怎么靠自己找问题,你不能永远遇到问题都问别人三。

使用特权

评论回复
12
tzmark2009|  楼主 | 2012-3-20 07:46 | 只看该作者
感谢NE大神赐教,端口因为现在在寝室没表。。。明天会去实验室好好查的。刚刚又发现新情况
我把中间程序改成这样子
void kaishi()

{

   DDRB=0xff;
   PORTB=0xfe;
   PORTB=0xfd;
   PORTB=0xfb;
   
}
三个LED就都会亮,但是前面两个灯光偏暗,最后一个灯光正常。将其中一句放到主程序里面就又不行。

使用特权

评论回复
13
tzmark2009|  楼主 | 2012-3-20 07:46 | 只看该作者
昨晚不知道为什么发不上回复。。。

使用特权

评论回复
14
tzmark2009|  楼主 | 2012-3-20 10:14 | 只看该作者
#include<iom8515v.h>
#include<macros.h>
#define uint unsigned int
void kaishi()
{
   DDRB=0xff;
   PORTB=~BIT(0);
   PORTB=~BIT(1);
}
void main()
{
    kaishi();
    PORTB=~BIT(2);
    while(1);
}
刚才用了这一段程序,表现是LED0微亮,LED1亮度正常,LED2不亮,其他灯没有设置应该都是不亮的。
然后我测了IO口的电平。PB0(LED0)与地差4.7V,PB1(LED1)=0.4V,PB2(LED2)=4.86V
然后我又测了其他几个IO口的电平。PB3=4.86V,PB4=4.86V,和PB2一样
后面三个PB很奇怪,都是4.33V。以上都是直流。
然后其他几个没有设置的IO口,比如PA口电平都是交流0.47V的。

使用特权

评论回复
15
tzmark2009|  楼主 | 2012-3-20 10:21 | 只看该作者
会不会是芯片的问题呢,真心考虑换一块芯片了。

使用特权

评论回复
16
joyme| | 2012-3-20 11:29 | 只看该作者
LED限流电阻是多少?
你把PORTB = ~BIT(2)这句话放到while(1)里面试试?
按你说的情况最优可能是这句话被编译器优化掉了

使用特权

评论回复
17
icecut| | 2012-3-20 11:39 | 只看该作者
最简单的方法,在线debug,或者看编译出来的汇编...

使用特权

评论回复
18
NE5532| | 2012-3-20 12:22 | 只看该作者
感谢NE大神赐教,端口因为现在在寝室没表。。。明天会去实验室好好查的。刚刚又发现新情况
我把中间程序改成这样子
void kaishi()

{

   DDRB=0xff;
   PORTB=0xfe;
   PORTB=0xfd;
   PORTB=0xfb;
   
}
三个LED就 ...
tzmark2009 发表于 2012-3-20 07:46



你把端口电平量了再说,有示波器最好用示波器看,告诉我是多少V,不要简单说高低电平,还要量下单片机供电是多少V。

使用特权

评论回复
19
nongfuxu| | 2012-3-20 12:30 | 只看该作者
发现程序幽灵啊..................求钟馗捉鬼

LZ无意中编写了一个程序幼林!

使用特权

评论回复
20
tzmark2009|  楼主 | 2012-3-20 15:14 | 只看该作者
16# joyme
限流电阻300欧。我请老师过来看过,老师也让我将语句放到while(1) 里面试试,然后还是不行。编译器优化。。。第一次接触。。。我试试。

使用特权

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

本版积分规则

0

主题

25

帖子

1

粉丝