可以采到24位数字量,但是和实际的输入电压不符,并且当所测电压不变时,所得到的数字量也会改变,并且改变幅度很大。
如果是程序的问题,应该如何修改?
源代码如下:
#include <msp430f169.h>
#define DRDY P5IN & BIT2
#define CLK_H P5OUT |= BIT1
#define CLK_L P5OUT &= ~BIT1
#define SDIO_H P5OUT |= BIT0
#define SDIO_L P5OUT &= ~BIT0
#define SDOUT P5IN & BIT3
#define SDIO P5IN & BIT0
#define SDIO_OUT P5DIR |= BIT0
#define SDIO_IN P5DIR &= ~BIT0
unsigned char Data,Data_H,Data_M,Data_L,RData,j,temp,i;
void write1()
{
CLK_H;
_NOP();
SDIO_H;
CLK_L;
_NOP();
}
void write0()
{
CLK_H;
_NOP();
SDIO_L;
CLK_L;
_NOP();
}
void SendData(unsigned char Data)
{
int Data_a;
for(i=0;i<8;i++)
{
Data_a = Data & 0x80;
if(Data_a) write1();
else write0();
Data <<= 1;
}
}
unsigned char ReceiveData()
{
for(j=0;j<8;j++)
{
CLK_H;
_NOP();
RData <<= 1;
if(SDIO) RData |= 0x01;
CLK_L;
_NOP();
}
return (RData);
}
void ADSInit()
{
Data = 0x26;
SendData(Data);
for(i=0;i<6;i++) _NOP();
Data = 0x07;
SendData(Data);
Data = 0xA0;
SendData(Data);
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P5DIR &= 0XFB;
P5DIR |= 0X03;
CLK_L;
while(1)
{
while(DRDY);
for(i=0;i<6;i++) _NOP();
ADSInit();
CLK_L;
_NOP();
while(!DRDY);
while(DRDY);
Data = 0xC0;
SendData(Data);
for(i=0;i<6;i++) _NOP();
SDIO_IN;
Data_H = ReceiveData();
Data_M = ReceiveData();
Data_L = ReceiveData();
SDIO_OUT;
for(i=0;i<20;i++) _NOP();
while(!DRDY);
}
return 0;
}