用IAR调试这个程序,当我用计算机调试的时候,出现了我想要的结果。但是当我点击那个红色的叉叉“stop debugging” 的时候,(还是用usb供电),就不出现我要的结果了,灯就不亮了(其实是很久很久才闪一次,频率非常的小)。而且对于这个程序,我设置的明明是 1000MS的定时,为什么实际上它有4、5秒的延时啊? 请大神指教啊……谢谢了……
#include "msp430g2553.h"
#include "intrinsics.h"
#define uint unsigned int
uint temp1,temp2,D=0; int main( void )
{
WDTCTL = WDT_ADLY_1000;
IE1 |=WDTIE;
P2DIR = 0xff; //设置方向为输出。控制LED
P2OUT = 0x00; //初始化
P1SEL &= 0x20; //使能A/D通道A5,其他的为I/O口
ADC10CTL0 = ADC10SHT_1+ADC10ON+SREF_1+REF2_5V+REFON+MSC;
//打开ADC10内核,确定采样周期为8*ADC100SC/2,选择内部参考电压为2.5 v和0 v
ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2;
//input A5 模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子:2
ADC10AE0 |=BIT5; //使P1.5允许AD模拟输入信号
ADC10CTL0 |=ENC+ADC10SC; //使能转换 + 开始转换
_EINT();
while(1)
{
LPM3; //进入低功耗模式3
uint i=50;
while(i–)
{
temp1=ADC10MEM; temp2=temp2+temp1;
__delay_cycles(40);
}
D=temp2/50; temp1=0; temp2=0; if(D > 10 &D < 400)
{ P2OUT = 0x01; } //打开第1号灯
if(D >= 400 &D < 500)
{ P2OUT = 0x03; } //打开第1.2号灯 if(D >= 500 &D < 600)
{ P2OUT = 0x07; } //打开第1.2.3号灯
if(D >= 600 &D < 700)
{ P2OUT = 0x0f; } //打开第1.2.3.4号灯
if(D >= 700 &D < 800)
{ P2OUT = 0x1f; } //打开第1.2.3.4.5号灯
if(D >= 800 &D < 1025)
{ P2OUT = 0x3f; } //打开第1.2.3.4.5.6号灯
__delay_cycles(5000); P2OUT = 0x00; //LED 复位 }
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
LPM3_EXIT; //跳出低功耗模式3
}
xutong han:
首先确定你的硬件是否接有32768Hz的晶振,看你程序是选用辅助时钟源作为看门狗定时的时钟源,确保你程序初始化时钟后辅助时钟源选择外置32768Hz晶振,MSP430在默认状态下打开的是内部DCO振荡器,启动频率大约是800KHz~1MHz。
Shi JianHua:
回复 xutong han:
楼上说的比较全了,你先检查一下自己的配置,从你程序来看,你用看门狗做延时,它可以,但是不建议。他是用来做防止程序跑飞用的。还是开个定时器吧,至于延时不对是你配置的问题。你的延时跟主频有关系,需要你计算准确才行。