[经验] MSP430F169中关于RS485通讯的问题

Jacktang   2018-1-24 20:05 楼主
1、大体框架:实现单片机和PC机之间的通讯。
             PC机(USB接口)发送字符,经过USB 转RS232,再经过RS232转RS485,到单片机(RS485 接口)接收字符。
    2、程序设计如下: 分步调试的过程中,无论发送什么样的字符,RXBUF1变量始终是0X01。求指导!!!

          /***********************************************
程序功能:通过RS485端口接收传感器的数据,然后通过RS232把数据传出到显示屏
------------------------------------------------
测试说明:首先查看RS485接收到的数据,然后用串口调试工具,查看发出的数据,最后再调试显示屏上面内容是否显示正确


温湿度传感器的数据命令格式:01 03 00 00 00 02 C4 0B;01设备地址,03功能号,02表示数据长度,C4 0B表示CRC校验码


************************************************/
#include  


#define DRE_out     P3DIR |= BIT3     //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE          P3OUT |= BIT3     //设置485芯片处于发送状态 ,DE为高电平,
#define RE          P3OUT &= ~BIT3    //设置485芯片处于接收状态(RE为低电平,接收器输出使能
char tmp;
void Set_UART1(void);


/****************主函数****************/
void main(void)
{
  
    WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗
    P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
    DRE_out;
     RE;                                   //设置485处于接收状态
    Set_UART1();


    while (1)
    {
      
       _EINT();      //打开全局中断
            
        while(IFG2 & URXIFG1);
            tmp=RXBUF1;
    }
}
      
        
  


/*******************************************
函数名称:Set_UART1
功    能:设置MCU的UART1对应的寄存器
参    数:无
返回值  :无
********************************************/
void Set_UART1(void)
{
    P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口
    ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD(接收中断使能)
    P3DIR |=BIT6;                         //输出
    P3DIR &=~BIT7;                        //输入
    UCTL1 |= CHAR;                            //选择8-bit字符
    UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK
    UBR01 = 0x03;                             //波特率9600
    UBR11 = 0x00;
    UMCTL1 = 0x4A;                            //调整
    UCTL1 &= ~SWRST;                          //初始化UART状态机
    IE2 |= URXIE1;                            // 使能USART1的接收中断
}


//发送字符串
void SendString(void)
{
        unsigned int i;
        for(i=0;i<=7;i++)
        {
           while(!(IFG2 & UTXIFG1));                    //等待发送结束 ,UTXIFG1发送中断标志
           TXBUF1 = send_data_buf;                  //发送字符
        }
      
  }
//------------------------------------------------------------------------------
//延时函数
void Delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i }
//-----------------------------------------------------------------------------
//延时函数
void Delay_ms(char n)
{
unsigned int i,j,k;


for(i=0;i {
for(k=0;k<5;k++)
{
for(j=0;j<200;j++);
}
}
}



回复评论 (1)

先检查硬件,把232端的收发短接,用串口调试助手等软件看看是否能正常收到自己发送的数据。如无问题,检查485电路。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2018-1-25 13:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复