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的亮和灭。但实际硬件运行时,只是一直在亮 ,没有灭。而且把延时时间改变,也是一直在亮。。
请问是什么原因?? 回复【楼主位】fengruijue
-----------------------------------------------------------------------
你的软件编写的是没有问题的,在我的电路板上能正常运行,那就是你电路板的问题了,比如复位电路是否正常?当有仿真器接上时能通过仿真器这边的接口能正常复位,从而能正常工作;当拔掉仿真器后重新上电,有可能你电路板上电时不能可靠复位死机了,所以就一直保持在亮的状态。 //******************************************************************************
// 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=??
// 回复【2楼】scty
// F21x2相对于F149,其管脚大量复用,必须先行进行功能设置,即定义PxSEL=??
如果是控制1个LED,最好按位操作试一下, for(i=1;i<800;i++); 太短了吧。
看不出“灭”来 回复【4楼】lningbd
for(i=1;i<800;i++); 太短了吧。
看不出“灭”来
-----------------------------------------------------------------------
用的是两重的循环延时,也不短了。
void delay_nms(unsigned int n)
{
unsigned int i,j ;
for(j=1;j<n;j++)
for(i=1;i<800;i++);
} 谢谢各位.已经找到原因了.复位脚应该接一个4.7K的上拉电阻.感谢大家的回贴 电路有没有问题 你怎么驱动的?直接控制够呛,电流太小了
页:
[1]