4014|9

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

新人求助!!!求大神们帮帮忙 [复制链接]

想写一个程序,采用的芯片是MSP430f5438a,想利用ADC12采集12路数据,并通过串口发送到串口助手上,下面的程序不知道应该要怎么改
#include
#define U8      unsigned char
U8 RX_DATA = 0;
U8 TX_DATA[77] = {0};
U8 EN_ADC12 = 0;
U8 SPI_RX_DATA = 0;
U8 uart1_RX_DATA[24] = {0};
U8 uart1_RX_DATA_count = 0;

U8 TX_DATA_TEMP[48] = {0};
U8 TX_DATA_TEMP_count = 0;

void clk_init()
{   
     P5SEL |= BIT4 + BIT5;
     
     UCSCTL6 &= ~(XT1OFF);          //使能XT1
     UCSCTL6 |= XCAP_3;              //选择内部负载电容12pF
     UCSCTL0 = 0x0000;              //将DCOx和MODx设为最低
     UCSCTL6 &= ~(XT1DRIVE_3);       //减少XT1驱动能力,降低功耗
     UCSCTL3 = SELREF_0 + FLLREFDIV_1;  //FLL模块参考时钟源选择XT1CLK
                                        //参考时钟分频器
    //测试晶振是否产生故障失效,并清除故障失效标志位
     do
     {
          UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
          SFRIFG1 &= ~OFIFG;
     }while (SFRIFG1&OFIFG);
     __bis_SR_register(SCG0);           //禁止FLL
     UCSCTL1 = DCORSEL_3;              //选择DCO频率范围
     UCSCTL2 = 249;               //设置DCO频率为8MHz
                                 //计算公式:(249 + 1) * 32768 = 8MHz  
     __bic_SR_register(SCG0);     //启用FLL
     UCSCTL4 |= SELS_0;   //SMCLK时钟来源XT1晶振
     __delay_cycles(250000);
}           
              
           
void adc_init()
{           
     P6SEL = 0x01;
     ADC12CTL0 = ADC12ON + ADC12SHT0_12+ADC12MSC; //打开ADC,设置采样时间
     ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1+ADC12DIV_0+ADC12SSEL_3; //序列通道单次
     ADC12MCTL0 |= ADC12INCH_1;   
     ADC12IE = 0x01;              //使能ADC12IFG.0中断
     
     ADC12CTL0 |= ADC12ENC;         //使能转换
     ADC12CTL0 |= ADC12SC;    //开始采样转换
            
}   
     
     
void uart1()
{   
     WDTCTL = WDTPW + WDTHOLD;    //关闭看门狗
     P3SEL = BIT3 + BIT4;
     //UCA0CTL1 |= UCSWRST;
     UCA0CTL1 |= UCSSEL_2;                 // SMCLK 为系统时钟  1048576HZ
     UCA0BR0 = 9;                       //波特率115200
     UCA0BR1 = 0;                       
     UCA0MCTL |= UCBRS_1 + UCBRF_0;        
     UCA0CTL1 &= ~UCSWRST;
     UCA0IE |= UCRXIE;    //使能接受中断
        
}      
      
void main( void )
{
  clk_init(); //系统时钟初始化
  adc_init();
  uart1();
  _EINT();//开全局中断
  TX_DATA[0] = 0xFF;
  TX_DATA[1] = 0xFF;  
  TX_DATA[2] = 0xFF;
  TX_DATA[75] = 0x0A;  
  TX_DATA[76] = 0x0D;
  LPM3;
  while(1)
  {
   
    for(U8 i = 0;i < 48; i++)
    {
      while (!(UCA1IFG&UCTXIFG));             // USCI_A0 TX buffer ready?
      UCA1TXBUF = TX_DATA[i];                  // TX -> RXed character
    }
    LPM3;
  }     
}      
/***********************************************************
  中断函数
***********************************************************/
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
  switch(__even_in_range(ADC12IV,36))
    //switch(ADC12IV)   
  {
    //  case  0: break;                           // Vector  0:  No interrupt
    //  case  2: break;                           // Vector  2:  ADC overflow
    //  case  4: break;                           // Vector  4:  ADC timing overflow
    //  case  6: break;                           // Vector  6:  ADC12IFG0
    //  case  8: break;                           // Vector  8:  ADC12IFG1
    //  case 10: break;                           // Vector 10:  ADC12IFG2
    //  case 12: break;                           // Vector 12:  ADC12IFG3
  case 0x24:
   
    TX_DATA[0] = ADC12MEM15 >> 8;
    TX_DATA[1] = ADC12MEM15 & 0xFF;
   
    TX_DATA[2] = ADC12MEM14 >> 8;
    TX_DATA[3] = ADC12MEM14 & 0xFF;
   
    TX_DATA[4] = ADC12MEM13 >> 8;
    TX_DATA[5] = ADC12MEM13 & 0xFF;
   
    TX_DATA[6] = ADC12MEM12 >> 8;
    TX_DATA[7] = ADC12MEM12 & 0xFF;
   
    TX_DATA[8] = ADC12MEM7 >> 8;
    TX_DATA[9] = ADC12MEM7 & 0xFF;
    TX_DATA[10] = ADC12MEM6 >> 8;
    TX_DATA[11] = ADC12MEM6 & 0xFF;
   
    TX_DATA[12] = ADC12MEM5 >> 8;
    TX_DATA[13] = ADC12MEM5 & 0xFF;
   
    TX_DATA[14] = ADC12MEM4 >> 8;
    TX_DATA[15] = ADC12MEM4 & 0xFF;
    TX_DATA[16] = ADC12MEM3 >> 8;
    TX_DATA[17] = ADC12MEM3 & 0xFF;
   
    TX_DATA[18] = ADC12MEM2 >> 8;
    TX_DATA[19] = ADC12MEM2 & 0xFF;
    TX_DATA[20] = ADC12MEM1 >> 8;
    TX_DATA[21] = ADC12MEM1 & 0xFF;
    TX_DATA[22] = ADC12MEM0 >> 8;
    TX_DATA[23] = ADC12MEM0 & 0xFF;
   
    while (!(UCA0IFG&UCTXIFG));               // USCI_A0 TX buffer ready?
    UCA0TXBUF = 0x55;                  // TX -> RXed character
    //uart1_RX_DATA_count = 0;
   
    break;   
   
  default: break;
  }
}   
      

