电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 华强电子网公众号

    电子元器件

    采购信息平台

  • 华强电子网移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

ADS1100 ADS1110的通用程序

来源:-- 作者:-- 浏览:1132

标签:

摘要: //本程序采用IIC通信方式,4兆PIC16F877 //是ADS1100,ADS1110的通用程序。 刚通过。 # include<pic.h> # define uch unsigned char # define unint unsigned int # define SD

//本程序采用IIC通信方式,4兆PIC16F877
 //是ADS1100,ADS1110的通用程序。
 刚通过。
 
 
 # include<pic.h>
 # define uch unsigned char
 # define unint unsigned int

 

 # define SDA  RD1
 # define SCL  RD0
 uch ACK;
 unint j;
 void delay()            //延时
 {
 for(j=5535;--j;) continue;
 }
 void start (void)       //开始
 {
    TRISD0=0;
    TRISD1=0;
    SDA=1;
    asm("nop");
    SCL=1;
    asm("nop");
    asm("nop");
    asm("nop");
    SDA=0;
    asm("nop");
    asm("nop");
    asm("nop");
    SCL=0;
    asm("nop");
    asm("nop");
 }
 
 void stop(void)             //结束
    {
     TRISD0=0;
     TRISD1=0;
     SDA=0;
     asm("nop");
     SCL=1;
     asm("nop");
     asm("nop");
     asm("nop");
     SDA=1;
     asm("nop");
     asm("nop");
     asm("nop");
     SCL=0;
     asm("nop");
     asm("nop");
     }
   
     uch  check(void)    //  检查应答信号
      {  
         TRISD1=1;
         SCL=0;
         SCL=1;
    
         if (SDA )
         {
             ACK = 1;
         }
        else
         {
             ACK = 0;
          }
        SCL=0;
       return(ACK);
      }
      
       void sendBYTE(uch data)   //  发送一个字节
 {
      uch bitcount=8;               //发送8位
 
           do
           {
             TRISD0=0;
             TRISD1=0;            //置输出
            
             if((data&0x80)==0x80)   
                 {
                  SDA=1;         //写 1
                  }
             else  
                 {
                  SDA=0;        //写 0
                 }
             SCL=0;              //在时钟大于4u秒期间写数据
             SCL=1;
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
             SCL=0;
           data=data<<1;
           bitcount--;
           } while(bitcount);
            TRISD1=1 ;                  //释放总线等待应答
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");         
 }   
 
 uch reciveBYTE(void)             //接受一个字节
   {
     uch temp1=0;
     uch bitcount1=8;
     TRISD0=0;
     TRISD1=1;               //置输入
    do
    { SCL=0;              //在时钟大于4u秒期间读数据
      SCL=1;
      asm("nop");
      asm("nop");
   
     if(SDA)                //读 1
        {
         temp1=temp1|0x01;    
        }
     else                     //读 0
       {
         temp1=temp1&0xfe;
       }
      SCL=0;
      if(bitcount1-1)
       {
          temp1=temp1<<1;
          
       }
        bitcount1--;  
       }while(bitcount1);
        return(temp1);
   }  
   
    void ack(void)          //  发送连续读信号
 {
     TRISD0=0;
     TRISD1=0;
     SDA=0;
     SCL=0;
     SCL=1;
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
     SCL=0;
 }
     
   void nack(void)        //  发送不连续读信号
   {
     TRISD0=0;
     TRISD1=0;
     SDA=1;
     SCL=0;
     SCL=1;
     asm("nop");
     asm("nop");
     asm("nop");
     asm("nop");
     asm("nop");
     SCL=0;
   }  
   
    void wrtoIIC(uch data)     //写器件地址和配置字
 
   {
 
     
      start();               //开始写
      sendBYTE(0x90);         //写器件地址(写)
          
      do{
           ;
         }while(check());       //等待应答
          sendBYTE(data);      //写配置字
     do{;
         }while(check());
         
      stop();            //结束写
     
     
      
 }     
 
    void rdfromIIC(void)       //从ADS1100中读出数据
 {  
 
   
      start();                  //开始读
      sendBYTE(0x91);           //写器件地址(读)
       do{
          ;
          }while(check());      //等待应答
       
      
       TMR1H=reciveBYTE();     // 读高8位
        ack();                  //连续读
       TMR1L=reciveBYTE();     //读低8位
       ack();                  //连续读
       TMR2=reciveBYTE();      //读配置字
       nack();
       stop();                  //结束读
   //    delay();
    
 }
      
 
 main()
 {
    
 
    
    while(1)
     {
      di();
      wrtoIIC( 0x8c);
      rdfromIIC();
   
     }
 }  

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67