⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads1240test.c

📁 24位AD压力实验板 protell99se打开
💻 C
字号:

#include <msp430x14x.h>
#include"lcd.h" 
#include"init.h"
#include "ADS1240.h"

#define uchar   unsigned char
#define schar   signed char
#define uint    unsigned int
#define ulong   unsigned long

__interrupt void port1(void);
void writetoreg(uchar ad_reg);
void adc_init(void);

union ulonguintuchar {ulong dat1;uint dat2[2];uchar dat4[4];} ad0;
uchar ad_flag;
ulong ad1240,dataa;
float adf;
ulong hex_to_bcd(ulong data)
{
  uchar i,j;
 ulong data1[10],data2=0,data3; 
 for(i=0;i<8;i++)
    {
     data1[i]=data&0x0000000f;
     data=data>>4;
     
     data3=1; 
     if(i!=0)  {
       for(j=0;j<i;j++) 
       data3=data3*16;}
     data2=data3*data1[i]+data2;
    }
//data2=0;
  return data2;
}
//Delay value machine cycle
void Delay(uint value)
{  while(value--);
}

main()
{
uchar i,j;

   WDTCTL=WDTPW+WDTHOLD;//Stop WDT

  /* BCSCTL1&=~XT2OFF;//Start XT2=2.4576M
   do 
   {  IFG1&=~OFIFG;//Clear OSCFault flag
      for(i=0xFF;i>0;i--);//Time for flag to set
   }
   while((IFG1&OFIFG)!=0);//OSCFault flag still set?  
   BCSCTL2|=SELM1;//MCLK = XT2
   BCSCTL2|=SELS;//SMCLK = XT2CLK*/
init_lcd();
   
  I_VDisplay(6,888888); 
   P6OUT&=~BIT1;//RSET LO
   /*
   P6OUT|=BIT4;
   P6DIR|=BIT1+BIT4;//P6.1=RSET,P6.4=DIN
   P6DIR&=~BIT6;//P6.6=DOUT
   P1OUT|=BIT2;
   P1DIR|=BIT2;//P1.2=SCLK
   P1DIR&=~BIT0;//P1.0=DRDY
*/
   P1IES|=BIT0;
   P1SEL&=~BIT0;
   P1IE|=BIT0;
P6DIR|=BIT1;
   P4DIR|=ADS1240_RESET;//rest
   P5DIR|=ADS1240_DIN+ADS1240_SCLK;
   P5DIR&=~ADS1240_DOUT;//P5.2=DOUT  
   //P1DIR|=BIT2;//P1.2=SCLK
   P1DIR&=~BIT0;//P1.0=DRDY
   
   
   
   
   
   for(i=200;i>=1;i--)
   {  for(j=191;j>=1;j--) {;}//6clock 5ms
   }

   adc_init();
   _EINT();

   i=0x00;
star:
   if(ad_flag==1)
   {  ad_flag=0;
      //ad1240=ad0.dat1;
      
      adf=ad0.dat1;
     // ad0.dat1=576767;
      ad1240=0;
      ad1240=ad1240+ad0.dat4[1]<<8;
    // ad1240=ad1240<<8;
      ad1240=ad1240+ad0.dat4[2]<<8;
      ad1240=ad1240 +ad0.dat4[3];
      dataa=hex_to_bcd(ad1240);
      
      //dataa=dataa;
      I_VDisplay(6,dataa);
      i++;
   }
   goto star;
}

void writetoreg(uchar ad_reg)
{  uchar i;
   for(i=8;i>=1;i--)
   { // P1OUT&=~BIT2;//SCLK=0
     P5OUT&=~ADS1240_SCLK;//SCLK=0
        
      if(ad_reg&0x80)
          P5OUT|=ADS1240_DIN;
        //P6OUT|=BIT4;//DIN=1
      else 
        P5OUT&=~ADS1240_DIN;//DIN=0
       // P6OUT&=~BIT4;//DIN=0
      _NOP();_NOP();_NOP();
      ad_reg=ad_reg<<1;
      P5OUT|=ADS1240_SCLK;//SCLK=1
      //P1OUT|=BIT2;//SCLK=1
      _NOP();_NOP();_NOP();
   }
   for(i=15;i>=1;i--) {;}
}

void adc_init(void)
{  uchar i,j;

   P6OUT&=~BIT1;//RSET LO
   //P4OUT&=~ADS1240_RESET;//RSET LO
   Delay(6);//52 cycle
   //P4OUT|=ADS1240_RESET;
   P6OUT|=BIT1;//RSET HI, LO-->HI > 16 clock
   Delay(6);//52 cycle

   while(P1IN&BIT0) {;}
   writetoreg(0x50);//WREG CMD 1
   writetoreg(0x02);//WREG CMD 2
   writetoreg(0x08);//Set PGA 1
   writetoreg(0x01);//MUX AIN0+,AIN1-
   writetoreg(0x06);//ACR 15Hz  0 U/B 0 0 0 0 0 0  U/B=0,Bipolar 1,Unipolar
   for(i=1;i>=1;i--)
   {  for(j=191;j>=1;j--) {;}
   }
   while(P1IN&BIT0) {;}
}

//ADC interrupt
#pragma vector=PORT1_VECTOR
__interrupt void port1(void)
{  uchar i,j;
   if(P1IFG&BIT0)//P1.0(DRDY)=0
   {  ad_flag=1;
      ad0.dat4[0]=0x00;
      writetoreg(0x01);
//ad0.dat4[1]高字节,ad0.dat4[2]中间字节,ad0.dat4[3]低字节
      for(i=1;i<4;i++)
      {  for(j=0;j<8;j++)
         {  //P1OUT&=~BIT2;//SCLK=0
            P5OUT&=~ADS1240_SCLK;//SCLK=0
            ad0.dat4[i]*=2;//ad0.dat4[i]=ad0.dat4[i]<<1;
           // if(P6IN&BIT6) ad0.dat4[i]++;//DOUT 
            if(P5IN&ADS1240_DOUT) ad0.dat4[i]++;//DOUT
             P5OUT|=ADS1240_SCLK;//SCLK=1
            //P1OUT|=BIT2;//SCLK=1
         }
      }
      P1IFG&=~BIT0;//clear IFG
      
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -