如何在12位ADC上结合ADRESH和ADRESL



MICRO:PIC18LF47K42
编译器:XC8
应用程序:MPLABX

我正在尝试组合12位ADC中的值。它们进入ADRESHADRESL。我的ADC设置为右对齐,它按如下方式进行格式化:
ADRESH:(----MSB,x,x(ADRESL:(x,x,x、x、x,LSB(

通过检查result寄存器中的值,我可以看出我的分辨率不高。我很确定这是因为我是如何将ADRESHADRESL组合在一起的。我怎么能这么做?

#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;

相关内容

  • 没有找到相关文章

最新更新