⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f148-max1301.c

📁 该代码是我在一次项目开发中使用美信最新的AD采集芯片MAX1301所写的MSP430单片机程序
💻 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 + -