pc机与430单片机通过485通信,pc机通过串口调试助手发送一个字母(如A)对单片机里的程序进行开始或停止控

这是对单片机LED的控制。如何通过串口调试助手发送字母对其进行控制呢 ?下面是一段代码 请高手给改改 不甚感激!
/***************************************************
程序功能:控制8个LED闪烁,用于测试下载功能是否正常
---------------------------------------------------
测试说明:观察LED闪烁
***************************************************/
#include <msp430x14x.h>

typedef unsigned char uchar;
typedef unsigned int uint;

void InitUART(void);

/****************主函数****************/
void main(void)
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

#define DRE_out P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE P3OUT |= BIT3 //设置485芯片处于发送状态
#define RE P3OUT &= ~BIT3 //设置485芯片处于接收状态
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x0D; //波特率2400
UBR11 = 0x00;
UMCTL1 = 0x6B; //调整
UCTL1 &= ~SWRST; //初始化UART状态机
IE2 |= URXIE1 ; // 中断允许寄存器设置,接收中断允许
_EINT();

while(1)
{
while(IFG2 & UTXIFG1); //等待接收数据
if( RXBUF1 == 'A');

CCTL0 = CCIE; //使能CCR0中断
CCR0 = 5000; //设定周期0.5S
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
P2DIR = 0xff; //设置P2口方向为输出
P2OUT = 0xff;

_EINT(); //使能全局中断
LPM3;

} //CPU进入LPM3模式
}

/*******************************************
函数名称:Timer_A
功 能:定时器A的中断服务函数
参 数:无
返回值 :无
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P2OUT ^= 0xff; //P2口输出取反
}

第1个回答  2011-04-26
这是对单片机LED的控制。如何通过串口调试助手发送字母对其进行控制呢 ?下面是一段代码 请高手给改改 不甚感激!
/***************************************************
程序功能:控制8个LED闪烁,用于测试下载功能是否正常
---------------------------------------------------
测试说明:观察LED闪烁
***************************************************/
#include <msp430x14x.h>

typedef unsigned char uchar;
typedef unsigned int uint;

void InitUART(void);

/****************主函数****************/
void main(void)
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

#define DRE_out P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE P3OUT |= BIT3 //设置485芯片处于发送状态
#define RE P3OUT &= ~BIT3 //设置485芯片处于接收状态
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x0D; //波特率2400
UBR11 = 0x00;
UMCTL1 = 0x6B; //调整
UCTL1 &= ~SWRST; //初始化UART状态机
// 查询就不用开中断了 IE2 |= URXIE1 ; // 中断允许寄存器设置,接收中断允许
_EINT();

while(1)
{
while(IFG2 & UTXIFG1); //等待接收数据
if( RXBUF1 == 'A') //开始闪烁

CCTL0 = CCIE; //使能CCR0中断
CCR0 = 5000; //设定周期0.5S
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
P2DIR = 0xff; //设置P2口方向为输出
P2OUT = 0xff;

_EINT(); //使能全局中断

else if( RXBUF1 == 'B') //停止闪烁
{
P2OUT = 0x00;//熄灭led
//关定时中断 你查一下控制位
}

} //CPU进入LPM3模式
}

/*******************************************
函数名称:Timer_A
功 能:定时器A的中断服务函数
参 数:无
返回值 :无
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P2OUT ^= 0xff; //P2口输出取反
}本回答被网友采纳
相似回答