MICRO:PIC18LF47K42
编译器:XC8
应用程序:MPLABX
我正在尝试组合12位ADC中的值。它们进入ADRESH
和ADRESL
。我的ADC设置为右对齐,它按如下方式进行格式化:
ADRESH:(----MSB,x,x(ADRESL:(x,x,x、x、x,LSB(
通过检查result
寄存器中的值,我可以看出我的分辨率不高。我很确定这是因为我是如何将ADRESH
和ADRESL
组合在一起的。我怎么能这么做?
#include "myIncludes.h"
volatile unsigned char ZCDSoftwareFlag = 0;
volatile unsigned char switchValue = 0;
void main(void)
{
portInit();
triac = 0;
unsigned char result;
adcInit();
while(1)
{
__delay_us(4);
ADCON0bits.GO = 1; //Start conversion
while (ADCON0bits.GO); //Wait for conversion done
result = ADRESH;
result = result << 8;
result = result |ADRESL;
}
}
这里是ADC初始化函数
void adcInit(void)
{
ADCON0bits.FM = 1; //right-justify
ADCON0bits.CS = 1; //ADCRC Clock
ADPCH = 0x00; //RA0 is Analog channel
ADCON0bits.ON = 1; //Turn ADC On
ADCON0bits.GO = 1; //Start conversion
}
您尝试将12位结果放入8位变量中。切换到16Bit。
uint16_t result;
然后您可以组合这些值:
result = ADRESH;
result = result << 8;
result = result |ADRESL;