2

我需要编写一个程序来检查 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;
        }
    }
}
4

3 回答 3

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;
        }
    }
}
于 2015-03-25T20:11:56.113 回答
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;
    }
}
于 2016-05-03T20:33:13.640 回答
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 是模拟输入默认值,如果您想将此端口用作数字端口,请更改 ADCON 寄存器并遵循数据表。

于 2016-07-21T07:32:07.447 回答