打印

单片机控制I/O,编译正确,调试灯不量,帮忙看看啊

[复制链接]
2191|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dahema1982|  楼主 | 2007-8-8 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REG51.H>
sbit     a=P2^0;
sbit     b=P2^1;
sbit     c=P2^2;
sbit     d=P2^3;
void initial();
void delay();
main()
{
initial();
delay();
while(1)
{
a=1;
delay();
b=1;
delay();
c=1;
delay();
d=1;
delay();
initial();
}
}
void initial()
{
a=0;
b=0;
c=0;
d=0;
}

void delay()
{
unsigned int i=0;
while(i<30000)
i++;
}


应该是个很简单的程序...编译过了,没错误的!
可是调试的时候,p2.0~p2.3不会跑!
不知道怎么回事,救命啊

相关帖子

沙发
ddh1129| | 2007-8-8 09:50 | 只看该作者

delay是个死循环

修改一下:
void delay()
{
unsigned int i;
for(i=0;i<30000;i++);
}

使用特权

评论回复
板凳
ayb_ice| | 2007-8-8 09:57 | 只看该作者

用软件方式调试一下就知道了...

软件没有问题....

使用特权

评论回复
地板
zhushuping| | 2007-8-8 14:54 | 只看该作者

延时时间太短了

像这样就可以了
while(i<30000)
  {i++;
  }

使用特权

评论回复
5
udbit18| | 2007-8-8 15:10 | 只看该作者

楼上的,你这个有什么不同的

使用特权

评论回复
6
udbit18| | 2007-8-8 15:12 | 只看该作者

delay是死循环吗

使用特权

评论回复
7
udbit18| | 2007-8-8 15:12 | 只看该作者

知道水平有限,所以不能回家你的问题,不好意思

使用特权

评论回复
8
gjg191| | 2007-8-8 15:25 | 只看该作者

dd

你的硬件正确吗?别光找程序原因啊

使用特权

评论回复
9
ethunter| | 2007-8-8 16:38 | 只看该作者

看看硬件吧

先从硬件找,给LED直接上5V的电压看是否亮~!玩单片机不是只玩程序的

使用特权

评论回复
10
hyh0lh| | 2007-8-8 17:23 | 只看该作者

单步是否全部通过?

单步执行是否通过?也怀疑你的硬件有问题。

使用特权

评论回复
11
wangshujun| | 2007-8-8 17:27 | 只看该作者

51的高电平不能驱动led的,用拉的方式会好一点

程序应该没有问题的

使用特权

评论回复
12
wildboar| | 2007-8-8 19:22 | 只看该作者

9楼上的朋友

你的想法是好的,但是建议不要5V直接加到LED上,呵呵

使用特权

评论回复
13
dahema1982|  楼主 | 2007-8-8 19:32 | 只看该作者

谢谢大家

谢谢大家...问题找到了,硬件原因~~~~~~~~

芯片没接地~~~我是个猪5555555555555

使用特权

评论回复
14
gjg191| | 2007-8-8 19:49 | 只看该作者

dd

不要这么说自己 学到东西就好,

使用特权

评论回复
15
ethunter| | 2007-8-9 15:59 | 只看该作者

哈哈,话说错了

不好意思,由于只想讲明意思,没有把技术说全面,让各位见笑了

使用特权

评论回复
16
q223490115| | 2007-8-9 21:59 | 只看该作者

111

嘎嘎  其实我也是刚学的,大家也帮我看看这几行字母有没有错的啦,是大约明白了上边那老兄的程序的意思加工的:
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
  unsigned char j=0xff;
for(;;)
{
P0=j;
j=j&&OutData;//相与
OutData=_crol_(OutData,1); //左移
mDelay(1000);//延时1000MS
}
}

使用特权

评论回复
17
q223490115| | 2007-8-9 22:02 | 只看该作者

111

唉   我也看出错来了,那个P0改为P2

使用特权

评论回复
18
Lesta_2007| | 2007-8-10 16:27 | 只看该作者

我也是菜鸟,说错了不要见怪!

既然已经定义了
#define uchar unsigned char
#define uint unsigned int
后面的
unsigned int Delay
unsigned int i
unsigned char OutData=0xfe
unsigned char j=0xff
直接用
uint Delay
uint i
uchar OutData=0xfe
uchar j=0xff
就可以了
还有主程序中
for(;;){}
一般用while(1){}来作循环的吧!

使用特权

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

本版积分规则

15

主题

33

帖子

0

粉丝