这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 求助帖

共3条 1/1 1 跳转至

求助帖

菜鸟
2014-09-30 18:15:46     打赏

最初程序,采集AD值12864显示,传感器位于电机上。两个子程序同时放进while去只有采集好使,电机要么转一次要么干脆不动。(屏蔽Sample()电机可以转,根据采集有延时可以推断程序执行了Onclick()但电机却不动,不太确定问题是否出在这)。问题是电机不转AD采集不到数。该程序用51单片机做电机能转动又能采集数。

#include <msp430f5529.h>

#include <LCD12864.h>

#include <IIC.h>

#include <Display.h>

#include <Motor.h>

#include <PWM.h>

#include <Event.h>

#include <Key.h>

#define uint unsigned int

#define uchar unsigned char

uint flag;


void main()

{

WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT


    PWMA_Init();

    Key_Init();

    Key_Scan();

    Motor_Init();


    GPIO_Init();

LCD12864_Init();


  while(1)

 {

On_Click();//检测事件控制电机正反转

Sample();//采集AD值12864显示

      }

}



然后修改程序,把采集放入(看门狗,定时器)中断扫描16ms/250ms/1000ms,离谱的是程序一旦进入中断就是反复扫描sample(),不再进入while中,电机照样不转。

#include <msp430f5529.h>

#include <LCD12864.h>

#include <IIC.h>

#include <Display.h>

#include <Motor.h>

#include <PWM.h>

#include <Event.h>

#include <Key.h>

#define uint unsigned int

#define uchar unsigned char

uint flag;


void WDT_Init()

{

  WDTCTL = WDT_ADLY_16;                    // WDT 16ms, ACLK, interval timer

// WDTCTL = WDT_MDLY_32;

  SFRIE1 |= WDTIE;                          // Enable WDT interrupt

//  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, enable interrupts

}


void main()

{

WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT


    PWMA_Init();

    Key_Init();

    Key_Scan();

    Motor_Init();


    WDT_Init();

    GPIO_Init();

LCD12864_Init();


  while(1)

 {

_EINT();

On_Click();

      }

}


// Watchdog Timer interrupt service routine

#pragma vector = WDT_VECTOR

__interrupt void WDT_ISR(void)

{

SFRIFG1 &=~ WDTIFG;

Sample();

}

求大侠不吝赐教。



院士
2014-10-03 12:37:19     打赏
2楼
Msp430没有用过!根据描述像是进入中断后没有清除中断位,而造成了反复触发的问题!

专家
2014-10-03 18:14:58     打赏
3楼
照你的说法应该是反复进中断,应该是标志位没清掉。

共3条 1/1 1 跳转至

回复

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