fengruijue 发表于 2010-8-7 12:50:49

MSP430F2132 控制一个LED灯,软件仿可以,硬件为什么不行?

芯片用的是MSPf2132 ,就用来控制LED灯的亮和灭,程序如下:#include "msp430f2132.h"

void delay_nms(unsigned int n)
{
unsigned int i,j ;
for(j=1;j<n;j++)
    for(i=1;i<800;i++);
}

int main( void )
{

// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
   P2DIR = 0xff;                   //设置P2口方向为输出
   P2OUT = 0xff;


while(1)
{
   
    P2OUT = 0x00;
    delay_nms(500);
    P2OUT =0Xff;
   delay_nms(500);
}

问题是::软件仿真可以控制LED的亮和灭。但实际硬件运行时,只是一直在亮   ,没有灭。而且把延时时间改变,也是一直在亮。。

请问是什么原因??

zu_an 发表于 2010-8-7 20:28:13

回复【楼主位】fengruijue
-----------------------------------------------------------------------
你的软件编写的是没有问题的,在我的电路板上能正常运行,那就是你电路板的问题了,比如复位电路是否正常?当有仿真器接上时能通过仿真器这边的接口能正常复位,从而能正常工作;当拔掉仿真器后重新上电,有可能你电路板上电时不能可靠复位死机了,所以就一直保持在亮的状态。

scty 发表于 2010-8-8 21:58:06

//******************************************************************************
//   MSP430F21x2 Demo - Basic Clock, LPM3 Using WDT ISR, VLO ACLK
//
//   Description: This program operates MSP430 normally in LPM3, pulsing P1.0
//   ~ 6 second intervals. WDT ISR used to wake-up system. All I/O configured
//   as low outputs to eliminate floating inputs. Current consumption does
//   increase when LED is powered on P1.0. Demo for measuring LPM3 current.
//   ACLK = VLO/2, MCLK = SMCLK = default DCO ~1.2MHz
//
//                MSP430F21x2
//             -----------------
//         /|\|            XIN|-
//          | |               |
//          --|RST          XOUT|-
//            |               |
//            |             P1.0|-->LED
//
//   A. Dannenberg
//   Texas Instruments Inc.
//   October 2006
//   Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x21x2.h"

volatile unsigned int i;

void main(void)
{
WDTCTL = WDT_ADLY_1000;                   // WDT 1s*4 interval timer
BCSCTL1 |= DIVA_1;                        // ACLK/2
BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO
IE1 |= WDTIE;                           // Enable WDT interrupt
P1DIR = 0xFF;                           // All P1.x outputs
P1OUT = 0;                              // All P1.x reset
P2SEL = 0;                              // All P2.x GPIO function
P2DIR = 0xFF;                           // All P2.x outputs
P2OUT = 0;                              // All P2.x reset
P3DIR = 0xFF;                           // All P3.x outputs
P3OUT = 0;                              // All P3.x reset

while(1)
{
    __bis_SR_register(LPM3_bits + GIE);   // Enter LPM3, enable interrupts
    P1OUT |= 0x01;                        // Set P1.0 LED on
    for (i = 5000; i > 0; i--);             // Delay
    P1OUT &= ~0x01;                         // Clear P1.0 LED off
}
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
__bic_SR_register_on_exit(LPM3_bits);   // Clear LPM3 bits from 0(SR)
}

// *********************************************************************************
// 说明:这是TI提供的MSP430F21x2的DEMO程序包中的一个,由于看门狗定时器的1000mS是基于32768Hz的ACLK的,而这个DEMO将其设为VLO方式且2分频,估计只有6KHz左右。此程序运行发现,LED灯闪烁的间隔大概在6.2S。
// F21x2相对于F149,其管脚大量复用,必须先行进行功能设置,即定义PxSEL=??


//

peterliuzq 发表于 2010-8-9 08:39:53

回复【2楼】scty
// F21x2相对于F149,其管脚大量复用,必须先行进行功能设置,即定义PxSEL=??


如果是控制1个LED,最好按位操作试一下,

lningbd 发表于 2010-8-9 18:59:52

for(i=1;i<800;i++); 太短了吧。
看不出“灭”来

zu_an 发表于 2010-8-10 16:27:14

回复【4楼】lningbd
for(i=1;i&lt;800;i++); 太短了吧。
看不出“灭”来
-----------------------------------------------------------------------

用的是两重的循环延时,也不短了。
void delay_nms(unsigned int n)
{
unsigned int i,j ;
for(j=1;j<n;j++)
    for(i=1;i<800;i++);
}

fengruijue 发表于 2010-8-15 14:47:41

谢谢各位.已经找到原因了.复位脚应该接一个4.7K的上拉电阻.感谢大家的回贴

songshanxiaozi 发表于 2011-3-30 16:41:38

电路有没有问题

240671900 发表于 2011-5-10 16:41:00

你怎么驱动的?直接控制够呛,电流太小了
页: [1]
查看完整版本: MSP430F2132 控制一个LED灯,软件仿可以,硬件为什么不行?