1567|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430F169中关于RS485通讯的问题 [复制链接]

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++);
}
}
}



 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表