打印
[疑难问答]

为什么结果是灯全部都亮

[复制链接]
2419|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaomifan|  楼主 | 2010-4-14 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"AT89x52.h"
#include"intrins.h"

#define uint unsigned int
#define uchar unsigned char

void DelayMS(uint z)
{
uint i=0;
for(;z>0;z--)
{  
  for(;i<20;i++);
  }

}
sbit WEI=P2^1;
sbit SJ=P1^4;
uchar k,j;
void main(void)
{
   uchar LED=0xfe;
   SJ=0;
   WEI=1;
   P0=0xff;
   WEI=0;
   while(1)
   {
   j=_crol_(LED,1);
   LED=j;
   P0=LED;
   DelayMS(20);
   }
   
}
这是我写的流水灯程序,为什么结果是全部都亮呢。请指点
沙发
lpydidi| | 2010-4-15 16:25 | 只看该作者
uchar k,j;
在这个位置定义合适吗

使用特权

评论回复
板凳
laslison| | 2010-4-15 16:40 | 只看该作者
uchar LED=0xfe;这句不会起作用吧

使用特权

评论回复
地板
David_ming| | 2010-4-15 20:39 | 只看该作者
晶振多大?什么型号的IC?把延时搞长一点

使用特权

评论回复
5
wangwo| | 2010-4-15 22:47 | 只看该作者
#include"AT89x52.h"
这个估计已经说明型号了吧

使用特权

评论回复
6
David_ming| | 2010-4-15 23:38 | 只看该作者
5# wangwo

怎么会说明型号呢??你甚至可以把HEX移植到任意一个51核的IC上都可以正常跑

使用特权

评论回复
7
god_like| | 2010-4-16 17:12 | 只看该作者
LZ可以考虑把延时的时间设长些

使用特权

评论回复
8
xiaomifan|  楼主 | 2010-4-29 15:54 | 只看该作者
4# David_ming
晶振12MHZ,AT89S52

使用特权

评论回复
9
David_ming| | 2010-4-29 22:26 | 只看该作者
8# xiaomifan
你的delay搞长点

使用特权

评论回复
10
贾君鹏子| | 2010-4-30 22:53 | 只看该作者
有意思

使用特权

评论回复
11
xuyiyi| | 2010-5-13 04:24 | 只看该作者
问题应该属于 Keil C51 编译时将延时程序 DelayMS() 优化省略了,内容变量请定义为 volatile 属性。
程序如下:

void DelayMS(uint z)
{
volatile uint i=0;
for(;z>0;z--)
{  
  for(;i<20;i++);
  }
}

使用特权

评论回复
12
David_ming| | 2010-5-13 06:07 | 只看该作者
本帖最后由 David_ming 于 2010-5-13 06:10 编辑

11# xuyiyi 加关键字也不行,得把变量放到for里面,不然表达式依然得不到预期效果,许工真细心,我看了半天都没注意这里有蹊跷,楼主这种写法比较另类,哈哈

使用特权

评论回复
13
48327702| | 2010-5-13 10:25 | 只看该作者
i 在for里没有初始化吧?这样不是只运行一次

使用特权

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

本版积分规则

0

主题

305

帖子

1

粉丝