求大侠指导!!!急啊!

[复制链接]
 楼主| 发表于 2014-3-23 19:16 | 显示全部楼层 |阅读模式
我使用的是PIC 16F877A单片机 我想实现的功能是:RB为输入,内置上拉;RD打开一个三极管(控制RB口是否接地) 然后判断3个RB口的电平变化,请各位大侠看看程序那里有问题! 主要是只能进入第一个IF 之后的IF进不去了 编译什么的全部通过,个人感觉是不是RB口的使用方法错了   我是个初学者求各位帮帮忙啊!!! 老总催着交作业!
#include<pic.h>
#define unchar unsigned char
#define uint unsigned int
void ys()
{
int a,b;
for(a=1;a<3000;a++)
{
for(b=1;b<20;b++);
}
}
void sd0()         //报警函数
{
RD1=1;
ys();
}
void main()          //主函数
{
TRISB=1;
TRISD=0;
RBPU=0;
while(1)              //死循环
{            
RD2=0;RD5=0;RD4=0;RB5=1;RB4=1;RB2=1;RD0=1;RD1=0;RD6=1;RD7=1; //初始化赋值
if((!RB5)&&(!RB4)&&(!RB2))                                  //通路判断   
{
RD2=0;RD5=1;RD4=1;ys();            
if((!RB5)&&(RB4)&&(RB2))                                  //第一路判断
{
RD2=1;RD5=0;RD4=1;ys();
if((RB5)&&(!RB4)&&(RB2))                                     //第二路判断
{
RD2=1;RD5=1;RD4=0;ys();
if((RB5)&&(RB4)&&(!RB2))                                        //第三路判断
{   
while((!RB2))               //抽线判断
{
RD0=0;
ys();
RD0=1;
ys();
}
}else{sd0();}
}else{sd0();}
}else{sd0();}
}else{sd0();}
}
}
发表于 2014-3-23 20:59 | 显示全部楼层
while主循环里做端口初始化,楼主要一直初始化下去?RB口变化中断?中断服务函数在哪里?怎么用RB变化这个东西的?没看出来呢。
发表于 2014-3-23 21:21 | 显示全部楼层
TRISB=1;
就是TRISB=0b00000001;
楼主你想干什么?
 楼主| 发表于 2014-3-23 21:27 | 显示全部楼层
我就是不知道RB用的对不对啊!
我想同时判断3个RB口的电平 不知道怎么写 求指教 大侠!
 楼主| 发表于 2014-3-23 21:28 | 显示全部楼层
NE5532 发表于 2014-3-23 20:59
while主循环里做端口初始化,楼主要一直初始化下去?RB口变化中断?中断服务函数在哪里?怎么用RB变化这个 ...

我就是不知道RB用的对不对啊!
我想同时判断3个RB口的电平 不知道怎么写 求指教 大侠!
发表于 2014-3-23 21:30 | 显示全部楼层
你要判断RB口线上的电平,你主循环里面是轮询方式,哪里需要用RB口变化中断呢?直接读不就得了。
 楼主| 发表于 2014-3-23 21:31 | 显示全部楼层
ZG11211 发表于 2014-3-23 21:21
TRISB=1;
就是TRISB=0b00000001;
楼主你想干什么?

TRISB=0xff 和TRISB=1不是一样的么?  我想把B口设置为输入端口! 然后同时判断3个B端口的电平变化来操作! 我不晓得怎么写!
 楼主| 发表于 2014-3-23 21:34 | 显示全部楼层
NE5532 发表于 2014-3-23 21:30
你要判断RB口线上的电平,你主循环里面是轮询方式,哪里需要用RB口变化中断呢?直接读不就得了。 ...

我把RB口的电平变化放在WHILE里就是让他一直循环操作此过程! 如果IF错误就又重头开始! 版主 没明白你的意思啊
 楼主| 发表于 2014-3-23 21:37 | 显示全部楼层
NE5532 发表于 2014-3-23 21:30
你要判断RB口线上的电平,你主循环里面是轮询方式,哪里需要用RB口变化中断呢?直接读不就得了。 ...

