• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于MSP430F249的AD转换仿真问题。请大神解救。

蓝雨LOVE诗 2015-08-21 浏览量:1928
本人最近在用MSP430F249仿真AD转换,用1602显示转换的数据,我不知道为什么,试了很多办法,总是显示不出数据,我在想是不是protues里无法仿真430的AD转换呢?请大神指点。这是我的程序和仿真图,请大神们指教。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 没有我重新新建的工程


    和仿真工程


    你的我看不懂

    • 发布于 2015-08-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:17
  • 你用我的图和程序仿真出来了?我的protues是7.7版的是不是就仿真不出来了?
    • 发布于2015-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 非常感谢你,看了你的程序,我大概知道自己问题出在哪儿了。真的谢谢你。
    • 发布于2015-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 我想问一下,你说的protues7.8版本仿真不准是什么情况?我把自己的程序改了,结果是这样的,这是什么情况?
    • 发布于2015-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 哦,这两天有点忙,问题解决了吗?
    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 我把输入电压都调到2.5V两个版本调用同一个HEX文件显示不同






    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有,不知道是我protues版本7.7太低了。还是我程序有问题。给你看看我的程序吧。

    #include
    #include "lcd_1602.h"
    unsigned int a1[4];
    unsigned int a2[4];
    unsigned int a3[4];
     uchar BIM[4]={"BIM:"};
    unsigned int W;
    unsigned int H;
    unsigned int B;
    void main(void)
    {

    uchar i;
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    P1DIR = 0XFF;P1OUT = 0XFF;            //端口配置
    P4DIR = 0XFF;P4OUT = 0XFF;
    ADC12CTL0 = SHT0_2 + ADC12ON;             // Set sampling time, turn on ADC12
    ADC12CTL1 = SHP+CONSEQ_1;                          // Use sampling timer
    ADC12IE = 0x02;                           // Enable interrupt
    ADC12CTL0 |= ENC;                         // Conversion enabled
    P6SEL |= 0x01;                            // P6.0 ADC option select
    ADC12CTL0 |= ADC12SC; 
    init_1602(); // Sampling open
    _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit
    zhl_1602(0x80);//在第一行第八点开始显示
    shj_1602(0x57); //显示“W”
    shj_1602(0x3a);  //显示“:”
    for(i=0;i<4;i++)
    {
    shj_1602(a1[i]+0x30);
    }
    zhl_1602(0x88);  //在第一行第八点开始显示
    shj_1602(0x48); //显示“H”
    shj_1602(0x3a); //显示“:”
    for(i=0;i<4;i++)
    {
    shj_1602(a2[i]+0x30);
    }
    zhl_1602(0xc0);                
    for(i=0;i<4;i++)
    {
    shj_1602(BIM[i]);

    }
    for(i=0;i<4;i++)
    {
    shj_1602(a3[i]+0x30);
    }
    }

    // ADC12 interrupt service routine
    #pragma vector=ADC12_VECTOR
    __interrupt void ADC12_ISR (void)
    {
    W=ADC12MEM0;
    a1[0]=(W)/1000;
    a1[1]=(W)/100%10;
    a1[2]=(W)%100/10;
    a1[3]=(W)%10;
    H=ADC12MEM1;
    a2[0]=(H)/1000;
    a2[1]=(H)/100%10;
    a2[2]=(H)%100/10;
    a2[3]=(H)%10;
    B=W/(H*H);
    a3[0]=(B)/1000;
    a3[1]=(B)/100%10;
    a3[2]=(B)%100/10;
    a3[3]=(B)%10;


    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 是我程序的问题,还是protues版本太低呢?
    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #include
    #include "lcd_1602.h"
    unsigned int a1[4];
    unsigned int a2[4];
    unsigned int a3[4];
     uchar BIM[4]={"BIM:"};
    unsigned int W;
    unsigned int H;
    unsigned int B;
    void main(void)
    {

    uchar i;
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    P1DIR = 0XFF;P1OUT = 0XFF;            //端口配置
    P4DIR = 0XFF;P4OUT = 0XFF;
    ADC12CTL0 = SHT0_2 + ADC12ON;             // Set sampling time, turn on ADC12
    ADC12CTL1 = SHP+CONSEQ_1;                          // Use sampling timer
    ADC12IE = 0x02;                           // Enable interrupt
    ADC12CTL0 |= ENC;                         // Conversion enabled
    P6SEL |= 0x01;                            // P6.0 ADC option select
    ADC12CTL0 |= ADC12SC; 
    init_1602(); // Sampling open
    _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit
    zhl_1602(0x80);
    shj_1602(0x57); 
    shj_1602(0x3a); 
    for(i=0;i<4;i++)
    {
    shj_1602(a1[i]+0x30);
    }
    zhl_1602(0x88);
    shj_1602(0x48); 
    shj_1602(0x3a); 
    for(i=0;i<4;i++)
    {
    shj_1602(a2[i]+0x30);
    }
    zhl_1602(0xc0);                
    for(i=0;i<4;i++)
    {
    shj_1602(BIM[i]);

    }
    for(i=0;i<4;i++)
    {
    shj_1602(a3[i]+0x30);
    }
    }

    // ADC12 interrupt service routine
    #pragma vector=ADC12_VECTOR
    __interrupt void ADC12_ISR (void)
    {
    W=ADC12MEM0;
    a1[0]=(W)/1000;
    a1[1]=(W)/100%10;
    a1[2]=(W)%100/10;
    a1[3]=(W)%10;
    H=ADC12MEM1;
    a2[0]=(H)/1000;
    a2[1]=(H)/100%10;
    a2[2]=(H)%100/10;
    a2[3]=(H)%10;
    B=W/(H*H);
    a3[0]=(B)/1000;
    a3[1]=(B)/100%10;
    a3[2]=(B)%100/10;
    a3[3]=(B)%10;


    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 等哈我把我的单通道的仿真给你发过去
    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #include
    #include "lcd_1602.h"
    unsigned int a1[4];
    unsigned int a2[4];
    unsigned int a3[4];
     uchar BIM[4]={"BIM:"};
    unsigned int W;
    unsigned int H;
    unsigned int B;
    void main(void)
    {

    uchar i;
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    P1DIR = 0XFF;P1OUT = 0XFF;            //端口配置
    P4DIR = 0XFF;P4OUT = 0XFF;
    ADC12CTL0 = SHT0_2 + ADC12ON;             // Set sampling time, turn on ADC12
    ADC12CTL1 = SHP+CONSEQ_1;                          // Use sampling timer
    ADC12IE = 0x02;                           // Enable interrupt
    ADC12CTL0 |= ENC;                         // Conversion enabled
    P6SEL |= 0x01;                            // P6.0 ADC option select
    ADC12CTL0 |= ADC12SC; 
    init_1602(); // Sampling open
    _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit
    zhl_1602(0x80);
    shj_1602(0x57); 
    shj_1602(0x3a); 
    for(i=0;i<4;i++)
    {
    shj_1602(a1[i]+0x30);
    }
    zhl_1602(0x88);
    shj_1602(0x48); 
    shj_1602(0x3a); 
    for(i=0;i<4;i++)
    {
    shj_1602(a2[i]+0x30);
    }
    zhl_1602(0xc0);                
    for(i=0;i<4;i++)
    {
    shj_1602(BIM[i]);

    }
    for(i=0;i<4;i++)
    {
    shj_1602(a3[i]+0x30);
    }
    }

    // ADC12 interrupt service routine
    #pragma vector=ADC12_VECTOR
    __interrupt void ADC12_ISR (void)
    {
    W=ADC12MEM0;
    a1[0]=(W)/1000;
    a1[1]=(W)/100%10;
    a1[2]=(W)%100/10;
    a1[3]=(W)%10;
    H=ADC12MEM1;
    a2[0]=(H)/1000;
    a2[1]=(H)/100%10;
    a2[2]=(H)%100/10;
    a2[3]=(H)%10;
    B=W/(H*H);
    a3[0]=(B)/1000;
    a3[1]=(B)/100%10;
    a3[2]=(B)%100/10;
    a3[3]=(B)%10;


    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 呵呵,程序问题!触发源你选的啥,然后你做啥了?


    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • // 函数:ISR_ADC12Init()
    // 描述:AD12转换中断初始化
    // 参数:无
    // 备注:
    static void ISR_ADC12Init(void)
    {
    //  P1SEL2 |= BIT0;
      P6SEL |= BIT0;                                                                // 开启AD转换功能
      P6DIR &= ~BIT0;                                                               // 设置为输入
      // SHT0_2:16 ADC12CLK cycles
      // REF2_5V:2.5V参考电压
      // REFON:开基准电压
      // ADC12ON:开内核
      // ENC:使能AD
      ADC12CTL0 = SHT0_2 + REF2_5V + REFON + ADC12ON ;
      ADC12MCTL0 = INCH_0;                                                          // INCH_0:选择通道0
      ADC12CTL0 |= ENC;                                                             // 使能AD转换
      ADC12IE = BIT0;                                                               // 开中断

    }


    // 函数:Start_AD()
    // 描述:启动AD12转换
    // 参数:无
    void Start_AD(void)
    {
      ADC12CTL0 |= ADC12SC;                                                         // 启动AD转换 
      while(ADC12CTL1 & ADC12BUSY);                                                 // 等待转换
      ADC12CTL0 &= ~ADC12SC;                                                        // 恢复
    }

    //函数: ISR_ADC12()
    //作用: AD转换中断服务
    //参数: 无
    #pragma vector = ADC12_VECTOR
    __interrupt void ISR_ADC12(void)
    {
      if((ADC12IFG & BIT0)==BIT0)
      {
        AD_Buf = ADC12MEM0;
        ADC12IFG = 0;
      }
    }

    你先看看吧,要先去趟一趟,晚上在聊。

    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 按你这样写,那我的电路图是不是就要早REF+上,接个2.5V的电压呢?其实我一直不太清楚REF+。VEREF+、AVcc、VEREF-这些电压的取值,芯片手册我看了,书我也看了。对于VEREF等都只有个范围,具体多大不清楚,在0~AVcc之间,我随便取?VEREF应该和转换电压有关系吧。你能举个例子,解释一下吗?谢谢了。
    • 发布于2015-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 手册有的。那个2.5是内部基准电压。这个通道你不选必会的!
    • 发布于2015-08-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于MSP430F249的AD转换仿真问题。请大神解救。