社区导航

 

搜索
查看: 80|回复: 0

[资料分享] MSP430F169中关于RS485通讯的问题

[复制链接]

1712

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-2-5 21:43 | 显示全部楼层 |阅读模式

 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  <msp430f169.h>


#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[i];                  //发送字符
        }
      
  }
//------------------------------------------------------------------------------
//延时函数
void Delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++);
}
//-----------------------------------------------------------------------------
//延时函数 
void Delay_ms(char n)

unsigned int i,j,k;


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

词云| Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-7-13 22:09 , Processed in 0.090359 second(s), 22 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表