找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1604|回复: 0
打印 上一主题 下一主题
收起左侧

AD7746的C语言驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:541416 发表于 2019-5-18 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #define CapDacvalue  4.97

  2. void IIC_Init(void)     
  3. {                                             
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         
  6.         RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC, ENABLE );      
  7.          
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  12.         IIC_SCL=1;
  13.         IIC_SDA=1;

  14. }

  15. void IIC_Start(void)
  16. {
  17.         SDA_OUT();     
  18.         IIC_SDA=1;                    
  19.         IIC_SCL=1;
  20.         delay_us(4);
  21.         IIC_SDA=0;
  22.         delay_us(4);
  23.         IIC_SCL=0;
  24. }         
  25. //2úéúIICí£?1D?
  26. void IIC_Stop(void)
  27. {
  28.         SDA_OUT();
  29.         IIC_SCL=0;
  30.         IIC_SDA=0;
  31.         delay_us(4);
  32.         IIC_SCL=1;
  33.         IIC_SDA=1;
  34.         delay_us(4);                                                                  
  35. }

  36. u8 IIC_Wait_Ack(void)
  37. {
  38.         u8 ucErrTime=0;
  39.         SDA_IN();      
  40.         IIC_SDA=1;delay_us(1);         
  41.         IIC_SCL=1;delay_us(1);         
  42.         while(READ_SDA)
  43.         {
  44.                 ucErrTime++;
  45.                 if(ucErrTime>250)
  46.                 {
  47.                         IIC_Stop();
  48.                         return 1;
  49.                 }
  50.         }
  51.         IIC_SCL=0;
  52.         return 0;  
  53. }

  54. void IIC_Ack(void)
  55. {
  56.         IIC_SCL=0;
  57.         SDA_OUT();
  58.         IIC_SDA=0;
  59.         delay_us(2);
  60.         IIC_SCL=1;
  61.         delay_us(2);
  62.         IIC_SCL=0;
  63. }
  64.               
  65. void IIC_NAck(void)
  66. {
  67.         IIC_SCL=0;
  68.         SDA_OUT();
  69.         IIC_SDA=1;
  70.         delay_us(2);
  71.         IIC_SCL=1;
  72.         delay_us(2);
  73.         IIC_SCL=0;
  74. }                                                                              
  75.                     
  76. void IIC_Send_Byte(u8 txd)
  77. {                        
  78.     u8 t;   
  79.         SDA_OUT();            
  80.     IIC_SCL=0;
  81.     for(t=0;t<8;t++)
  82.     {              
  83.         IIC_SDA=(txd&0x80)>>7;
  84.         txd<<=1;           
  85.                 delay_us(2);   
  86.                 IIC_SCL=1;
  87.                 delay_us(2);
  88.                 IIC_SCL=0;      
  89.                 delay_us(2);
  90.     }         
  91. }            

  92. u8 IIC_Read_Byte(unsigned char ack)
  93. {
  94.         unsigned char i,receive=0;
  95.         SDA_IN();
  96.     for(i=0;i<8;i++ )
  97.         {
  98.         IIC_SCL=0;
  99.         delay_us(2);
  100.                 IIC_SCL=1;
  101.         receive<<=1;
  102.         if(READ_SDA)receive++;   
  103.                 delay_us(1);
  104.     }                                         
  105.     if (!ack)
  106.         IIC_NAck();
  107.     else
  108.         IIC_Ack();
  109.     return receive;
  110. }
  111. unsigned char IICWatask2(void)  
  112. {
  113.      unsigned char i=0;
  114.          unsigned char flag=0x01;
  115.      IIC_SCL=0;
  116.      delay_us(2);
  117.      IIC_SDA=1;
  118.      IIC_SCL=1;
  119.      delay_us(6);
  120.     while((IIC_SDA==1)&&(i<250))
  121.       i++;
  122.       flag=IIC_SDA;
  123.       IIC_SCL=0;
  124.     return(flag);
  125.    }

  126. void IICSendask(void)
  127. {
  128.   IIC_SDA=0;
  129.   delay_us(3);
  130.   IIC_SCL=1;
  131.   delay_us(6);
  132.   delay_us(2);
  133.   IIC_SCL=0;
  134.   IIC_SDA=1;
  135.   delay_us(3);
  136. }         
  137. unsigned char IICRECVbyte(void)
  138. {
  139.   unsigned char i;
  140.   unsigned char temp=0;
  141.   IIC_SCL=0;
  142.   IIC_SDA=1;
  143.   for (i=0;i<8;i++)
  144.     {

  145.           IIC_SCL=1;
  146.           delay_us(5);
  147.           temp=temp<<1;
  148.       if(IIC_SDA==1)
  149.             temp=temp|0x01;
  150.           else
  151.             temp=temp&0xfe;
  152.          IIC_SCL=0;
  153.      }
  154.     return(temp);
  155. }



  156. void AD7745_RESET(void)
  157. {
  158.         IIC_Start();
  159.   IIC_Send_Byte(0xBF);
  160.   IIC_Stop();
  161. }

  162. unsigned char SETUP_7745(unsigned char addr,unsigned char value)   
  163. {
  164. unsigned char flag;
  165. flag=0x01;
  166. IIC_Start();
  167. IIC_Send_Byte(0x90);
  168. if(IICWatask2()!=0)
  169.     flag=1;
  170. else
  171.     flag=0;
  172. IIC_Send_Byte(addr);
  173. if(IICWatask2()!=0)
  174.     flag=1;
  175. else
  176.    flag=0;
  177. IIC_Send_Byte(value);
  178. if(IICWatask2()!=0)
  179.     flag=1;
  180. else
  181.     flag=0;
  182. IIC_Stop();
  183.    return(flag);
  184. }

  185. void GET7745value(unsigned char *p,unsigned char n)   
  186. { unsigned char i;
  187.   unsigned char flagw;
  188.   IIC_Start();
  189.   IIC_Send_Byte(0x90);  
  190.   flagw=IICWatask2();
  191.   IIC_Send_Byte(0x01);
  192.   flagw=IICWatask2();
  193.   IIC_Start();
  194.   IIC_Send_Byte(0x91);
  195.   flagw=IICWatask2();
  196.   for(i=0;i<n;i++)
  197.     { *p=IICRECVbyte();
  198.            if(i!=n-1)
  199.               IICSendask();
  200.            else
  201.               IICSendask();
  202.            p++;
  203.           }
  204.    IIC_Stop();
  205.   }


  206. //        #define CapDacvalue  4.
  207. //        capdacreg=(int)((CapDacvalue*0x7F)/17
  208. //  capdacreg=0x80|capdacre
  209. //  AD7745_RESET(
  210. //  SETUP_7745(0x07,0x80
  211. //  SETUP_7745(0x09,0x2B
  212. //  SETUP_7745(0x0A,0xA1
  213. //  SETUP_7745(0x0B,capdacreg);
  214. //        GET7745value(MRD,3);   
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表