打印

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

[复制链接]
1098|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
必胜客A|  楼主 | 2015-3-9 21:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430F149 AD7705程序 MSP430F149 AD7705程序.zip (22.3 KB)
#include<msp430x24x.h>
#include"ad7705.h"
#define uchar unsigned char
#define uint unsigned int

uint T_Voltage;
char buffle[20];
void AD7705_Write_1_BYTE(uchar Data_byte);
///////////////////////////////////////////
//delay                                  //
///////////////////////////////////////////
void Delayms(uchar ms)
{
  uchar i;
  while(ms--)
  {
    for(i = 0; i < 120; i++);
  }
}
////////////////////////////////////////
//初始化                              //
////////////////////////////////////////
void AD7705_INIT()
{
  char i;
  
  AD7705_Write_1_BYTE(0xff);/*复位AD7705 32个周期*/
  AD7705_Write_1_BYTE(0xff);
  AD7705_Write_1_BYTE(0xff);
  AD7705_Write_1_BYTE(0xff);
  AD7705_Write_1_BYTE(0xff);
  for(i=0;i<=10;i++)                                                                        
  {_NOP();}
  AD7705_Write_1_BYTE(0x20);/* 选择时钟寄存器 */
  for(i=0;i<=10;i++)                                                                        
  {_NOP();}
  AD7705_Write_1_BYTE(0x04);/* master clock, 2.4576MHz, 50Hz*/
  for(i=0;i<=10;i++)                                                                        
  {_NOP();}
  AD7705_Write_1_BYTE(0x10);/* 一通道,选择setup寄存器 */
  for(i=0;i<=10;i++)                                                                        
  {_NOP();}
  AD7705_Write_1_BYTE(0x44);/*增益1,单极性 */
  for(i=0;i<=10;i++)                                                                        
  {_NOP();}
  drdy_in; //MCU 相应IO 口方向改为输入,以便检测drdy 的状态
  _NOP();
  while(drdy_get){}; //等待drdy 变低,变低表明数据寄存器有新的有效数据
  drdy_out; //MCU 相应IO 口方向改为输出
}

/////////////////////////////////////////
//写函数                               //
/////////////////////////////////////////
void AD7705_Write_1_BYTE(uchar Data_byte)/*8位,从高到低*/
{
  uchar i;
  
  AD7705_CS_LOW();
  _NOP();_NOP();_NOP();
  AD7705_CLK_HIGH();
  _NOP();_NOP();_NOP();
  for(i = 0; i < 8; i++)
  {
    if(Data_byte & 0x80 == 1)
      AD7705_IN_HIGH();
    else
      AD7705_IN_LOW();
   
    AD7705_CLK_LOW();
    _NOP();_NOP();_NOP();
    AD7705_CLK_HIGH();
    _NOP();_NOP();_NOP();
   
    Data_byte <<= 1;
    _NOP();_NOP();_NOP();
  }
  _NOP();
  _NOP();
  AD7705_CS_HIGH();
}

/////////////////////////////////////
//读函数                           //
/////////////////////////////////////
uchar AD7705_Read_1_BYTE()   
{
  uchar i,Data_read;

  AD7705_CS_LOW();
  _NOP();_NOP();_NOP();
  drdy_in;
  while(drdy_get){};
  drdy_out;
  AD7705_CLK_HIGH();
  _NOP();_NOP();_NOP();
  
  for(i = 0; i < 8; i++)
  {
    AD7705_CLK_LOW();
    _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
    Data_read <<= 1;
    if(AD7705_DOUT)
      Data_read |= 0x01;
    else
      Data_read &= 0xfe;
    _NOP();_NOP();_NOP();
    AD7705_CLK_HIGH();
    _NOP();_NOP();_NOP();
  }
  _NOP();_NOP();_NOP();
  AD7705_CS_HIGH();
  _NOP();_NOP();_NOP();
  //AD7705_DRDY_HIGH();
  return(Data_read);
}
////////////////////////////////////
//电压                            //
////////////////////////////////////
void AD7705_Data_Process()
{
  uchar MSB_Data,LSB_Data;
  AD7705_Write_1_BYTE(0x38);/*选择数据寄存器 */
  MSB_Data = AD7705_Read_1_BYTE();
  LSB_Data = AD7705_Read_1_BYTE();
  T_Voltage = (uint)MSB_Data*256 + (uint)LSB_Data;
}
///////////////////////////////////////////
//main                                   //
///////////////////////////////////////////
void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  //P2DIR |= BIT0;       /*AD7705_DRDY*/
  P4DIR = 0x07;        /*AD7705_DOUT=0、AD7705_IN=1、AD7705_CS=1、AD7705_CLK=1*/
  
  AD7705_INIT();

  while(1)
  {
    AD7705_Data_Process();
    Delayms(50);  
  }
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

176

帖子

2

粉丝