问题描述
我正在PIC16F15323-I / P上编程传感器
到目前为止,我添加了两个传感器(水位传感器,电压传感器)
问题是当我添加第二个传感器时,它在输入之间交换
水位传感器获取电压传感器的输出,电压传感器获取水位传感器的输出
我从代码中删除了一个传感器,当时它们的输出对他们两个都有好处,但在一起却不是。
我不明白我的代码有什么问题
如果有人可以帮助我
这是代码
#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;
}
}
/* ... */