hiolan 发表于 2010-11-30 13:59:54

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]
查看完整版本: RS485通信问题,请高人指点,谢谢!!!程序和错误描述如下: