如何解决在PIC16F15323上对传感器编程时,两个ADC输入分别工作良好,但一起输入交换输出 可能的解决方法
我正在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;
}
}
/* ... */
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。