打印

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

[复制链接]
7270|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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口,这样只要检测到一个就可以看到效果了,结果还是不行……:'(:'(

使用特权

评论回复
5
jacky_xs1|  楼主 | 2013-1-24 12:28 | 只看该作者
木有高人指点下?在弄项目,比较急,在线坐等各位大虾……

使用特权

评论回复
6
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下的器件头文件
都没搞清楚,就随便乱用
怎么可能得到正确结果呢

使用特权

评论回复
7
ayb_ice| | 2013-1-24 13:34 | 只看该作者
一个GPIO都没有搞定,说什么项目

使用特权

评论回复
8
wzy8430121| | 2013-1-24 13:57 | 只看该作者

一个GPIO都没有搞定,说什么项目

使用特权

评论回复
9
gx_huang| | 2013-1-24 14:19 | 只看该作者
if(PIN_B1==1)这个语句不太好。
PIN_B1本来就是布尔变量,就是1和0的逻辑变量。
你直接if(PIN_B1)就可以了。

使用特权

评论回复
10
yklstudent| | 2013-1-24 14:28 | 只看该作者
本帖最后由 yklstudent 于 2013-1-24 18:18 编辑

哎  看来还是有人么高清楚问题所在
PIN_B1  PIN_B4  PIN_B6  PIN_B7
根本就不是内部引脚寄存器,你判断它有毛用啊
哎 真是无语

使用特权

评论回复
11
小鱼儿1045| | 2013-1-24 15:02 | 只看该作者
你应该把PORTB的上拉电阻使能!

使用特权

评论回复
12
shuidi_wangdan| | 2013-1-24 16:29 | 只看该作者
什么型号的单片机?此引脚是否有其他复用功能,看是否被占用?多看看数据手册。

使用特权

评论回复
13
yklstudent| | 2013-1-25 10:45 | 只看该作者
哎  无语了,帖张图片
楼主既然知道设置输出用output_high(XX)和output_low(XX);
为什么就不想想输入不用input(XX)
而去搞什么(PIN_B1) (PIN_B4)等等
这些看看头文件就知道是些什么东东呢
哎 真没法说了

未命名.jpg (74.18 KB )

未命名.jpg

使用特权

评论回复
14
yklstudent| | 2013-1-25 10:49 | 只看该作者
gx_huang 发表于 2013-1-24 14:19
if(PIN_B1==1)这个语句不太好。
PIN_B1本来就是布尔变量,就是1和0的逻辑变量。
你直接if(PIN_B1)就可以了 ...

麻烦不懂得  你也应该去了解下
那个根本就不是什么变量  更不是什么布尔变量
误导人不好

使用特权

评论回复
15
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;

使用特权

评论回复
16
swxa1234| | 2013-1-25 11:19 | 只看该作者
:(

使用特权

评论回复
17
yklstudent| | 2013-1-25 12:21 | 只看该作者
gx_huang 发表于 2013-1-25 11:16
正是因为不知道他的PIN_B1是怎么宏定义的,所以我认为他的语法有问题。
你以为比我懂呀?我不会比你差的 ...

尊敬你下 喊声大哥
麻烦先去了解下CCSC编译器再说
不懂 麻烦也去主动学学
看看CCSC编译器下的PIC16F88头文件下
PIN_B1 PIB_B2 ....
这些都是些什么东西再说
你写的程序也许是对的,但是这个对楼主是没有什么帮助的
除非楼主自己定义。。。
不多说了 一群不了解CCSC的人

使用特权

评论回复
18
gx_huang| | 2013-1-25 12:37 | 只看该作者
尊敬不是挂嘴上的。
我只看了LZ的帖子,并没有看你的帖子。
LZ的帖子并没有说是哪个C编译器,我也没有用过CCSC编译器。
一边嘴上尊敬,一边高高在上的让别人学学,人家凭什么要学你说的编译系统?
我这个程序是PICC编译器,自己定义的KEY=RA4,肯定是对的,不存在什么“也许是对的”。
我认为我的提醒对LZ很有帮助,提醒注意PIN_B1的变量属性。

使用特权

评论回复
19
gdutxzy| | 2013-1-25 12:43 | 只看该作者
本帖最后由 gdutxzy 于 2013-1-25 12:50 编辑

把AD之类的复用引脚功能关掉没有?,记得ANSL全清零,顺便查 查比较器啊,其它的之类的复用功能关掉没有,PIC的很多都默认模拟引脚开启的。

使用特权

评论回复
20
yklstudent| | 2013-1-25 13:26 | 只看该作者
一个嘴上都不尊敬别人的人 还指望行动上尊敬别人???
真是个笑话
说是帮助楼主,就要根据楼主的问题来回答
而不是答非所问
搞到最后 楼主都被带绕进去了

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