这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » msp430单片机AD采集,串口发送问题

共7条 1/1 1 跳转至

msp430单片机AD采集,串口发送问题

菜鸟
2014-04-27 14:13:18     打赏

我的一个信号通道产生两路交替的信号,这两个信号交替通过flag控制产生,但是不重叠,用ADC12采集,串口发送,可是串口没有反应。。一路信号试验的话出来了,现在两路这样写,用串口调试助手,完全没有反应,有没有用过430的前辈指点一二?

 

 

#include  <msp430x14x.h>
#define uint unsigned int
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
uint high81,low81,high82,low82,flag;//high81,low81,high82,low82//分别存第一路第二路的高低八位
                                            //两路信号由同一个通道产生,由flag控制哪路信号发射,交替发射不重叠
                                           //同一个AD采集

void int1()
{
  flag=1;
  delay_ms(10); //产生第一路信号,第二路信号不产生
}

void int2()
{
  flag=2;
  delay_ms(10); //产生第二路信号,第一路信号不产生
}
void int_adc()
{
  P6SEL |= BIT1;                            // P6.1,使能AD转换通道A0
  ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // 启动ADC12, 设置采样时间
  ADC12CTL1 = SHP+CONSEQ_2;                 // 应用采样定时器
  ADC12MCTL0=SREF_0;                        //参考3.3V
  ADC12IE = 0x01;                           // 使能AD中断
  ADC12CTL0 |= ENC;                         // 使能AD转换
  //ADC12CTL0 |= ADC12SC;                     // 开始AD转换
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
     //ADC_CH0 = ADC12MEM0;           // 存储转换结果
      // ah=ADC12MEM0>>8; 
  if(flag==1)
  {
       low81=((ADC12MEM0<<8)>>8);
       high81=ADC12MEM0>>8;
  }
  else if(flag==2)
    {
       low82=((ADC12MEM0<<8)>>8);
       high82=ADC12MEM0>>8;
  }
}

void int_usart()
{
  
  UCTL0 |= SWRST;
  UTCTL0 = SSEL0;                   // UCLK = ACLK,选择时钟来源
  UBR00 = 0x03;                     // 32k/9600 - 3.41 波特率寄存器低字节
  UBR10 = 0x00;                    // 32k/9600 波特率寄存器高字节,波特率9600,波特率手册上有相应设置
  UMCTL0 = 0x4A;                  // Modulation,由于波特率计算有余数,填写波特率调整寄存器
  UCTL0 &= ~SWRST;                // 初始化UART状态机
  UCTL0 |= CHAR;                 // 数据格式为8位数据
  ME1 |= UTXE0 + URXE0;         // 使能USART0的发送TXD和接受RXD
  IE1 |= URXIE0;               // 使能USART0的接收中断,让串口接收到数据后能产生中断
  P3SEL |= BIT4;
  P3SEL |= BIT5;               //P3.4  P3.5扩展功能和方向
  P3DIR |= BIT4;
 
}
int main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
    int_adc();
    int_usart();
    _EINT();
    ADC12CTL0 |= ADC12SC;                     // 开始AD转换
  
   while(1)
    {
     
      if(flag==1)
      {
      while (!(IFG1 & UTXIFG0) );  
      TXBUF0='a';
      while (!(IFG1 & UTXIFG0) );
      TXBUF0=low81;
      while (!(IFG1 & UTXIFG0) );
      TXBUF0=high81;
     }
      else if(flag==2)
   {
      while (!(IFG1 & UTXIFG0) )
      TXBUF0='b';
      while (!(IFG1 & UTXIFG0) )
      TXBUF0=low82;
      while (!(IFG1 & UTXIFG0) )
      TXBUF0=high82;
  
    }
    int1();
    int2();
   }
}

 




关键词: MSP430     AD     串口    

工程师
2014-04-27 21:07:00     打赏
2楼

代码是串行执行的,

也就是说 ,int1();完了就执行 int2()了,也就是程序回去执行的时候,一直都是flag =2


高工
2014-04-27 21:35:36     打赏
3楼

这类问题拿个仿真器单步调度,

就这几行代码,两分钟不用就解决了


把代码贴出来,有兴趣看的,

比如LS的大神,深表佩服


菜鸟
2014-05-04 21:11:43     打赏
4楼
谢谢你的评论,初学者自然会有很多脑残的问题,也实话告诉你,我现在也不会用仿真器一步步调试,但是不代表我不可以问,不代表我不会进步,解决不了了就请前辈指点,可以指点固然我可以进步快点,指点不了,也无需说出这种话。每个人都有自己的特长,术业有专攻,每个人都有起步的时候,刚起步的时候固然很多令人头疼的问题,有了积累的人看到你的问题也许会觉得根本不是问题,但是请不要去嘲笑别人,也不需要用这种口气说话,两分钟的事情我画了半个月来解决了,虽然很慢,但是我是努力了,得到了进步,也许这个过程对你们这样水平的人来说很脑残,很弱智,但是,不指点别人就不要冷嘲热讽的,也许你是前辈,但是说不定我以后通过自己的努力,会比你优秀。

菜鸟
2014-05-04 21:12:08     打赏
5楼
谢谢您,我这个解决了。。。太感谢了!

高工
2014-05-04 22:52:06     打赏
6楼
无语,你从哪里看到冷嘲热讽了?哪个字让你觉得我说问题脑残了? 后两句话,你看点击数和回复数就能知道我说的是对是错

高工
2014-05-04 22:52:24     打赏
7楼

告诉你的是针对某类问题,解决问题的方法~


另外有仿真器不会用,真的没什么值得炫耀的~



共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]