RS485通信问题,请高人指点,谢谢!!!程序和错误描述如下:
程序如下:#include <msp430x14x.h>
#define RS485 BIT0
void int_clk()
{
unsigned char 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;
}
int_usart()
{
U1CTL|=SWRST;
U1CTL|=CHAR+MM; //8位数据 主机模式
U1TCTL|=SSEL1; //select SMCLK AS CLK
U1RCTL|=URXWIE;
U1BR0=0xa0;
U1BR1=0x01;
UMCTL1=0xc0; //波特率 19200
ME2|=UTXE1+URXE1;//使能接受和发送
U1CTL&=~SWRST;
IE2|=URXIE1;//使能接受中断
P3SEL|=BIT6+BIT7;
P3DIR|=BIT6;//设置I/O功能和方向
}
void sent_byte(unsigned char data)//发送一个字节数据
{
P2OUT|=RS485;
_NOP();
U1TXBUF=data;
while((IFG2&UTXIFG1)==0);
P2OUT&=~RS485;
}
#pragma vector=UART1RX_VECTOR
__interruptvoid UART0_RX_ISR(void)
{
unsigned char data;
data=U1RXBUF;
U1RCTL&=~URXWIE;
sent_byte(data);
sent_byte(0x30);
sent_byte(0x30);
P2OUT&=~RS485;
U1RCTL|=URXWIE;
}
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;
int_clk();
int_usart();
P2DIR|=RS485;
P2OUT&=~RS485;
_EINT();
while(1);
}
我是使用了一个232转485的转接器,与电脑链接,我要求PC机向单片机发送一个字符,按16进制写入,单片机返回发送的字符,并且同时返回两个03,但是,我用串口精灵调试出现了。返回一个正确值,一个03,另个一是00。如果,我只要求返回PC机写入的值,返回确实错误的,不会出现正确数据,一般为FF。请高人指点,谢谢!!!我的QQ:348815496
页:
[1]