打印
[技术求助]

请教:430的AD采样控制PWM宽度,进不了中断

[复制链接]
2117|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gibenlin|  楼主 | 2012-10-31 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
gibenlin|  楼主 | 2012-10-31 10:23 | 只看该作者
#include "msp430x14x.h"

#define uchar unsigned char

#define uint unsigned int

uint Results[32];         //存放ADC的转换结果

long A_verage;           //存放32个数据之和

uint A_ve = 0;             //存放32个数的平均值



void main( void )

{

    WDTCTL = WDTPW + WDTHOLD;

    P6DIR  = BIT0;

    P6SEL |= 0x01;                            // Ena××e A/D channel A0

    ADC12CTL0 = ADC12ON + SHT0_15 + MSC;      // Turn on ADC12, set sampling time

    ADC12CTL1 = SHP + CONSEQ_2;               // Use sampling timer, set mode

    ADC12IE = 0x01;                           // Ena××e ADC12IFG.0

    ADC12CTL0 |= ENC;                         // Ena××e conversions

    ADC12CTL0 |= ADC12SC;                     // Start conversion

   

    TBCTL = TBSSEL_1 + TBCLR + MC0;

    TBCCTL1 = OUTMOD_7;

    TBCCR0 = 500;

    TBCCR1 = 250;

    P4DIR = 0X02;

    P4SEL = 0X02;

   

    _EINT();

    while(1);



}



/*******************************************

函数名称:ADC12ISR

功    能:ADC12的中断服务函数

参    数:无

返回值  :无

********************************************/

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR (void)

{

    static uchar index = 0;

   

    Results[index++] = ADC12MEM0;                      // Move results, IFG is cleared

    if(index == 32)

    {

         uchar i;

         

         A_verage = 0;

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

            A_verage += Results[i];

         A_verage >>= 5;                           //除以32求平均值

         if(A_verage > A_ve)

         {

           if(TBCCR1 < 500) TBCCR1 = TBCCR1 + 10;

           else TBCCR1 = 0;

         }

         else

         {

           if(TBCCR1 > 10) TBCCR1 = TBCCR1 - 10;

           else TBCCR1 = 500;

         }

         A_ve = A_verage;

         

         index = 0;

    }

}

使用特权

评论回复
板凳
loansat| | 2012-10-31 10:28 | 只看该作者
TBCTL = TBSSEL_1 + TBCLR + MC0;

有问题,计数器没打开,改成TBCTL = TBSSEL_1 + TBCLR + MC1;

再看看

使用特权

评论回复
地板
mucanhin| | 2012-10-31 18:48 | 只看该作者
楼上说的对

使用特权

评论回复
5
airwill| | 2012-11-3 22:08 | 只看该作者
编程序, 我觉得应该多多地利用好调速器等工具.
多多学习点软件调试的技巧
多多地看手册, 了解和掌握器件的特性

使用特权

评论回复
6
vivilzb1985| | 2012-11-6 12:12 | 只看该作者
程序编号后可以在线仿真的,可以运行到哪一步的很直观的

使用特权

评论回复
7
superman2012| | 2012-11-6 15:07 | 只看该作者
可以单步运行一下程序,看看各个变量是否和自己想的一样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

142

帖子

1

粉丝