如题

2019-03-24 10:52发布

最初程序,采集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();
}
求大戏不吝赐教。
此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章