用MIKROC读取pic微控制器的输入引脚

时间:2015-03-25 14:51:24

标签: microcontroller pic mikroc

我需要编写一个程序来检查PIC的输入引脚是否有电压。如果存在电压,则它将为选定的输出引脚提供电压,如PORTB.RB1=1;。否则,它会为PORTC.RC1=1;等其他选定的输出引脚提供电压。

有可能吗?我试过这样做,但它不起作用。

void main() {

    TRISB=0;
    TRISA=1;
    TRISC=0;

    while(1){
        delay_ms(500);
        // PORTB=0;
        if(PORTA==1){
            PORTB.RB1 =1;
        }
        else{
            PORTC.RC1 =1;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您尚未关闭其他端口输出,并且未将PORTA的输入引脚隔离。如果它的位0是掩码是1,如果它的位1是掩码是2,等等。

void main() {

    TRISB=0;
    TRISA=1;
    TRISC=0;

    while(1){
        delay_ms(500);
        if(PORTA & 1){
            PORTB.RB1 =1;
            PORTC.RC1 =0;
        }
        else{
            PORTB.RB1 =0;
            PORTC.RC1 =1;
        }
    }
}

答案 1 :(得分:0)

PORTA和PORTE是模拟端口。如果要将它们用作数字输入,则必须防止PIC将它们用作模拟输入。 您必须添加此说明: ADCON1=0x06; 在将PORTA或PORTE设置为输入之前。

此代码成功运作:

void main()
{
    ADCON1=0x06;
    TrisA=1;
    TrisE=1;
    TrisC=0;
    PortC=0;
    while (1)
    {
        if (PortA.B0==1)
            PortC.B0=1;
        else
            PortC.B0=0;

        if (PortA.B1==1)
            PortC.B1=1;
        else
            PortC.B1=0;

        if (PortA.B2==1)
            PortC.B2=1;
        else
            PortC.B2=0;

        if (PortA.B3==1)
            PortC.B3=1;
        else
            PortC.B3=0;

        if (PortA.B5==1)
            PortC.B4=1;
        else
            PortC.B4=0;

        if (PortE.B0==1)
            PortC.B5=1;
        else
            PortC.B5=0;

        if (PortE.B1==1)
            PortC.B6=1;
        else
            PortC.B6=0;

        if (PortE.B2==1)
            PortC.B7=1;
        else
            PortC.B7=0;
    }
}

答案 2 :(得分:0)

硬件连接:有5v电源和开关的有线输入端口位。                       之后用下拉电阻连接。

void main(){
TRISB = 1;     //set portB as input       
TRISC = 0;     //set portC as output
while(1){

 if(PORTB.B0 == 0){           //if RB0 == 0 ?
          PORTC.F0 = 1;       //set RC0 = 1 ,(high)
          }else PORTC.F0 = 0; //set RC0 = 0 ,(low)
 if(PORTB.B1 == 0){           //if RB1 == 0 ?
          PORTC.F1 = 1;       //set RC1 = 1 ,(high)
          }else PORTC.F1 = 0; //set RC1 = 0 ,(low)

  //set if else block for numbers of bit as you want.....
       }
}

请注意,pic端口A是anlalog输入默认值,如果您想将此端口用作数字端口,请更改ADCON寄存器并遵循数据表。