自己写了一个msp430 AD转换的程序,可是结果不太正常。模拟输入1.5V时比较准,模拟输入大于或小于1.5V时误差很大,最大能有0.3V,弄了很长时间不明白是怎么回事,请路过的大侠指点下~~~
程序如下:
//********************************************
//功能:AD采样 上位机显示结果
//采样通道======>>6.0
//串口:3.4=>TX 3.5=>RX
//*******************************************
#include<msp430x14x.h>
void delay(int x)
{
for(int i=0;i<80;i++)
for(int j=0;j<x;j++);
}
//********************************************
//功能:上位机显示数据
//********************************************
void serial_tx(double data,int i)
{
char x;
x = (int)data + '0';
while (!(IFG1 & UTXIFG0));
TXBUF0 = x;
while (!(IFG1 & UTXIFG0));
TXBUF0 = '.';
for(int j=0;j<i;j++)
{
data = (data-(int)data)*10;
x = (int)data + '0';
while (!(IFG1 & UTXIFG0));
TXBUF0 = x;
}
while (!(IFG1 & UTXIFG0));
TXBUF0 = '#';
}
//*******************主函数********************
void main(void)
{
double data_AD;
WDTCTL = WDTPW + WDTHOLD;
//////////////////////////////////////////////////////////////////////////
BCSCTL1 &= ~XT2OFF; //开启XT2 8M晶振//
do
{
IFG1 &= ~OFIFG;
for(int i=0xff;i>0;i--);
}
while((IFG1 & OFIFG)!=0);
BCSCTL2 |= SELM_2+SELS;
//////////////////////////////ADC设置/////////////////////////////////////
P6SEL |= 0X01;
ADC12CTL0 = SHT0_2; //4分频
ADC12CTL1 = SHP;
ADC12MCTL0 = SREF_2; //参考电源选择Vr+=AeREF+ 输入通道为6.0
ADC12CTL0 |= ADC12ON + ENC; //开ADC + 允许转换
////////////////////////////////串口初始化////////////////////////////////
P3SEL |= 0x30; // P3.4,5=> TXD/RXD
UCTL0 |= SWRST; // 置1
ME1 |= UTXE0 + URXE0; // 使能
UCTL0 |= CHAR; // 8字节 UART
UTCTL0 |= SSEL0; // 32k
UBR00 = 0x03; // 32K 9600bps
UBR10 = 0x00; // 32K 9600bps
UMCTL0 = 0x4A; // 32K 9600bps 校正s
UCTL0 &= ~SWRST; // 置0
IE1 |= URXIE0; // 允许中断
_EINT();
//////////////////////////////////////////////////////////////////////////
while(1)
{
ADC12CTL0 |= ADC12SC;
while((ADC12IFG&BIT0)==0);
data_AD = ADC12MEM0*3.2/0xfff;
serial_tx(data_AD,3);
delay(5000);
}
}
此帖出自
小平头技术问答
一周热门 更多>