发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: jacky_xs1
手机看帖
扫描二维码
随时随地手机跟帖
21
huangxz| | 2013-1-25 13:27 | 只看该作者 回帖奖励 |倒序浏览
是因为没仔细看手册吧,你只要把io置位数字就没有问题了,这个问题我也曾经遇见过。

使用特权

评论回复
22
gx_huang| | 2013-1-25 16:41 | 只看该作者
真笑话,是谁先对谁不礼貌的?
你以为自己有几斤几两呀?
首先他的宏定义PIN_B1,本来就让人以为是定义GPIO的,我的理解没有任何错误,我的建议也没有错误。
不知道哪个不知天高地厚的,以为就他懂。
还建议别人学习什么编译系统的,笑话!

使用特权

评论回复
23
yklstudent| | 2013-1-25 18:14 | 只看该作者
还真是高手了  容不得别人说了
呵呵

使用特权

评论回复
24
zdhlixiang2006| | 2013-1-25 18:26 | 只看该作者
有没有设成输入模式?IO口操作这种最简单的东西还是不要来发帖吧

使用特权

评论回复
25
yklstudent| | 2013-1-25 18:50 | 只看该作者
#include <16F88.h>
#device ADC = 10
#fuses NOWDT,NOPUT,XT,NOMCLR,NOLVP,NOWRT,NODEBUG,NOPROTECT,NOIESO
#use delay(clock=1000000)

void main()
{
    set_tris_a(0xfc);
    set_tris_b(0xf2);
    //port_b_pullups(TRUE);

    for(;;)
    {
        if((input(PIN_B1)==0)||(input(PIN_B4)==0)||(input(PIN_B6)==0)||(input(PIN_B7)==0))
                //if(input(PIN_B1))
        {
            output_low(PIN_A1);
            delay_ms(1000);      
        }
        else
        {
            output_high(PIN_A1);
            delay_ms(1000);
        }
    }
}
楼主试试这个程序吧  说真的
CCSC真是太高级了 好多底层的东西都给封装好了
所以想操作底层
可以这样做:
#include <16F88.h>
#device ADC = 10
#fuses NOWDT,NOPUT,XT,NOMCLR,NOLVP,NOWRT,NODEBUG,NOPROTECT,NOIESO
#use delay(clock=1000000)

#byte PORTA = 0x05
#byte PORTB = 0x06
#byte TRISA = 0x85
#byte TRISB = 0x86

#bit  PORTA0 = PORTA.0
#bit  PORTA1 = PORTA.1
#bit  PORTA2 = PORTA.2
#bit  PORTA3 = PORTA.3
#bit  PORTA4 = PORTA.4
#bit  PORTA5 = PORTA.5
#bit  PORTA6 = PORTA.6
#bit  PORTA7 = PORTA.7

#bit  PORTB0 = PORTB.0
#bit  PORTB1 = PORTB.1
#bit  PORTB2 = PORTB.2
#bit  PORTB3 = PORTB.3
#bit  PORTB4 = PORTB.4
#bit  PORTB5 = PORTB.5
#bit  PORTB6 = PORTB.6
#bit  PORTB7 = PORTB.7

#bit  TRISA0 = TRISA.0
#bit  TRISA1 = TRISA.1
#bit  TRISA2 = TRISA.2
#bit  TRISA3 = TRISA.3
#bit  TRISA4 = TRISA.4
#bit  TRISA5 = TRISA.5
#bit  TRISA6 = TRISA.6
#bit  TRISA7 = TRISA.7

#bit  TRISB0 = TRISB.0
#bit  TRISB1 = TRISB.1
#bit  TRISB2 = TRISB.2
#bit  TRISB3 = TRISB.3
#bit  TRISB4 = TRISB.4
#bit  TRISB5 = TRISB.5
#bit  TRISB6 = TRISB.6
#bit  TRISB7 = TRISB.7

void main()
{
        TRISA = 0xFC;
        TRISB = 0xFC;
    //set_tris_a(0xfc);
    //set_tris_b(0xf2);
    //port_b_pullups(TRUE);

    for(;;)
    {
        //if((input(PIN_B1)==0)||(input(PIN_B4)==0)||(input(PIN_B6)==0)||(input(PIN_B7)==0))
                if((PORTB0==1)&&(PORTB4==1)&&(PORTB6==1)&&(PORTB7==1))
                //if(input(PIN_B1))
        {
            //output_low(PIN_A1);
                        PORTA1 = 0;
            delay_ms(1000);      
        }
        else
        {
            //output_high(PIN_A1);
                        PORTA1 = 1;
            delay_ms(1000);
        }
    }
}
这样才可以直接对底层直接操作

使用特权

评论回复
26
jacky_xs1|  楼主 | 2013-1-29 16:12 | 只看该作者
不好意思,回复晚了。谢谢各位,您们都给出了很好的的建议,我也是临时从别人手上接过来这个程序,之前的确是没有接触过CCSC,很多基本性的问题都没弄清楚。yklstudent的见解十分准确,但楼上其他几位朋友也给我提供了很有用的信息,在此谢谢大家了。我最后也是找了很久,才找到input这个函数来实现的。而且就像楼上几位谈到的,CCSC头文件的定义与其他几个PIC编译环境不太一样,同时CCSC的相关资料的确比较少,网上的例程也不多,只能直接看看看它的接口说明(还有一篇“CCCS 编译器使用手册 pic”对我这样的新手也很有帮助)。至于yklstudent提到的#byte PORTA和#bit  PORTA0 = PORTA.0这种方法,我自己之前也尝试过,不过没有成功,可能是某个配置的问题,理论上应该是可以实现的,但这种方法其实更有利于理解之前我的代码中的相关错误。

使用特权

评论回复
27
shiyan1532| | 2013-1-31 23:15 | 只看该作者

使用特权

评论回复
28
walkershrek| | 2013-2-1 11:28 | 只看该作者
这是热闹,不错的帖子

使用特权

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

本版积分规则