sbit ADC_DOUT = P1^0; // INP
sbit ADC_CLK = P1^1; // OUT
sbit ADC_DIN = P1^2; // OUT
sbit ADC_CS = P1^3; // OUT
sbit ADC_RESET = P1^4; // OUT
sbit DRDY = P0^4; // 中断入口
// ADC_DRDY = Interrupt // 中断入口
/***** 初始化 *** ADC 配置等******/
ADC_CS = 0;
Delay_ms(1);
ADC_RESET = 0;
Delay_ms(1);
ADC_RESET = 1;
InitADC();
/*******************/
void Switch1_Gate(New_char Ch) // Ch == 通道号
{
ADC_CS = 0;
WritcToReg_ADC_Init(0x38 | (Ch && 0x01)); // 设置当前采样通道
for(;DRDY != 0;);
for(i = 0 ; i < 16 ; i ++)
{
ADC_CLK = 0;
AD16_Bit < <= 1;
ADC_CLK = 1;
if(ADC_DOUT == 1)AD16_Bit |= 0x01; // 读取数据位
}
if(Ch == 0)L1_Scale = (float)AD16_Bit;
if(Ch == 1)L2_Scale = (float)AD16_Bit;
ADC_CS = 1;
return;
}
//******************* InitADC 初始化 ADC 配置 ****************************
void InitADC(void)
{
ADC_CLK = 1;
ADC_DIN = 1;
Delay_ms(1);
WritcToReg_ADC_Init(0x20); // 0x20 通讯,下一个写时钟寄存器
WritcToReg_ADC_Init(0x04); // 0x04 写时钟寄存器设置更新速率为 50 Hz
Delay_ms(1);
WritcToReg_ADC_Init(0x10); // 0x10 通讯,下一个写增校准寄存器
WritcToReg_ADC_Init(0x7C); // 0x46 增益 7C = 128、滤波器工作、自校准。64 == 16G
// Delay_ms(1);
// WritcToReg_ADC_Init(0x38 | (0 && 0x01)); // 设置当前采样通道
return;
}
//******************* WritcToReg_ADC_Init ****************************
void WritcToReg_ADC_Init(unsigned char byteword)
{
ADC_CLK = 1;
ADC_CS = 0;
Token = 0x80;
AD16_Bit = byteword;
for(i = 0 ; i < 8 ; i++)
{
if(AD16_Bit & Token)ADC_DIN = 1; // 输入数据位
else ADC_DIN = 0;
ADC_CLK = 1 ;
ADC_CLK = 0 ;
ADC_CLK = 1 ;
Token = Token > > 1;
}
ADC_CLK = 1;
ADC_DIN = 1; // 结束
return;
}