目前使用的是MSP430F6779模块,测试其24位AD模块,使用时发现很大问题,输入为电压为0时,结果寄存器仍然有值,100nf电容已接,代码是在官方例程上修改的,代码如下。
#include <msp430.h>
#include <string.h>
#include "stdlib.h"
#include <stdio.h>
/* Unsigned integer to store SD24_B conversion result */
long results;
char send[12];
void initUART()
{ UCSCTL6 &= ~(XT1OFF); // XT1 On
UCSCTL6 |= XCAP_1; // Internal load cap
// Loop until XT1 fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG);
UCSCTL6 &= ~(XT1DRIVE_3);
// Configure USCI_A0 for UART mode
UCA0CTLW0 = UCSWRST; // Put eUSCI in reset
UCA0CTLW0 |= UCSSEL__SMCLK; // CLK = SMCLK bode率 115200
UCA0BRW = 8;
UCA0MCTLW = 0xD600; // UCBRSx = 0x92, UCOS16 = 0
UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI
}
void send_buf( long ptr) //AD数据无线发送
{
int i =0;
sprintf(send,"%ld",ptr); //将AD数值转化为字符串进行无线发送
while(send[i] != '\0')
{
UCA0TXBUF = send[i];
while(!(UCA0IFG&UCTXIFG));
i++;
__delay_cycles(5000);
}
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
initUART();
P3SEL0 |= BIT0 + BIT1; // Set P3.0, P3.1 to non-IO
P3DIR |= BIT0 + BIT1; // Enable UCA0RXD, UCA0TXD
P5DIR |= BIT0; //指示灯
P1DIR |= BIT0; //P1 输出测试高电压
P1OUT |= BIT0;
SD24BCTL0 = SD24REFS | SD24SSEL_1; // Select internal REF
// Select SMCLK as SD24_B clock source
SD24BCCTL6 |= SD24SNGL; // Single conversion
SD24BINCTL6 |= SD24INTDLY0; // Interrupt on 3rd sample
SD24BIE |= SD24IE6; // Enable channel 2 interrupt
__delay_cycles(0x3600); // Delay for 1.5V REF startup
__bis_SR_register( GIE); // Enter LPM0 w/ interrupts
while (1)
{ P5OUT ^= BIT0; //运行闪烁指示灯
SD24BCCTL6 |= SD24SC; // Set bit to start conversion
send_buf(results);// ad值发送
__delay_cycles(500000);
UCA0TXBUF = '\r';//换行符
}
}
#pragma vector=SD24B_VECTOR
__interrupt void SD24BISR(void)
{
switch (SD24BIV)
{
case SD24BIV_SD24OVIFG: // SD24MEM Overflow
break;
case SD24BIV_SD24TRGIFG: // SD24 Trigger IFG
break;
case SD24BIV_SD24IFG0: // SD24MEM0 IFG
break;
case SD24BIV_SD24IFG1: // SD24MEM1 IFG
break;
case SD24BIV_SD24IFG6: // SD24MEM2 IFG
results = SD24BMEMH6; // Save CH2 results (clears IFG)
results = (results << 16) | SD24BMEML6; // Concatenate lower and upper words
break;
default:break;
}
}






