📄 ads1240test.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 + -