用430F149的UART1串口和PC的串口调试助手通讯,欲实现430接收PC的数据后即返回PC。调试时发现430可以接收到PC的数据,在PC串口调试助手接收区却看不到430返回的数据。单步调试时查看到U1RXBUF和U1TXBUF均为PC发过来的数据。以下是代码,麻烦大侠点拨一下
#include "msp430x14x.h"
#define uchar unsigned char
#define uint unsigned int
uint i,j,k,s;
//****************初始化时钟*************//
Init_Clk()
{
WDTCTL = WDTPW + WDTHOLD; //关狗
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0xff;i>0;i--);
}
while(IFG1&OFIFG!=0);
BCSCTL2|=SELM1+SELS+DIVS_2; //MCLK、SCLK均选择XT2=6M,SCLK进行4分频
}
//****************通讯操作***************//
#define U_E_H P3OUT|=BIT5 //通讯芯片使能控制
#define U_E_L P3OUT&=~BIT5
#define U1_R BIT7 //接收引脚
#define U1_T BIT6 //发送引脚
Init_USART() //初始化
{
P3DIR|=U1_T+BIT5; //引脚方向设置
P3DIR&=~U1_R; //引脚方向设置
P3SEL|=U1_R+U1_T; //引脚功能设置
U_E_H; //通讯芯片使能
U1CTL|=SWRST; //开始设置串行口
U1CTL|=CHAR; //8位数据位
U1CTL&=~MM; //线路空闲多机协议
U1CTL&=~PENA; //无校验
U1CTL&=~SPB; //1位停止位
U1CTL&=~SYNC; //异步通讯
U1TCTL|=SSEL1; //选择SMCLK
U1BR1=0X00;
U1BR0=0X9C;
U1MCTL=0X40; //9600
U1CTL&=~SWRST; //串口设置结束
ME2|=UTXE1+URXE1; //发送、接收允许
IE2|=URXIE1; //接收中断允许
_EINT(); //开全局中断
}
//****************主程序***************//
main(void)
{
Init_Clk();
Init_USART();
while(1);
}
#pragma vector = UART1RX_VECTOR
__interrupt void RX_ISR(void)
{
IFG2&=~URXIFG1;
while(!(IFG2&URXIFG1));
TXBUF1=RXBUF1;
while((IFG2&UTXIFG1)==0);
IFG2&=~UTXIFG1;
} |