[疑难问答] 为什么结果是灯全部都亮

[复制链接]
3342|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?把延时搞长一点
wangwo 发表于 2010-4-15 22:47 | 显示全部楼层
#include"AT89x52.h"
这个估计已经说明型号了吧
David_ming 发表于 2010-4-15 23:38 | 显示全部楼层
5# wangwo

怎么会说明型号呢??你甚至可以把HEX移植到任意一个51核的IC上都可以正常跑
god_like 发表于 2010-4-16 17:12 | 显示全部楼层
LZ可以考虑把延时的时间设长些
 楼主| xiaomifan 发表于 2010-4-29 15:54 | 显示全部楼层
4# David_ming
晶振12MHZ,AT89S52
David_ming 发表于 2010-4-29 22:26 | 显示全部楼层
8# xiaomifan
你的delay搞长点
贾君鹏子 发表于 2010-4-30 22:53 | 显示全部楼层
有意思
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++);
  }
}
David_ming 发表于 2010-5-13 06:07 | 显示全部楼层
本帖最后由 David_ming 于 2010-5-13 06:10 编辑

11# xuyiyi 加关键字也不行,得把变量放到for里面,不然表达式依然得不到预期效果,许工真细心,我看了半天都没注意这里有蹊跷,楼主这种写法比较另类,哈哈
48327702 发表于 2010-5-13 10:25 | 显示全部楼层
i 在for里没有初始化吧?这样不是只运行一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

305

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部