技术热线: 0755-86643915

新闻动态

芯海adc芯片CS1237程序资料

更新时间: 2024-01-16 15:37:16
阅读量:

                                                    CS1237       程序 
/* 
CODE NAME : AD_Communication.C 
- description 
- MCU 与 ADC 通讯相关子程序 
*/ 
//  整个通讯时序的时间必须小于                             1 个数据转换周期 
//  推荐每个  CLK 的时间长度: 2uS ~ 15uS 
/* 
Name : F_AD_Clock 
Function: ADC 时序时钟 
*/ 
void F_AD_Clock(void) 

IO_CLK_AD = 1; 
F_Delay(); 
IO_CLK_AD = 0; 
F_Delay(); 

/* 
Name : F_Read_AD_Byte 
Function:  读 3 字节 AD 值 
*/ 
void F_Read_AD(void) 

_UCHAR i; 
R_AD0.word = 0; 
EIC20_EIE0 = 0; // 关闭 MCU_DAT管脚的外部中断 ( 防止读写时误触发  ) 
// while(IO_Data_AD); 
for(i = 0; i < 24; i++) // 发送 24 个 CLK,接收数据 

R_AD0.word <<= 1; 
F_AD_Clock(); 
if(IO_Data_AD) 

R_AD0.word ++; 


F_AD_Clock(); 
F_AD_Clock(); 
F_AD_Clock(); //CLK27 ,拉高 DRDY 
//  如果一个数据转换周期内对                     ADC  进行两次或以上的读写操作,则需要发送                                 46   个  CLK, 
而不是 27 个 CLK 
//( 即:发送  24 个 CLK 读取数据,然后再发送                           22 个 CLK) 
EIC20_EIE0 = 1; // 重新开启  MCU_DAT管脚的外部中断  } 
/* 
Name : F_Rd_AdReg 
Function:  读取 ADC 寄存器 
*/ 
_UCHAR F_Rd_AdReg(void) 

_UCHAR i; 
union _UCHAR_BIT R_Temp; 
// 
EIC20_EIE0 = 0; // 关闭 MCU_DAT管脚的外部中断 ( 防止读写时误触发  ) 
// 
//1 ~ 3   :clk1-clk27 // for(i = 0; i < 27; i++) { F_AD_Clock(); } //- 
 //4 :clk28-clk29 // IO_Data_AD_Dir = 
1; F_AD_Clock(); F_AD_Clock(); //把 MCU_Data 管脚设为输出  // 
//5  :clk30-clk36(  发送读命令 ) // R_Temp.byte = 0xAC; for(i = 0; 
i < 7; i ++) { if(R_Temp.bit.b07) { //      读命令 (0x56) 左移 1 位 //MSB 
} IO_Data_AD = 1; } else { IO_Data_AD = 0; } R_Temp.byte = R_Temp.byte << 1; F_AD_Clock(); 
// //6 :clk37 // IO_Data_AD_Dir = 0; 
F_AD_Clock(); // //    把 MCU_Data 管脚设为输入 
//7  :clk38-clk45(  读取寄存器 ) 
// 
R_Temp.byte = 0; 
for(i = 0; i < 8; i++) 

R_Temp.byte <<= 1; 
F_AD_Clock(); 
if(IO_Data_AD) 

R_Temp.byte ++; 


// 
//8  :clk46 
// 
F_AD_Clock(); 
// 
EIC20_EIE0 = 1; // 重新开启  MCU_DAT管脚的外部中断 
return R_Temp.byte; 

/* 
Name : F_Wr_AdReg 
Function:  写入 ADC 寄存器 
*/ 
void F_Wr_AdReg(_UCHAR R_AdReg) 

_UCHAR i; 
union _UCHAR_BIT R_Temp; 
//