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

📄 mpxa6115a.c

📁 MPXA6115A程序测量大气压强 开发环境是在MSP430单片机下
💻 C
字号:
#include  <msp430x14x.h>
#include  <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned char unchar;
typedef unsigned int unint;
void Init(void);
void delay(void);
void zhh(unint a);

#define num 64
#define uint  unsigned int

unint temp=0; 
unint hexchar(unint cd);
unchar chr[8];//定义输出的字符数组
//unchar chrs[8];


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;    //关闭看门够
  Init();                      //串口初始化
  P1DIR |= BIT2;               //p1.2输出
  P6SEL |= BIT6;               //打开A0通道输入        
  ADC12CTL0 = SHT0_2 + ADC12ON+MSC;     //开ADC12模块+采样信号由SHI仅首次触发
                                        //采样定时器分频系N=4
  ADC12CTL1 = SHP+CONSEQ_2;              //使用采样定时器输出作为采集/转换信号
                                         //单通道重复序列采样模式
  ADC12IE = 0x01;                        //A0通道开中断   
  ADC12CTL0 |= ENC;          ////使能ADC转换                   
  _EINT();
                       
while(1)
{
    ADC12CTL0 |= ADC12SC;  //启动转换
    _BIS_SR(LPM0_bits);       //进入LPM0模式,开总中断允许         
}                
}

#pragma vector=ADC_VECTOR                   //ADC中断服务子程序
__interrupt void ADC12_ISR (void)
{
   static char index=0;                      //中断服务子程序的静态变量
   uint A0result[num];  
   A0result[index++]=ADC12MEM0;            //移动结果送往数组,此操作的同时消除ADC12FIG0
    if(index==num)
   {
     unsigned int i;
     unsigned char j;
     unsigned long A0sum=0; index=0;
     for(i=0;i<num;i++)                    //采集32次
     {
       A0sum+=A0result[i]; 
       
     }
       A0sum>>=6;                       //取平均值
      temp=(int)((A0sum-2020));
      zhh(temp);                           //一位一位取数
      for(j=0;j<8;j++){   
      TXBUF1=chr[j];
      while((UTCTL1&0X01)==0);            //查询等待依次发送完毕
      P1OUT ^=BIT2;                       //P1.2翻转
      delay();
      delay();
      delay();
      }
   }
    
}



void Init(void)
{
  UCTL1 &=~SWRST;     //SWRST复位,USART允许
  UCTL1=0X10+MM;        //地址位模式
  UCTL1=0X10;         //8位数据位,1位停止位,无校验
  UBR01=0X03;         //32768设置波特率为9600bps
  UBR11=0X00;
  UMCTL1=0X51;          //位调整
  UTCTL1=0X10;          //选定ACLK(32KHZ)为时钟源
  ME2 |=0X20;           //UART发送模块允许
  P3SEL=0Xc0;           //p3.6,p3.7由USRT1发送模块占用
  P3DIR=0X40;          //P3.6输出,p3.7输入
  IE2 |=URXIE1;         //接收中断允许
}


void delay(void)                       
{
  unsigned long j;
    for (j = 15000; j > 0; j--); 
}   

//*********************************
//函数名:hexchar
//功能: ASCII转换
//参数:要转换的数字
//返回值:无
//*********************************/
unint hexchar(unint cd)			// ASCII转换
{
      if((cd>=0x00)&&(cd<=0x09)) return(cd+0x30);
	//  else if((cd>=0x41)&&(cd<=0x46))
	 //     return(cd-0x41+10);
	//  else if((cd>=0x0a)&&(cd<=0x0f))
	 //     return(cd+0x61-10);
	  else
	      return(0x0f);
}

/********************************
函数名:zhh
功能: 将数转换成单个字符
参数:要转换的数字
返回值:无
*********************************/

void zhh(unint a)
{
  chr[0]= hexchar(a/100);
  chr[1]=hexchar((a%100)/10);
  chr[2]=0x2e;
  chr[3]=hexchar((a%10)/1);
  chr[4]=0x4b; //K
  chr[5]=0x70; //p
  chr[6]=0x61; //a
  chr[7]=0x0a;  //"\n"

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -