关于SH79F168 P0.0(OPOUT)用作ADC出现问题
初始化程序如下:
void InitADConversion(void)
{
P0CR &= Bin(00000010); // 将管脚设置为输入
P0PCR &= Bin(00000010);
ADCON = 0x80; // ADON=1;ADCIF=0;EC=0;REFC=0;选择通道0
ADCH = Bin(00111111); // AN0~5作为检测电压通道
ADT = 0x80;
}
采样程序如下:
/*A/D转换通道*/
#define AN0 ADCON | 0x00
#define AN1 ADCON | 0x02
#define AN2 ADCON | 0x04
#define AN3 ADCON | 0x06
#define AN4 ADCON | 0x08
#define AN5 ADCON | 0x0A
#define OPOUT ADCON | 0x0E
/**********************************************/
#define NET_K1 0 //K1
#define NET_K2 1 //K2
#define AnSimBattVolL 2 //第一节模拟电池电压
#define AnSimBattVolH 3 //第二节模拟电池电压
#define AnTargetVolL 4 //第一节接口处电压
#define AnTargetVolH 5 //第二节接口处电压
#define AnSimBattCur 6 //模拟电池电流
uint16 GetADResult(uint8 ADChannel)
{
uint16 result = 0;
uint8 i = 0;
ADCON &= 0xF1;
switch(ADChannel)
{
case NET_K1:
ADCON = OPOUT;
break;
case NET_K2:
ADCON = AN5;
break;
default:
break;
}
delay100uS();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
for(i=0;i<32;i++)
{
ADCON |= 0x01; //启动转换并等待转换结束
while(ADCON & 0x01);
result += ADDH*4 + ADDL;
}
result = result >>5;
return result;
}
现在的问题是通过上面这个函数,通道AN5能够得到正确数据,但是OPOUT通道的数据一直采样到的是0。调试了很久,发现只有这个通道不能得到数据,不知道原因,datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口,但是好像仅仅这样不行,是不是还需要在其他设置下?麻烦熟悉这个芯片的人能够告知下,谢谢! |