【TI 技术资料分享】+MSP430F149 AD7705程序

2019-07-30 18:16发布

MSP430F149 AD7705程序 MSP430F149 AD7705程序.zip (22.3 KB, 下载次数: 14) 2015-3-9 21:44 上传 点击文件名下载附件
  1. #include<msp430x24x.h>
  2. #include"ad7705.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uint T_Voltage;
  6. char buffle[20];
  7. void AD7705_Write_1_BYTE(uchar Data_byte);
  8. ///////////////////////////////////////////
  9. //delay                                  //
  10. ///////////////////////////////////////////
  11. void Delayms(uchar ms)
  12. {
  13.   uchar i;
  14.   while(ms--)
  15.   {
  16.     for(i = 0; i < 120; i++);
  17.   }
  18. }
  19. ////////////////////////////////////////
  20. //初始化                              //
  21. ////////////////////////////////////////
  22. void AD7705_INIT()
  23. {
  24.   char i;
  25.   
  26.   AD7705_Write_1_BYTE(0xff);/*复位AD7705 32个周期*/
  27.   AD7705_Write_1_BYTE(0xff);
  28.   AD7705_Write_1_BYTE(0xff);
  29.   AD7705_Write_1_BYTE(0xff);
  30.   AD7705_Write_1_BYTE(0xff);
  31.   for(i=0;i<=10;i++)                                                                        
  32.   {_NOP();}
  33.   AD7705_Write_1_BYTE(0x20);/* 选择时钟寄存器 */
  34.   for(i=0;i<=10;i++)                                                                        
  35.   {_NOP();}
  36.   AD7705_Write_1_BYTE(0x04);/* master clock, 2.4576MHz, 50Hz*/
  37.   for(i=0;i<=10;i++)                                                                        
  38.   {_NOP();}
  39.   AD7705_Write_1_BYTE(0x10);/* 一通道,选择setup寄存器 */
  40.   for(i=0;i<=10;i++)                                                                        
  41.   {_NOP();}
  42.   AD7705_Write_1_BYTE(0x44);/*增益1,单极性 */
  43.   for(i=0;i<=10;i++)                                                                        
  44.   {_NOP();}
  45.   drdy_in; //MCU 相应IO 口方向改为输入,以便检测drdy 的状态
  46.   _NOP();
  47.   while(drdy_get){}; //等待drdy 变低,变低表明数据寄存器有新的有效数据
  48.   drdy_out; //MCU 相应IO 口方向改为输出
  49. }

  50. /////////////////////////////////////////
  51. //写函数                               //
  52. /////////////////////////////////////////
  53. void AD7705_Write_1_BYTE(uchar Data_byte)/*8位,从高到低*/
  54. {
  55.   uchar i;
  56.   
  57.   AD7705_CS_LOW();
  58.   _NOP();_NOP();_NOP();
  59.   AD7705_CLK_HIGH();
  60.   _NOP();_NOP();_NOP();
  61.   for(i = 0; i < 8; i++)
  62.   {
  63.     if(Data_byte & 0x80 == 1)
  64.       AD7705_IN_HIGH();
  65.     else
  66.       AD7705_IN_LOW();
  67.    
  68.     AD7705_CLK_LOW();
  69.     _NOP();_NOP();_NOP();
  70.     AD7705_CLK_HIGH();
  71.     _NOP();_NOP();_NOP();
  72.    
  73.     Data_byte <<= 1;
  74.     _NOP();_NOP();_NOP();
  75.   }
  76.   _NOP();
  77.   _NOP();
  78.   AD7705_CS_HIGH();
  79. }

  80. /////////////////////////////////////
  81. //读函数                           //
  82. /////////////////////////////////////
  83. uchar AD7705_Read_1_BYTE()   
  84. {
  85.   uchar i,Data_read;

  86.   AD7705_CS_LOW();
  87.   _NOP();_NOP();_NOP();
  88.   drdy_in;
  89.   while(drdy_get){};
  90.   drdy_out;
  91.   AD7705_CLK_HIGH();
  92.   _NOP();_NOP();_NOP();
  93.   
  94.   for(i = 0; i < 8; i++)
  95.   {
  96.     AD7705_CLK_LOW();
  97.     _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
  98.     Data_read <<= 1;
  99.     if(AD7705_DOUT)
  100.       Data_read |= 0x01;
  101.     else
  102.       Data_read &= 0xfe;
  103.     _NOP();_NOP();_NOP();
  104.     AD7705_CLK_HIGH();
  105.     _NOP();_NOP();_NOP();
  106.   }
  107.   _NOP();_NOP();_NOP();
  108.   AD7705_CS_HIGH();
  109.   _NOP();_NOP();_NOP();
  110.   //AD7705_DRDY_HIGH();
  111.   return(Data_read);
  112. }
  113. ////////////////////////////////////
  114. //电压                            //
  115. ////////////////////////////////////
  116. void AD7705_Data_Process()
  117. {
  118.   uchar MSB_Data,LSB_Data;
  119.   AD7705_Write_1_BYTE(0x38);/*选择数据寄存器 */
  120.   MSB_Data = AD7705_Read_1_BYTE();
  121.   LSB_Data = AD7705_Read_1_BYTE();
  122.   T_Voltage = (uint)MSB_Data*256 + (uint)LSB_Data;
  123. }
  124. ///////////////////////////////////////////
  125. //main                                   //
  126. ///////////////////////////////////////////
  127. void main()
  128. {
  129.   WDTCTL = WDTPW + WDTHOLD;
  130.   //P2DIR |= BIT0;       /*AD7705_DRDY*/
  131.   P4DIR = 0x07;        /*AD7705_DOUT=0、AD7705_IN=1、AD7705_CS=1、AD7705_CLK=1*/
  132.   
  133.   AD7705_INIT();

  134.   while(1)
  135.   {
  136.     AD7705_Data_Process();
  137.     Delayms(50);  
  138.   }
  139. }
复制代码

0条回答

一周热门 更多>