版主求帮忙!
发表于 2014-3-23 21:41 | 显示全部楼层
我也没明白你的意思,你先画流程图传上来吧,就在纸上画,画了用手机拍照发上来。
 楼主| 发表于 2014-3-24 09:19 | 显示全部楼层
NE5532 发表于 2014-3-23 21:41
我也没明白你的意思,你先画流程图传上来吧,就在纸上画,画了用手机拍照发上来。 ...

这个是电路图 我用CAD简单画了下! 求版主帮忙看看 我的程序那里有问题! 我想用RD来控制RB是否接地 然后同时判断3个RB口的接地情况! 如此循环往复! 版主帮帮忙

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2014-3-24 10:01 | 显示全部楼层
RD2=0;RD5=1;RD4=1;ys();            
if((!RB5)&&(RB4)&&(RB2))                                  //第一路判断
如果是端口一一对应的话,应该是这样吧 if((RB5)&&(RB4)&&(!RB2))
而且通路判断的if语句不应该是一个一个的嵌套在里面吧。
 楼主| 发表于 2014-3-24 10:09 | 显示全部楼层
NE5532 发表于 2014-3-23 21:41
我也没明白你的意思,你先画流程图传上来吧,就在纸上画,画了用手机拍照发上来。 ...

粗略树图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2014-3-24 10:27 | 显示全部楼层
本帖最后由 NE5532 于 2014-3-24 10:33 编辑

直接读入判断即可。楼主画完流程图可以看出来了没?这几个判断不是嵌套的关系,而是顺次执行的关系。
 楼主| 发表于 2014-3-24 11:17 | 显示全部楼层
NE5532 发表于 2014-3-24 10:27
直接读入判断即可。楼主画完流程图可以看出来了没?这几个判断不是嵌套的关系,而是顺次执行的关系。 ...

版主 请帮审查一下程序 程序编译没有错! 但是未按照预想的思路走! 只能进入第1个if就弹出来了! 不能跑到最后! 我不知道是什么原因 拜托了!
 楼主| 发表于 2014-3-24 11:20 | 显示全部楼层
NE5532 发表于 2014-3-24 10:27
直接读入判断即可。楼主画完流程图可以看出来了没?这几个判断不是嵌套的关系,而是顺次执行的关系。 ...

还有版主所说的不是嵌套? 我个人觉得是嵌套啊!  进了第一个IF才能进第2个IF这应该是嵌套的关系吧! 如果第1个IF与第2个IF没有关系的话才不叫嵌套啊! 我这个IF相互之间是有关联的 我个人觉得是嵌套啊!
 楼主| 发表于 2014-3-24 11:55 | 显示全部楼层
pang3dsa 发表于 2014-3-24 10:01
RD2=0;RD5=1;RD4=1;ys();            
if((!RB5)&&(RB4)&&(RB2))                                  //第一 ...

大侠 我的所有数据都上传了 如果有时间请帮忙看看那里有问题!
 楼主| 发表于 2014-3-24 11:56 | 显示全部楼层
pang3dsa 发表于 2014-3-24 10:01
RD2=0;RD5=1;RD4=1;ys();            
if((!RB5)&&(RB4)&&(RB2))                                  //第一 ...

大侠 我所有的数据都上传了 如果有时间请帮忙看看那里有问题  谢谢
 楼主| 发表于 2014-3-24 14:14 | 显示全部楼层
NE5532 发表于 2014-3-24 10:27
直接读入判断即可。楼主画完流程图可以看出来了没?这几个判断不是嵌套的关系,而是顺次执行的关系。 ...

版主 帮帮忙!!帮小弟审阅审阅
发表于 2014-3-24 14:26 | 显示全部楼层
早饭午饭和晚饭的关系是平级关系还是嵌套关系?楼主没吃早饭,连午饭晚饭也不准吃了??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

28

帖子

0

粉丝
快速回复 返回顶部 返回列表