c-对PIC16F15323上的传感器进行编程,两个ADC输入单独工作良好,但输入一起交换输出



我正在对PIC16F15323-i/p上的传感器进行编程到目前为止,我添加了两个传感器(水位传感器、电压传感器(问题是当我添加第二个传感器时,它在输入之间交换水位传感器获取电压传感器的输出,电压传感器获取水位传感器的输出我从代码中删除了一个传感器,当时它们的输出都很好,但togather不是。我不明白我的代码有什么问题如果有人能帮我,请

这是代码

#include "Config.h"
int result=0;
int result1=0;
void pins ()
{
TRISC2 = 1;// set RC as voltage sesnor input 
TRISC5 = 0;// Green LED
TRISA0 = 0;//relay output 
TRISC1 = 0;// water level sensor led 
TRISA1 = 1;//water level sensor input 
}

void voltage_sensor ()
{
int result1=0;
// Select convertion clock 16Mhz = 101

ADCON1bits.ADCS0=1;
ADCON1bits.ADCS1=0;
ADCON1bits.ADCS2=1;

// to store data ( analog channel)

ADCON0bits.CHS0=0; // store the address for analog pin RC2 voltage sensor
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=0;
ADCON0bits.CHS4=1;
ADCON0bits.CHS5=0;  

// result of input 

ADCON1bits.ADFM=1; 


//port configuration

ADCON1bits.ADPREF0=0;
ADCON1bits.ADPREF1=0;

//set statues bit
ADCON0bits.GOnDONE=1;//start the conversion 

//switch on ADC

ADCON0bits.ADON =1;// turn on the ADC 

ADCON0bits.GOnDONE==1;// start the conversion 

result1=((ADRESH<<8)+ADRESL);// to turn on all the 10 ADC 
if (result1<800)

{
PORTC = 0b100000;  // PORTC1 green light 
PORTA = 0b000000;//PORTA0 relay 

}

else
{__delay_ms(10000);
PORTC = 0b000000;
PORTA = 0b000001;
}

}
void watersensor ()
{
int result=0;
// Select convertion clock 16Mhz = 101

ADCON1bits.ADCS0=1;
ADCON1bits.ADCS1=0;
ADCON1bits.ADCS2=1;

// to store data ( analog channel)

ADCON0bits.CHS0=1; 
ADCON0bits.CHS1=0;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=0;
ADCON0bits.CHS4=0;
ADCON0bits.CHS5=0; // store the address for analog pin RA1 


// result of input 

ADCON1bits.ADFM=1; 

//port configuration

ADCON1bits.ADPREF0=0;
ADCON1bits.ADPREF1=0;

//set statues bit
ADCON0bits.GOnDONE=1;//start the conversion 

//switch on ADC

ADCON0bits.ADON =1;// turn on the ADC 

ADCON0bits.GOnDONE==1;// start the conversion 
result=((ADRESH<<8)+ADRESL);// to turn on all the 10 ADC 
if (result>550)
{
PORTC = 0b000010;  // PORTC1 

}
else 
{
PORTC = 0b000000; 
}
}
void main() 
{
pins();
while(1)
{

__delay_ms(1);
{
voltage_sensor(result1);
result1=0;
}
__delay_ms(1);
{   
watersensor(result);
result=0;
}
}
}

实际上,调试代码非常困难,我无法预见你真正想用你的代码做什么

问题是,当我添加第二个传感器时,它在输入水位传感器获取电压传感器的输出电压传感器获取水位传感器的输出

你说的";取输出";?你说的";它在输入";?

除此之外,我真的不明白你想做什么,并问我有一个小机会:

可能的修复

尝试像这样将您的分配更改为PORTC(不覆盖以前的状态(

还要检查PORTC(和其他PORTS(是否真的只有6位的宽度!如果他们不这样做,你可能需要相应地改变你的作业

/* ... */
void voltage_sensor() {
/* ... your code */
if (result1 < 800)
{
PORTC = PORTC | 0b100000; // PORTC1 green light
PORTA = 0b000000; // PORTA0 relay
}
else {
__delay_ms(10000);
PORTC = PORTC & 0b011111;
PORTA = 0b000001;
}
}
void watersensor() {
/* ... your code */
if (result > 550) {
PORTC = PORTC | 0b000010; // PORTC1
} else {
PORTC = PORTC & 0b111101;
}
}
/* ... */