网站公告列表     本站开通全国范围代收货款业务,详情请点击  [dycxin  2008年5月14日]        
加入收藏
设为首页
联系站长
您现在的位置: EDA加油站 >> MSP430 >> MSP430巩固 >> 正文
  [推荐]MSP430F149 AD源程序          【字体:
MSP430F149 AD源程序
MSP430F149 AD源程序
作者:佚名    MSP430来源:不详    点击数:    更新时间:2007-8-4    

 

点击下载:MSP430F149 AD源程序

i nclude <MSP430x14x.h>

 

 

#define ADCMEM ((int *) 0x0140)           //ADC12MEMx定义

 

void InitSYS(void);  

void InitUST0(void);                     //初始化系统及ADC寄存器

void InitUST1(void);

void InitADC(void);  

void SetZero(void);

int  GetBusData(void);

void SetBusData(int busvdata);

void SendRomCode(void);

void Averege(void);

void Filter(void);

void Analysis(void);

void Delay(int delaydata);

interrupt[ADC_VECTOR] void ADC12(void);

interrupt[USART1RX_VECTOR] void USART1(void);

 

unsigned char savEDAta[1500];

unsigned char saveromdata[7];

unsigned char enddata[3];

unsigned int adtime;

unsigned int recromok;

unsigned int ave; 

unsigned int datai;

unsigned int vdata; 

unsigned int time;    

               

void main(void)                                            //使用中断方式 

{

  unsigned int i,busvdata,low,hi,ldata;

  InitSYS();

  InitUST0();

  InitUST1();

  InitADC();

  P1DIR |= 0x20;

  P1DIR |= 0x1c;  //p1.4 p1.3 p1.2

  P1OUT |= BIT4;

  SetZero();   //设置x9015到零

  for(i=0;i<30000;i++)

   {  _NOP(); }    //wait to sample

  busvdata=GetBusData();  //

  while(1)

  {

    SetBusData(busvdata);

    busvdata=GetBusData();

    if(busvdata<150)

      {  break; }

  } 

  IE2 |=URXIE1;  

  while(1)

  {

      // for(time=0;time<256;time++)

      // {

        //IE2 |=URXIE1;

        //low=time;

        recromok=0; 

        while(recromok!=1);

        SendRomCode();

        for(i=0;i<6500;i++)

          {  _NOP(); }    //wait to sample

        ADC12CTL0 |= 0x02;

        ADC12CTL0 |= 0x01; //start AD

        adtime=0;

        while(1)

        {   

            if(adtime>1500)

            {

              ADC12CTL0 &= ~0x02;

              Filter(); 

              Averege();

              Analysis();

              for(i=0;i<3;i++)

                 { 

                  U1TXBUF = enddata[i];

                  while((U1TCTL&0x01)==0);

                 }            

          /* if(enddata[0]==0x11)  

            {

               for(i=0;i<1500;i++)

                 {

                  //ldata = savEDAta[i];

                  //low = ldata | 0x00; 

                 

                  U1TXBUF = savEDAta[i];//low;

                  while((U1TCTL&0x01)==0);

                  U1TXBUF = 0x00;;//low;

                  while((U1TCTL&0x01)==0);  

           

                  //ldata = ldata>>8;

                  //hi = ldata | 0x00;

                  //U1TXBUF = hi;

                 // while((U1TCTL&0x01)==0);  

                  }

              } */

              break; 

            } 

         //}          

       }

   }

}

 

void SetZero(void)

{

  int i;

  P1OUT &= ~BIT4;   //cs

  P1OUT &= ~BIT3;   //u/d

  for(i=0;i<64;i++)

  {      

     P1OUT ^= BIT2;   //inc

   }

  P1OUT |= BIT4;   //cs

}

      

int GetBusData(void)

{

     unsigned char vdata1,vdata2;//,vdata;

     adtime=0;

     ADC12CTL0 |= 0x02;

     ADC12CTL0 |= 0x01; //start AD

     while(1)

     {

        if(adtime>20)

          {

            ADC12CTL0 &= ~0x02;

            break;

          }

      }

        //计算

      vdata1=(savedata[0]+savedata[1]+savedata[2]+savedata[3]+savedata[4]+savedata[5]+savedata[6]+savedata[7]+savedata[8]+savEDAta[9])/10;

      vdata2=(savedata[10]+savedata[11]+savedata[12]+savedata[13]+savedata[14]+savedata[15]+savedata[16]+savedata[17]+savedata[18]+savEDAta[19])/10;

      vdata=(vdata1+vdata2)/2;   

      return(vdata);

}     

void SetBusData(int busvdata)

{   

      int i;

      unsigned int temp;

      unsigned int movetime;

      if(busvdata>150)

       {

         temp=busvdata-150;

         movetime=(temp*20*3)/256/3;

         P1OUT &= ~BIT4;   //cs

         P1OUT |= BIT3;   //u/d

         for(i=0;i<movetime+1;i++)

          {      

           P1OUT ^= BIT2;   //inc

          }

         P1OUT |= BIT4;   //cs  

       }                  

}    

 

void SendRomCode(void)

{       

     U0TXBUF = saveromdata[6];

     while((U0TCTL&0x01)==0);

     U0TXBUF = saveromdata[5];

     while((U0TCTL&0x01)==0);

     U0TXBUF = saveromdata[4];

     while((U0TCTL&0x01)==0);

     U0TXBUF = saveromdata[3];

     while((U0TCTL&0x01)==0);

     U0TXBUF = saveromdata[2];

     while((U0TCTL&0x01)==0);

     U0TXBUF = saveromdata[1];

     while((U0TCTL&0x01)==0);

}

 

void Filter(void)

{

           unsigned int i,j,m,a[3],ldata;

           for(i=0;i<1500;i++)

              {

                  a[0]=savEDAta[i];

                  a[1]=savEDAta[i+1];

                  a[2]=savEDAta[i+2];

                  for(j=0;j<2;j++)

                   {

                      for(m=1;m<3;m++)

                        {

                           if(a[m]>a[j])

                             {

                               ldata=a[j];

                               a[j]=a[m];

                               a[m]=ldata;

                              }

                      

                        }  

                   }

                  savEDAta[i]=a[1];        

             } 

}

 

void Averege(void)//52015个得到总线电压值

{

  unsigned int i,he;

  he=0;

  for(i=20;i<30;i++)

   {

     he=he+savEDAta[i];

    }

  ave=he/10;  

}

 

MSP430录入:dycxin    责任编辑:dycxin 
  • 上一篇MSP430:

  • 下一篇MSP430:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    高性价比的MSP430应用系统结…
    MSP430的程序框架
    MSP430与PCF8576驱动程序
    MSP430F149实现读单路单次A7…
    MSP430F149中ADC12应用举例
    基于MSP430的零序直流小电流…
    基于MSP430的网络化视频监控…
    基于单片机和DSP的被动声目标…
    ISP技术与Internet结合的应用…
    基于GPS和GPRS的小型追踪器
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    EDA加油站|我要EDA网|山东电子网--东营市荣燕商贸有限公司版权所有! 站长:阿荣
    联系电话:0546-7870320,13371507828 电邮:51edacn@163.com
    山东东营西城济南路百祥电脑商城B302室 邮编:257000 鲁ICP备07018763号  鲁ICP备07000091号 鲁ICP备05003434号
    公司帐号:1615011209000037682 户名:东营市荣燕商贸有限公司 开户行:工行西城支行石油大学分理处