为什么这个检验通讯的程序会出现,当我串口发送一个字符时,返回oka ,但是当我发送字符串的时候返回就是okaoka,RX_flag会产生两次置位 void int_clk() {
uchar i;
BCSCTL1&=~XT2OFF; //打开XT振荡器
BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M
do
{
IFG1 &= ~OFIFG; //清除振荡错误标志
for(i = 0; i < 100; i++)
_NOP(); //延时等待
}
while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待
IFG1&=~OFIFG;
}
void int_usart()
{
U0CTL|=SWRST;//复位串口
U0CTL|=CHAR; //8位数据
U0TCTL|=SSEL1;//select SMCLK AS CLK
U0BR0=0X41;
U0BR1=0X03;
UMCTL0=0X00;//9600
ME1|=UTXE0+URXE0;//使能接收和发送
U0CTL&=~SWRST;//清除串口复位信号
IE1|=URXIE0;//+UTXIE0;//使能接收中断
P3SEL|=BIT4;
P3SEL|=BIT5;//选择I/O口使用扩展功能和方向
P3DIR|=BIT4;
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
static char RX_len_temp;
Recptr[RX_len_temp]=RXBUF0;
RX_len_temp++;
if(Recptr[RX_len_temp-1]=='');
{
RX_len=RX_len_temp;
RX_flag=1;
RX_len_temp=0;
P2OUT = RXBUF0;
}
} void main()
{P2DIR=0xFF;
P2OUT=0xFF;
WDTCTL=WDTPW+WDTHOLD;
int_clk();
int_usart();
_EINT();
char i;
for(;;)
{
if(RX_flag==1)
{
RX_flag=0;
UART_TX_BUF[0]='o';
UART_TX_BUF[1]='k';
UART_TX_BUF[2]='a';
for(i=0;i<3;i++)
{
while (!(IFG1 & UTXIFG0));
TXBUF0=UART_TX_BUF;
delay(20000);
}
}
}}
|