程序如下:
#include <msp430x14x.h>
#define DRE_out P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE P3OUT |= BIT3 //设置485芯片处于发送状态
#define RE P3OUT &= ~BIT3 //设置485芯片处于接收状态
typedef unsigned char uchar;
unsigned char string[8] ;
void Set_UART1(void);
void PutString0(uchar *ptr);
void Send1Char(uchar sendchar);
void PutString(uchar *ptr);
/****************主函数****************/
void main(void)
{ unsigned int i; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换 DRE_out; RE; Set_UART1(); _EINT(); while (1) { if((string[0] == 'A')&&(string[6] == 'a')) //LET MCU A DO. { DE; for(i=0;i<3000;i++); PutString0("a12.5522.33e"); for(i=0;i<800;i++); RE; LPM3; } }
}
/*******************************************
函数名称:Set_UART1
功 能:设置MCU的UART1对应的寄存器
参 数:无
返回值 :无
********************************************/
void Set_UART1(void)
{ P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口 ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD UCTL1 |= CHAR; //选择8-bit字符 UTCTL1 |= SSEL0; //驱动时钟选择ACLK UBR01 = 0x03; //波特率9600 UBR11 = 0x00; UMCTL1 = 0x4a; //调整 UCTL1 &= ~SWRST; //初始化UART状态机 IE2 |= URXIE1 ; // 中断允许寄存器设置,接收中断允许
}
//串口接收中断,退出LPM3模式.
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{ static uchar rxcount = 0; LPM3_EXIT; string[rxcount++] = RXBUF1; rxcount = rxcount%8; //0~7 loop
}
/*******************************************
函数名称:Send1Char
功 能:向PC机发送一个字符
参 数:sendchar--要发送的字符
返回值 :无
********************************************/
void Send1Char(uchar sendchar)
{ while (!(IFG2 & UTXIFG1)); //等待发送寄存器为空 TXBUF1 = sendchar;
}
/*******************************************
函数名称:PutSting0
功 能:向PC机发送字符串,无换行
参 数:ptr--指向发送字符串的指针
返回值 :无
********************************************/
void PutString0(uchar *ptr)
{ while(*ptr != '\0') { Send1Char(*ptr++); // 发送数据 }
}
要实现的功能是先接收到一个字符串指令放在数组中,只要第0个和第6个字符分别为‘A’和‘a’,则发回一个字符串。。。程序功能没问题,但是每当执行了8次之后就需要再发送6~8次指令才会响应。应该是每发送一次指令,就执行一次发回字符串的功能的,请问出现这样的情况是什么原因? |