F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19/**************************************************************以下是ADS1110.h**************************************************************/#ifndef__ADS1110_H#define__ADS1110_H#includestm32f10x.h#includeSysTick.h//条件编译1:使用软件模拟I2C#defineTWI_ENABLE1#defineTWI_SCL_0GPIOB-BRR=GPIO_Pin_6#defineTWI_SCL_1GPIOB-BSRR=GPIO_Pin_6#defineTWI_SDA_0GPIOB-BRR=GPIO_Pin_7#defineTWI_SDA_1GPIOB-BSRR=GPIO_Pin_7#defineTWI_SDA_STATE(GPIOB-IDR&GPIO_Pin_7)enumENUM_TWI_REPLY{TWI_NACK=0,TWI_ACK=1};enumENUM_TWI_BUS_STATE{TWI_READY=0,TWI_BUS_BUSY=1,TWI_BUS_ERROR=2};#defineTWI_RETRY_COUNT3//重试次数voidTWI_Initialize(void);u8TWI_START(void);voidTWI_STOP(void);u8TWI_SendByte(u8Data);u8TWI_ReceiveByte(void);u8TWI_WaitAck(void);voidTWI_SendACK(void);voidTWI_SendNACK(void);voidads1110Config(void);u16RD_ADS(void);u16get_ad_result(void);#endif/*__ADS1110_H*//**************************************************************以下是ADS1110.c**************************************************************/#includeADS1110.h#defineTWI_NOPTWI_Delay()-1-F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19u16AD_Result[13];//----------------ADS1110(ED1)地址、配置字-----------------//#defineADS1110_WR_ADDRESS0x92//10010010写#defineADS1110_RD_ADDRESS0x93//10010011读#defineADS1110_CONFIG_REG0x8C//连续转换模式,16bit精度,PGA=1/********************************************************************************函数名称:TWI_Delay*描述:延时函数**输入:无*输出:无*返回:无*作者:*修改日期:2012年10月20日*******************************************************************************/voidTWI_Delay(void){u32i=15;while(i--);}/********************************************************************************函数名称:TWI_Initialize*描述:I2C初始化函数**输入:无*输出:无*返回:无*作者:*修改日期:2012年10月20日*******************************************************************************/voidTWI_Initialize(void){GPIO_InitTypeDefGPIO_InitStructure;//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;TWI_SDA_1;TWI_SCL_1;GPIO_Init(GPIOB,&GPIO_InitStructure);ads1110Config();//////DebugPrint(SoftwareTWIInitializing...\n);}/*******************************************************************************-2-F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19*函数名称:TWI_START*描述:发送启动**输入:无*输出:无*返回:无*作者:*修改日期:2012年10月20日*******************************************************************************/u8TWI_START(void){TWI_SDA_1;TWI_NOP;TWI_SCL_1;TWI_NOP;if(!TWI_SDA_STATE){////DebugPrint(TWI_START:BUSY\n);returnTWI_BUS_BUSY;}TWI_SDA_0;TWI_NOP;if(TWI_SDA_STATE){////DebugPrint(TWI_START:BUSERROR\n);returnTWI_BUS_ERROR;}TWI_SCL_0;TWI_NOP;returnTWI_READY;}/********************************************************************************函数名称:TWI_STOP*描述:发送停止位**输入:无*输出:无*返回:无*作者:*修改日期:2012年10月20日*******************************************************************************/voidTWI_STOP(void){TWI_SCL_0;TWI_NOP;TWI_SDA_0;TWI_NOP;-3-F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19TWI_SCL_1;TWI_NOP;TWI_SDA_1;TWI_NOP;//TWI_SCL_0;//TWI_NOP;//////DebugPrint(TWI_STOP\n);}/********************************************************************************函数名称:TWI_SendACK*描述:收到数据,发送ACK**输入:无*输出:无*返回:无*作者:梅川酷子*修改日期:2012年10月20日*******************************************************************************/voidTWI_SendACK(void){TWI_SCL_0;TWI_NOP;TWI_SDA_0;TWI_NOP;TWI_SCL_1;TWI_NOP;TWI_SCL_0;TWI_NOP;//////DebugPrint(TWI_SendACK\n);}/********************************************************************************函数名称:TWI_SendNACK*描述:收到数据,发送NACK**输入:无*输出:无*返回:无*作者:*修改日期:2012年10月20日*******************************************************************************/voidTWI_SendNACK(void){TWI_SCL_0;TWI_NOP;TWI_SCL_1;TWI_NOP;-4-F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19TWI_SDA_1;TWI_NOP;TWI_SCL_0;TWI_NOP;//////DebugPrint(TWI_SendNACK\n);}u8TWI_WaitAck(void){TWI_SCL_0;TWI_NOP;TWI_SDA_1;TWI_NOP;TWI_SCL_1;TWI_NOP;if(TWI_SDA_STATE){TWI_SCL_0;return0x00;}TWI_SCL_0;return0x01;}/********************************************************************************函数名称:TWI_SendByte*描述:发送一个字节**输入:要发送的数据(1字节)*输出:无*返回:TWI_ACK/TWI_NACK*作者:*修改日期:2012年10月20日*******************************************************************************/u8TWI_SendByte(u8Data){u8i;TWI_SCL_0;for(i=0;i8;i++){TWI_SCL_0;TWI_NOP;//---------数据建立----------if(Data&0x80){TWI_SDA_1;}else{-5-F:\单片机\ARM\程序\ADS1110.c2013年1月8日21:19TWI_SDA_0;}Data=1;TWI_NOP;//---数据建立保持一定延时----TWI_SCL_1;TWI_NOP;}TWI_SCL_0;if(TWI_SDA_STATE){//TWI_SCL_0;//////DebugPrint(TWI_NACK!\n);returnTWI_NACK;}else{//TWI_SCL_0;//////DebugPrint(TWI_ACK!\n);returnTWI_ACK;}}/********************************************************************************函数名称:TWI_ReceiveByte*描述:接收一个字节**输入:无*输出:无*返回:返回接收到的数据*作者:*修改日期:2012年10月20日*******************************************************************************/u8TWI_ReceiveByte(void){u8i,Dat;TWI_SDA_1;//TWI_SCL_0;Dat=0;for(i=0;i8;i++){//TWI_SCL_1;//产生时钟上升沿[正脉冲],让从机准备好数据//TWI_NOP;Dat=1;TWI_SCL_0;TWI_NOP;TWI_SCL_1;TWI_