最新回复

本帖最后由 damiaa 于 2023-1-6 10:03 编辑 中断采样中有一句 就是发送一个0x55到串口1,这个你看到串口数据了。那证明是采样了,并且发了一个0x55到串口了。 while (!(UCA0IFG&UCTXIFG));               // USCI_A0 TX buffer ready? UCA0TXBUF = 0x55;                  // TX -> RXed character   你可以顺手在这里再发 for(U8 i = 0;i < 48; i++)     {       while (!(UCA0IFG&UCTXIFG));       UCA0TXBUF = TX_DATA;                  // TX -> RXed character     } 看看。如果可以就把所有的串口一发送的放到主程序中,ad中断里面不放串口发送。 这样只在一个地方发送,试试。   另外你的主程序采用的是UCA1  你的ad中断里面的是UCA0  好像没看到你UCA1的初始化?   详情 回复 发表于 2023-1-6 10:01
 
点赞 关注

回复
举报

167

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
大神都比较忙,我来叨叨两句吧。程序是你自己写的不?一步一步的调试,是串口问题还是AD问题?是配置问题还是处理问题?什么现象也不说,光看程序发现问题估计也只有大神了。
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
aibing 发表于 2015-5-28 14:30
大神都比较忙,我来叨叨两句吧。程序是你自己写的不?一步一步的调试,是串口问题还是AD问题?是配置问题还是处理问题?什么现象也不说,光看程序发现问题估计也只有大神了。

额。。。是我写的啊,才自学了一个月,调试过了,调试助手上就显示了“0x55”。。。。是不是AD部分UCA0TXBUF=0x55这边不对

点评

我说下喔,你看看是不是这个问题,void uart1()里面初始化的是UCA0,服务子程序里也是UCA0,主函数调用时是UCA1?MSP430配置不是很懂喔,不知道是不是这的原因呢?  详情 回复 发表于 2015-5-28 14:57
 
 
 

回复

167

帖子

1

TA的资源

一粒金砂(中级)

4
 
本帖最后由 aibing 于 2015-5-28 14:58 编辑
谁是谁的谁 发表于 2015-5-28 14:36
额。。。是我写的啊,才自学了一个月,调试过了,调试助手上就显示了“0x55”。。。。是不是AD部分UCA0TXBUF=0x55这边不对

我说下喔,你看看是不是这个问题,void uart1()里面初始化的是UCA0,服务子程序里也是UCA0,主函数调用时是UCA1?MSP430配置不是很懂喔,不知道是不是这的原因呢?主函数一直在给UCA1TXbuf赋值,服务子程序一直在给UCA0txbuf赋值,串口打印出55,说明你的UCA0初始化的很成功,只是我不太理解为什么主函数是UCA1TX
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

5
 
你一直发0x55串口助手当然显示0x55了,线理解每个模块怎么用,然后再集成到一起。看别人的程序要先知道每一句是什么意思,为什么这么写
 
 
 

回复

401

帖子

4

TA的资源

版主

6
 
先调通ADC,再调通串口,再合并吧,手头没板子,没玩430,不过思路搞明白,这个不是很难,耐心,细致
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

7
 
閺屻儳婀呴張顒€绗橀崗銊╁劥鐠併劏顔戦敍宀冾嚞閻ц缍�閹存牞鈧拷濞夈劌鍞�
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

8
 
閺屻儳婀呴張顒€绗橀崗銊╁劥鐠併劏顔戦敍宀冾嚞閻ц缍�閹存牞鈧拷濞夈劌鍞�
 
 
 

回复

4

帖子

1

TA的资源

一粒金砂(初级)

9
 
閺屻儳婀呴張顒€绗橀崗銊╁劥鐠併劏顔戦敍宀冾嚞閻ц缍�閹存牞鈧拷濞夈劌鍞�
 
 
 

回复

6177

帖子

4

TA的资源

版主

10
 
閺屻儳婀呴張顒€绗橀崗銊╁劥鐠併劏顔戦敍宀冾嚞閻ц缍�閹存牞鈧拷濞夈劌鍞�
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 12

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表