我需要编写一个程序来检查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;
}
}
}
答案 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寄存器并遵循数据表。