打印

奇怪的现象

[复制链接]
1647|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mindor|  楼主 | 2010-1-20 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Mindor 于 2010-1-20 22:04 编辑

最近在调试一个工程的时候,发现一个怪现象。
程序如下:
for(i=10;i>0;i--)
{
    if(i<=10)P1=P1 & 0x7f;//使实验板上的第八个LED亮起来
    delay_ms(100);//延时100ms
}

现象:第八个LED不亮,
改成:
for(i=10;i>0;i--)
{
    if(i>10)P1=P1 & 0x7f;//修改了if条件
    delay_ms(100);//延时100ms
}

这时灯竟然亮起来了!有人知道为什么吗?好像很低级的问题。。。⊙﹏⊙

相关帖子

沙发
jerkoh| | 2010-1-20 21:54 | 只看该作者
if(i>10)P1=P1 & 0x7f; 这样就不亮了 你代码写错了

第一次执行10 条件成立

使用特权

评论回复
板凳
Mindor|  楼主 | 2010-1-20 22:04 | 只看该作者
2# jerkoh
哦,是错了,我改成if(i>10)之后还是两耶。。。我的这个代码是在调试一个工程时用的。。。

使用特权

评论回复
地板
jerkoh| | 2010-1-20 22:13 | 只看该作者
单步调试看看什么现象 也许你其他地方代码问题引起的

使用特权

评论回复
5
xinzha| | 2010-1-20 22:19 | 只看该作者
根据你的代码,第一个循环里面P1=P1 & 0x7f始终能够被执行,也就是P1.7被强制拉低,灯不亮,那就代表着你的LED灯亮的条件是P1.7为高。
而在第二个循环里面,由于i > 10这个条件永远得不到满足,所以P1=P1 & 0x7f这句话得不到执行,P1口保持初始状态,这时候灯亮不亮只跟这段代码之前P1.7的状态相关。
如果你想把P1.7拉高,应该这么写, P1 = P1 | 0x80;

使用特权

评论回复
6
ocon| | 2010-1-21 03:28 | 只看该作者
楼上说的是,初学者容易犯这种错。

使用特权

评论回复
7
Mindor|  楼主 | 2010-1-21 07:14 | 只看该作者
5# xinzha
不是这样的耶~用万用表测过了。。。

使用特权

评论回复
8
Mindor|  楼主 | 2010-1-21 07:15 | 只看该作者
4# jerkoh
很可能是硬件问题,keil调试时仿真都行的~晕~

使用特权

评论回复
9
mbutterfly| | 2010-1-21 08:49 | 只看该作者
5L说的对

使用特权

评论回复
10
反质子| | 2010-1-21 10:06 | 只看该作者
应该是硬件与软件没协调好,有直接驱动LED的,也有接上拉的
代码与你期望的现象相反,就是硬件与你想的相反

使用特权

评论回复
11
Mindor|  楼主 | 2010-1-21 20:05 | 只看该作者
10# 反质子
今天下午终于找到原因了。我的工程里面定义了一个数组空间,比较大。放到data区了,后来改成定义到xdata就可以了。。。但是不明白什么原因,有人知道吗?

使用特权

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

本版积分规则

36

主题

413

帖子

1

粉丝