📄 msp430f148-max1301.c
字号:
float V1; //定义AD采样结果寄存器,采样后读这个结果即为所选通道的模拟电压值
long R_word_tab[5]; //过采样暂存数组
unsigned int R_word; //单次采样结果寄存器
unsigned int R_wordH; //单次采样结果寄存器高位
unsigned int R_wordL; //单次采样结果寄存器低位
void adc_result(int chl);
/********************************
MAX1301高精度16为模数转换器单次采样函数,输入参数为0~3四个通道,
采样结果储存在R_word寄存器中
*************************************/
void adc_spi(int word)
{
int Tamp;
Tamp=(word<<4)+0x80;
P5OUT &= ~0x1; // FS reset
TXBUF1 = Tamp;
while(!(U1TCTL & TXEPT));
TXBUF1 = 0x0;
while(!(U1TCTL & TXEPT));
TXBUF1 = 0x0;
R_wordH=0x0;
while(!(U1TCTL & TXEPT));
R_wordH=RXBUF1;
while(!(U1TCTL & TXEPT));
TXBUF1 = 0x0;
R_wordL=0x0;
while(!(U1TCTL & TXEPT));
R_wordL=RXBUF1;
R_word= (R_wordH<<8)+ R_wordL;
P5OUT |= 0x1; // FS set
}
/**********************************
初始化UART1为SPI工作模式,设置频率为200K,8位数据位,
并采用XT2为主系统时钟
***********************************/
void adc_spi_init(void)
{
P5SEL |= 0x0E; // P5.1,2,3 SPI option select
P5DIR |= 0xB; // P5.0,1,3 output direction
P5OUT |= 0x1;
ME2 |= USPIE1; // Enable USART1 SPI
UCTL1 |= CHAR + SYNC + MM; // 8-bit SPI Master **SWRST**
UTCTL1 = CKPH + SSEL1 + STC; // Inv. delayed, ACLK, 3-pin
UBR01 = 0x2; // ACLK/2 for baud rate
UBR11 = 0x0; // ACLK/2 for baud rate
UMCTL1 = 0x0; // Clear modulation
UCTL1 &= ~SWRST; // Initialize USART state machine
}
/**********************************
MAX1301高精度16为模数转换器接口函数,输入参数为0~3四个通道,
对输入通道实行多次采样并将采样结果计算成实际电压值储存在V1寄存器中
***********************************/
void adc_result(int chl)
{
volatile unsigned int i;
float Ftemp=0;
V1=0;
Ftemp=0;
for (i = 0; i <5; i++)
{
adc_spi(chl);
R_word_tab[i]=(long)R_word-0x800e;
}
for (i = 0; i <5; i++)
{
Ftemp+=(float)R_word_tab[i]/65536;
}
Ftemp=Ftemp/5;
V1=Ftemp*24;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -