MSP430F149驱动ADS1216代码

2019-07-26 18:30发布

#include <msp430x14x.h>

#define uint unsigned int
#define uchar unsigned char

#define DIN_H P2OUT|=0X10 //ads1216数据输入,MSP430输出
#define DIN_L P2OUT&=0XEF
#define SCLK_H P2OUT|=0X20  
#define SCLK_L P2OUT&=0XDF
#define CS_H P2OUT|=0X40
#define CS_L P2OUT&=0XBF
#define DRDY P2IN&BIT7
#define DOUT P2IN&BIT3      //ads1216数据输出,MSP430输入

const uchar Data[19]={0x3F,0x06,0x5B,0x4F,//0,1,2,3
                         0x66,0x6D,0x7D,0x07,//4,5,6,7
                         0x7F,0x6F,0x77,0x7C,//8,9,A,b
                         0x39,0x5E,0x79,0x71,//C,d,E,F
                         0x40,0x76,0x00};//-,H,全灭
const uint Add[7]={0x0800,0x0900,0x0a00,0x0b00,0x0c00,0x0d00,0x0e00};


void write_byte(uchar wdata);
/*******************************************
函数名称:delay_1us
功    能:延时参数倍us
参    数:delay
返回值  :无
********************************************/
void delay_10us(uint delay)
{
  while(delay--)
     _NOP();
}
/*******************************************
函数名称:point_init
功    能:I/O口方向初始化
参    数:无
返回值  :无
********************************************/
void point_init()
{
  P5DIR = 0Xff;   //P5口接LED灯,全部为输出,8个LED灯
  P4DIR = 0X80;   //P4.7接LED灯,方向为输出;其他全部接按键,共七个按键,按键为输入
  P2DIR = 0X70;   //


}
/*******************************************
函数名称:write_ch451
功    能:对ch451写数据
参    数:写入的数据
返回值  :无
********************************************/
void write_ch451(uint data)
{
  uchar i;
  P6OUT&=~BIT0;
  
  for(i=0;i<12;i++)
  {
    if(data&1)
      P6OUT|=BIT1;
    else P6OUT&=~BIT1;
   
    P6OUT&=~BIT2;
    data=data>>1;
    P6OUT|=BIT2;
  }
  P6OUT|=BIT0;
}
/*******************************************
函数名称:init_ch451
功    能:对ch451初始化
参    数:无
返回值  :无
********************************************/
void init_ch451()
{  
  P6DIR |= 0x07;//设置P6的第三位为输出
  P6OUT&=~BIT1;//DAIN输出低脉冲,通知CH451使能4线串行接口
  P6OUT|=BIT1;
  
  write_ch451(0x0201);//芯片内部复位
  write_ch451(0x0401);//设置为显示,关闭看门狗、键盘等
  write_ch451(0x0570);//设置显示参数
}
/*******************************************
函数名称:display_ch451
功    能:显示七位数据
参    数:无
返回值  :无
********************************************/
void display_ch451()
{
  write_ch451(Add[0]|Data[7]);//加载字数据;
  write_ch451(Add[1]|Data[6]);
  write_ch451(Add[2]|Data[5]);
  write_ch451(Add[3]|Data[4]);
  write_ch451(Add[4]|Data[3]);
  write_ch451(Add[5]|Data[2]);
  write_ch451(Add[6]|Data[1]);
}
/*******************************************
函数名称:clocl_init
功    能:系统时钟初始化
参    数:无
返回值  :无
********************************************/
void clock_init()
{
  BCSCTL1 = 0xc7;           //XT1CLK,0分频.时钟频率为4MHz
}
/*******************************************
函数名称:start_ad1216
功    能:开始启动AD1216
参    数:无
返回值  :无
********************************************/
void start_ad1216()
{
  CS_L;    //CS接低电平,使能
  _NOP();
  SCLK_H;
  _NOP();
  write_byte(0x51);   //
  write_byte(0x00);   //
// write_byte(0x0e);   //
  write_byte(0x34);   //

}
/*******************************************
函数名称:write1
功    能:给AD1216写1
参    数:无
返回值  :无
********************************************/
void write1()
{
  DIN_H;
  _NOP();
  SCLK_L;
  _NOP();
  SCLK_H;
  _NOP();
}
/*******************************************
函数名称:write0
功    能:给AD1216写0
参    数:无
返回值  :无
********************************************/
void write0()
{
  DIN_L;
  _NOP();
  SCLK_L;
  _NOP();
  SCLK_H;
  _NOP();
}
/*******************************************
函数名称:write_byte
功    能:给AD1216写一个字节
参    数:无
返回值  :无
********************************************/
void write_byte(uchar wdata)
{
  uchar i=0;
  for(i=0;i<8;i++)
  {
    if(wdata & 0x80)write1();
    else  write0();
    wdata <<= 1;
  }
  _NOP();
}
/*******************************************
函数名称:read_8bit
功    能:读8位数据
参    数:无
返回值  :所读数据
********************************************/
uchar read_8bit()
{
  uchar  i,rdata_8bit;
  uchar flag;
  for(i=0;i<8;i++)
  {
      SCLK_L;
      _NOP();
      SCLK_H;
      _NOP();
      flag = DOUT;
      rdata_8bit <<= 1;
      if(flag)rdata_8bit |= 0x01;
      _NOP();
  }
  return rdata_8bit;
}
/*******************************************
函数名称:read_24bit
功    能:读24位数据
参    数:转换后数据存储的地址
返回值  :无
********************************************/
void read_24bit(uchar *rdata)
{
  uchar  i,j;
  uchar flag;
  for(j=0;j<3;j++)
    for(i=0;i<8;i++)
    {
      SCLK_L;
      _NOP();
      SCLK_H;
      _NOP();
      flag = DOUT;
      rdata[j] <<= 1;
      if(flag)rdata[j] |= 0x01;
      _NOP();
     }
}
/*******************************************
函数名称:ad1216
功    能:ad转换函数
参    数:转换数据的地址
返回值  :无
********************************************/
void ad1216(uchar *ad_data)
{
  
  write_byte(0x01);     //读数据命令
  _NOP();
  _NOP();
  _NOP();
  read_24bit(ad_data);
}
/*******************************************
函数名称:main
功    能:主函数
参    数:无
返回值  :无
********************************************/
void main( void )
{
//   uchar ad[3]={0x00,0x00,0x00};
    uchar ad_8bit=0xff;
    WDTCTL = WDTPW + WDTHOLD;           //关狗
    clock_init();               //系统时钟初始化
    point_init();               //端口初始化
   
    init_ch451();               //数码管驱动CH451初始化
    display_ch451();            //显示
    while(1)
    {
        P5OUT = 0X00;
        
        CS_L;    //CS接低电平,使能
        _NOP();
        SCLK_H;
        _NOP();
        
        write_byte(0x50);
        write_byte(0x00);
        write_byte(0x11);
        _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
        
        
        
        write_byte(0x11);
        write_byte(0x00);
        _NOP();_NOP();_NOP();
        ad_8bit=read_8bit();
        
        
    //    while(DRDY)ad1216(ad);
        
       write_ch451(Add[0]|Data[ad_8bit&0x0f]);
       write_ch451(Add[1]|Data[(ad_8bit>>4)&0x0f]);
      
    //    write_ch451(Add[2]|Data[ad[1]&0x0f]);
    //    write_ch451(Add[3]|Data[(ad[1]>>4)&0x0f]);
    //    write_ch451(Add[4]|Data[ad[2]&0x0f]);
    //    write_ch451(Add[5]|Data[(ad[2]>>4)&0x0f]);
        
    }
   
}
0条回答

一周热门 更多>