紧急求助!!!PIC无法判断I/O口电平状态?

[复制链接]
 楼主| jacky_xs1 发表于 2013-1-24 11:37 | 显示全部楼层 |阅读模式
本帖最后由 jacky_xs1 于 2013-1-24 12:27 编辑

跪求各位大虾,PIC芯片能不能判断I/O口电平状态?比如我将RB1设为输入,在程序中能否通过if(PIN_B1==1)来判断该口的电平高低?我自己做了一个实验,貌似不行,程序如下:
void main()
{
    set_tris_a(0xfc);
    set_tris_b(0xf2);
    //port_b_pullups(TRUE);

    while(1)
    {
        if((PIN_B1==1)||(PIN_B4==1)||(PIN_B6==1)||(PIN_B7==1))
        {
            output_low(PIN_A1);
            delay_ms(1000);      
        }
        else
        {
            output_high(PIN_A1);
            delay_ms(1000);
        }
    }
}

其中RB1,RB4,RB6,RB7都设为输入,RA1设为输出。但结果显示RA1只输出高电平,没有输出低电平。
ayb_ice 发表于 2013-1-24 11:43 | 显示全部楼层
当然可以了,

仔细看手册吧

我就纳闷了,既然有问题,就不要搞那么复杂嘛,先测试一个IO口嘛
 楼主| jacky_xs1 发表于 2013-1-24 11:50 | 显示全部楼层
补充,我采用的是pic16f88的芯片,ccs编译环境。pic16f88的PIN_B1、PIN_B4、PIN_B6、PIN_B7这几个引脚都与另一个PIC18f252相连,通过示波器可以看到pic16f88的PIN_B1、PIN_B4、PIN_B6、PIN_B7这几个引脚有高低电平变化,但程序中if((PIN_B1==1)||(PIN_B4==1)||(PIN_B6==1)||(PIN_B7==1))这个分支就没有走过……
 楼主| jacky_xs1 发表于 2013-1-24 11:59 | 显示全部楼层
