📄 3.c
字号:
#include <msp430x14x.h>
#include "lcd.h"
#include "init.h"
#include "ADS1240.h"
#include "uart.h"
#include "24C64.h"
#include "Key.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;
float adf;
//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
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;
Open_AD_Power();
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;
i++;
}
goto star;
}
void writetoreg(uchar ad_reg)
{ uchar i;
for(i=8;i>=1;i--)
{ P5OUT&=~ADS1240_SCLK;//SCLK=0
if(ad_reg&0x80) P5OUT|=ADS1240_DIN;//DIN=1
else P5OUT&=~ADS1240_DIN;//DIN=0
_NOP();_NOP();_NOP();
ad_reg=ad_reg<<1;
P5OUT|=ADS1240_SCLK;//SCLK=1
_NOP();_NOP();_NOP();
}
}
void adc_init(void)
{ uchar i,j;
ADS1240Init();
P4OUT&=~ADS1240_RESET;//RSET LO
Delay(6);//52 cycle
P4OUT|=ADS1240_RESET;//RSET HI, LO-->HI > 16 clock
Delay(6);//52 cycle
while(P1IN&BIT0) {;}
writetoreg(0x50);//WREG CMD 1
writetoreg(0x02);//WREG CMD 2
writetoreg(0x00);//Set PGA 1
writetoreg(0x01);//MUX AIN0+,AIN1-
writetoreg(0x00);//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++)
{ P5OUT&=~ADS1240_SCLK;//SCLK=0
ad0.dat4[i]*=2;//ad0.dat4[i]=ad0.dat4[i]<<1;
if(P5IN&ADS1240_DIN) ad0.dat4[i]++;//DOUT
P5OUT|=ADS1240_SCLK;//SCLK=1
}
}
P1IFG&=~BIT0;//clear IFG
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -