⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads1100 c.c

📁 ads1110源码,可直接下载使用
💻 C
字号:
/***************************************************************************/			
/*    函数原型: void ads_start (void)      			         			   */
/*    功    能: 提供I2C总线工作时序中的起始位。                            */  
/***************************************************************************/	    
void ads_start (void) //在SCL高的情况下,SDA由高到低的变化造成START。
  {
	SDA=1;
	_nop_();
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	SDA=0;
	_nop_();
	_nop_();
	_nop_();
	SCL=0;
	_nop_();
	_nop_();
  }
/**************************************************************************/
/*    函数原型: void ads_stop(void)      							      */
/*    功    能: 提供I2C总线工作时序中的停止位。						      */
/**************************************************************************/
void ads_stop(void) //在SCL高的情况下,SDA由低到高的变化造成STOP。
  {

	SDA=0;
	_nop_();
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	SDA=1;
	_nop_();
	_nop_();
	_nop_();
	SCL=0;
	_nop_();
	_nop_();
  }
/*****************************************************************************/
/*    函数原型: uchar ack_check(void)     								     */
/*    功    能: 提供I2C总线的时钟信号, 并返回在时钟电平为高期间SDA 信号线上状*/
/*              态。本函数可用于数据发送, 也可用于数据接收。 				 */
/*****************************************************************************/
uchar ack_check(void) // 检查应答信号
  {

	SCL=0;
	SCL=1;
	_nop_();
	if (SDA )
	{
	 ACK = 1;
	}
	else
	{
	 ACK = 0;
	}
	SCL=0;
	return(ACK);  // 如果收到ACK应答则返回0, 否则返回1。 		
  }
/****************************************************************************/
/*    函数原型: void ads_sendBYTE(uch data)         					    */
/*    功    能: 向I2C总线发送8位数据。          						    */
/****************************************************************************/
void ads_sendBYTE(uchar snd_data) // 发送一个字节
  {
	uchar bitcount=8;         // 发送8位数据。
    do
    {
       if((snd_data&0x80)==0x80)  //   从左到右选送D7,屏蔽D0~D6。
         {
           SDA=1; 			  //写 1
         }
       else
         {
           SDA=0; 		      //写 0
         }
		SCL=0;                //在时钟大于4u秒期间写数据
		SCL=1;
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		SCL=0;
		snd_=snd_<<1;	      //   待送数据左移一位.
		bitcount--;
	} 
    while(bitcount);
    SDA=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
  }
/***************************************************************************/
/*    函数原型: ads_reciveBYTE(void)        							   */
/*    功    能: 从I2C总线上接收8位数据信号, 并将接收到8位数据作为一个字节  */
/*              返回, 不回送应答信号ACK。主函数在调用本函数之前应保证SDA信 */
/*              号线处于浮置状态, 即使8052的Px.x脚置1。 				   */
/***************************************************************************/
uchar ads_reciveBYTE(void) //接受一个字节
  {
	uchar in_data=0;
	uchar bitcount1=8;
	do
	{ 	SCL=0; //在时钟大于4u秒期间读数据
		SCL=1;
		_nop_();
		_nop_();
		if(SDA) //读 1
		  {
			in_data=in_data|0x01;
	      }
		else //读 0
		  {
			in_data=in_data&0xfe;
          }

		SCL=0;

		if(bitcount1-1)
		  {
			in_data=in_data<<1;
		  }
			bitcount1--;
	}
	while(bitcount1);
    return(in_data);
  }
/****************************************************************************/
/*    函数原型: void function send_Ack(void);							    */
/*    功    能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。	    */
/****************************************************************************/
void send_ack(void) // 发送连续读信号
  {
	SDA=0;
	SCL=0;
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCL=0;
  }

void send_nack(void) // 发送不连续读信号
  {
	SDA=1;
	SCL=0;
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCL=0;
  }
/****************************************************************************/
/*    函数原型: write_ads(uchar data)	         						    */
/*    功    能: 写器件地址和配置字。	                                    */
/****************************************************************************/
void write_ads(uchar snd_data) 	//写器件地址和配置字
  {
	ads_start();           	//开始写
	ads_sendBYTE(0x90);    	//写器件地址(写)
	do
	{
	 ;
    }while(ack_check());   	//等待应答
	ads_sendBYTE(snd_data);    	//写配置字
	do
	{
	 ;
	}while(ack_check());   	//等待应答
    ads_stop();             //结束写
  }
/****************************************************************************/
/*    函数原型: read_ads(void)		                					    */
/*    功    能: 数据读取。	                                                */
/****************************************************************************/
void read_ads(void)        	//从ADS1100中读出数据
  {
//  uchar adc_hi;
//	uchar adc_lo;
//	uchar adc_cfg;
	ads_start();           	//开始读
	ads_sendBYTE(0x91);    	//写器件地址(读)
	do
	{
	 ;
	}while(ack_check());     	//等待应答

	adc_hi = ads_reciveBYTE(); 	// 读高8位
	send_ack();             	//连续读
	adc_lo = ads_reciveBYTE(); 	//读低8位
	send_ack();              	//连续读
	adc_cfg = ads_reciveBYTE(); //读配置字
	send_nack();
	ads_stop(); 				//结束读
  }

/***************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -