新手,请教这个简单的c51程序,附上电路图。

[复制链接]
3219|10
 楼主| aliluya 发表于 2007-1-23 18:37 | 显示全部楼层 |阅读模式

问题:便已成功后烧入,但是不能实现功能,(晶体振荡器已经起振)请教问题出在哪里呢?
#include<reg51.h>
#include<absacc.h>

sbit pause=P1^7; 
sbit next=P1^6;  
sbit com1=P3^5;
sbit com2=P3^4;
void main(void)
{
P3=0xff;
if (com1==0)
    {
    next=0;
        while(com2==0)
        {
        pause=0;
        }
    }
while(1);
}

程序的目的:
mcu用at89c2051,P3.4,P3.5接电压检测芯片,当过压或欠压时HI(COM1)和LO(COM2)为低电位,
当HI为低电位时NEXT(P1.6)也为地电位点亮一下D2,
直到监测到LO(COM2)为低电位时Pause(P1.7)也为地电位点亮一下D3。
倚天剑 发表于 2007-1-23 19:14 | 显示全部楼层

while(1);

当com1 = 1时,不就到了死循环(while(1);)了?
 楼主| aliluya 发表于 2007-1-23 19:24 | 显示全部楼层

?

是的,只有=0时才会有后面的动作,
 楼主| aliluya 发表于 2007-1-23 20:56 | 显示全部楼层

可能找到原因了#include<AT89x051.h>!
是不是也要初始化P1口?
在P3=0xff 之后加一条P1=0xff?
可否?
谢谢了!
chenlung 发表于 2007-1-24 08:55 | 显示全部楼层

你复位电容是不是反了?

就是C5?
 楼主| aliluya 发表于 2007-1-24 19:19 | 显示全部楼层

hehe

确实放反了,
大家别只围观啊,帮帮忙啊,
继续求教!谢谢啊,
awey 发表于 2007-1-24 19:59 | 显示全部楼层

不是3.3A 是3.3V


void main(void)
{
P3=0xff;
while(1){
if (com1==0) next=0;
else next=1;
if(com2==0) pause=0;
else pause=1;
}
}
 楼主| aliluya 发表于 2007-1-24 20:48 | 显示全部楼层

谢谢帮忙,

如果按照这个,当过压或欠压时,D2H和D3都会一直亮着
,(应该是这样吧?)
但是我需要的是当检测到过压或欠压时,D2H和D3都只亮一下哦。
void main(void)
{
P3=0xff;
while(1){
if (com1==0) next=0;
else next=1;
if(com2==0) pause=0;
else pause=1;
}
}
emailli 发表于 2007-1-25 08:26 | 显示全部楼层

这样的程序只能用来学习,不适用!

结构不好!

你要的亮一下,可是没有一个点亮时间段。

就算亮了。你也看不到啊!

是否?

另外,这样写程序只是用来学习!

千万不要用来做产品!
 楼主| aliluya 发表于 2007-1-25 19:26 | 显示全部楼层

谢谢emailli的指教。

还有什么地方需要改进的呢?
谢谢。
fushaobing 发表于 2007-1-26 11:09 | 显示全部楼层

re

怎么只有点亮的指令,没有熄灭的指令?
如果是亮一下,为什么没有延时子程序?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

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