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