:L:L 我查了datasheet,B口的I/O口默认都是数字I/O口……
之前只用一个I/O口试过,不行,我怕是某个引脚单独的问题,所以多加了几个I/O口,这样只要检测到一个就可以看到效果了,结果还是不行……:'(:'(
 楼主| jacky_xs1 发表于 2013-1-24 12:28 | 显示全部楼层
木有高人指点下?在弄项目,比较急,在线坐等各位大虾……
yklstudent 发表于 2013-1-24 13:33 | 显示全部楼层

#define PIN_A0  40
#define PIN_A1  41
#define PIN_A2  42
#define PIN_A3  43
#define PIN_A4  44
#define PIN_A5  45
#define PIN_A6  46
#define PIN_A7  47

#define PIN_B0  48
#define PIN_B1  49
#define PIN_B2  50
#define PIN_B3  51
#define PIN_B4  52
#define PIN_B5  53
#define PIN_B6  54
#define PIN_B7  55
不会用就别用CCSC  真要用 麻烦也看下CCSC下的器件头文件
都没搞清楚,就随便乱用
怎么可能得到正确结果呢
ayb_ice 发表于 2013-1-24 13:34 | 显示全部楼层
一个GPIO都没有搞定,说什么项目
wzy8430121 发表于 2013-1-24 13:57 | 显示全部楼层

一个GPIO都没有搞定,说什么项目
gx_huang 发表于 2013-1-24 14:19 | 显示全部楼层
if(PIN_B1==1)这个语句不太好。
PIN_B1本来就是布尔变量,就是1和0的逻辑变量。
你直接if(PIN_B1)就可以了。
yklstudent 发表于 2013-1-24 14:28 | 显示全部楼层
本帖最后由 yklstudent 于 2013-1-24 18:18 编辑

哎  看来还是有人么高清楚问题所在
PIN_B1  PIN_B4  PIN_B6  PIN_B7
根本就不是内部引脚寄存器,你判断它有毛用啊
哎 真是无语
小鱼儿1045 发表于 2013-1-24 15:02 | 显示全部楼层
你应该把PORTB的上拉电阻使能!
shuidi_wangdan 发表于 2013-1-24 16:29 | 显示全部楼层
什么型号的单片机?此引脚是否有其他复用功能,看是否被占用?多看看数据手册。
yklstudent 发表于 2013-1-25 10:45 | 显示全部楼层
哎  无语了,帖张图片
楼主既然知道设置输出用output_high(XX)和output_low(XX);
为什么就不想想输入不用input(XX)
而去搞什么(PIN_B1) (PIN_B4)等等
这些看看头文件就知道是些什么东东呢
哎 真没法说了

本帖子中包含更多资源

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

×
yklstudent 发表于 2013-1-25 10:49 | 显示全部楼层
gx_huang 发表于 2013-1-24 14:19
if(PIN_B1==1)这个语句不太好。
PIN_B1本来就是布尔变量,就是1和0的逻辑变量。
你直接if(PIN_B1)就可以了 ...

麻烦不懂得  你也应该去了解下
那个根本就不是什么变量  更不是什么布尔变量
误导人不好
gx_huang 发表于 2013-1-25 11:16 | 显示全部楼层
yklstudent 发表于 2013-1-25 10:49
麻烦不懂得  你也应该去了解下
那个根本就不是什么变量  更不是什么布尔变量
误导人不好 ...

正是因为不知道他的PIN_B1是怎么宏定义的,所以我认为他的语法有问题。
你以为比我懂呀?我不会比你差的,老弟
我怎么误导别人了?只是给他指出可能的错误。
你以为我没有做过PIC程序吗?
以下程序是可以用的:
#define KEY4 RA4
if(!KEY4)
{
        if(last_key4)
        {
                last_key4=0;
                rx_buff[0]='1';
                rcv_ok=1;
                delay10ms(30);
        }
}
        else last_key4=1;
swxa1234 发表于 2013-1-25 11:19 | 显示全部楼层
yklstudent 发表于 2013-1-25 12:21 | 显示全部楼层
gx_huang 发表于 2013-1-25 11:16
正是因为不知道他的PIN_B1是怎么宏定义的,所以我认为他的语法有问题。
你以为比我懂呀?我不会比你差的 ...

尊敬你下 喊声大哥
麻烦先去了解下CCSC编译器再说
不懂 麻烦也去主动学学
看看CCSC编译器下的PIC16F88头文件下
PIN_B1 PIB_B2 ....
这些都是些什么东西再说
你写的程序也许是对的,但是这个对楼主是没有什么帮助的
除非楼主自己定义。。。
不多说了 一群不了解CCSC的人
gx_huang 发表于 2013-1-25 12:37 | 显示全部楼层
尊敬不是挂嘴上的。
我只看了LZ的帖子,并没有看你的帖子。
LZ的帖子并没有说是哪个C编译器,我也没有用过CCSC编译器。
一边嘴上尊敬,一边高高在上的让别人学学,人家凭什么要学你说的编译系统?
我这个程序是PICC编译器,自己定义的KEY=RA4,肯定是对的,不存在什么“也许是对的”。
我认为我的提醒对LZ很有帮助,提醒注意PIN_B1的变量属性。
gdutxzy 发表于 2013-1-25 12:43 | 显示全部楼层
本帖最后由 gdutxzy 于 2013-1-25 12:50 编辑

把AD之类的复用引脚功能关掉没有?,记得ANSL全清零,顺便查 查比较器啊,其它的之类的复用功能关掉没有,PIC的很多都默认模拟引脚开启的。
yklstudent 发表于 2013-1-25 13:26 | 显示全部楼层
一个嘴上都不尊敬别人的人 还指望行动上尊敬别人???
真是个笑话
说是帮助楼主,就要根据楼主的问题来回答
而不是答非所问
搞到最后 楼主都被带绕进去了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

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