一、MAX3485芯片使用方法

1、RS232接口只能实现点对点的通信方式,但这种方式不能实现联网功能,便出现了RS485解决了这个问题。RS485采用差分信号负逻辑,+2V~+6V表示“1”,- 6V~- 2V表示“0”。双机通信时只需A-A,B-B连接。
2、硬件电路一般采用SN65176等RS485电平转换芯片。与MCU相连时有三个引脚:DE(RE同DE连在一起),DI(接受引脚),RO(发送引脚)。MCU发送一帧信号时,要先使能DE=1;接收信号前要先使能DE=0(即RE=0)。

MAX3483, MAX3485, MAX3486, MAX3488, MAX3490以及MAX3491是用于RS-485与RS-422通信的3.3V,低功耗收发器,每个器件中都具有一个驱动器和一个接收器。MAX3483和MAX3488具有限摆率驱动器,可以减小EMI,并降低由不恰当的终端匹配电缆引起的反射,实现最高250kbps的无差错数据传输。MAX3486的驱动器摆率部分受限,可以实现最高2.5Mbps的传输速率。MAX3485,MAX3490和MAX3491则可以实现最高10Mbps的传输速率。
驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态,防止过度的功率损耗。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。
使用MAX3488, MAX3490和MAX3491可以实现全双工通信,而MAX3483,MAX3485与MAX3486则为半双工应用设计。
————————————————
版权声明:本文为CSDN博主「尹泽宇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接

二、MSP430的485通信程序(接收字符串指令)

/**************************************************************
程序功能:通过RS485端口一次一次地收发数据
测试说明:用示波器观察RS485端口A、B信号线
上的波形或者用RS485接收器接收发回
的字符,在串口助手上显示。
***************************************************************/

#include
#define DRE_out     P3DIR |= BIT3     //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE          P3OUT |= BIT3     //设置485芯片处于发送状态
#define RE          P3OUT &= ~BIT3    //设置485芯片处于接收状态
typedef unsigned char uchar;unsigned char string[8] ;
uchar RX_flag;void Set_UART1(void);
void PutString0(uchar *ptr);
void Send1Char(uchar sendchar);
void PutString(uchar *ptr);
/****************主函数****************/
void main(void)
{unsigned int i; WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换DRE_out;RE;Set_UART1();_EINT();while (1){    while( IFG2 & URXIFG1 );     //等待收到test命令字符if(RX_flag==1)  {  RX_flag=0;if(string[1]=='a'){DE;   for(i=0;i<3200;i++);PutString0("a11.5522.33e ");Send1Char('\n');for(i=0;i<3200;i++);RE;//LPM3;}}    }
}
/*******************************************
函数名称:Set_UART1
功    能:设置MCU的UART1对应的寄存器
参    数:无
返回值  :无
********************************************/
void Set_UART1(void)
{P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口    ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXDUCTL1 |= CHAR;                            //选择8-bit字符UTCTL1 |= SSEL0;                          //驱动时钟选择ACLKUBR01 = 0x03;                             //波特率9600UBR11 = 0x00;UMCTL1 = 0x4a;                            //调整UCTL1 &= ~SWRST;                          //初始化UART状态机 IE2 |= URXIE1 ;            // 中断允许寄存器设置,接收中断允许
}//串口接收中断,接收字符串指令.
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{static uchar rxcount = 0;// LPM3_EXIT;if(RXBUF1 == 'e'){RX_flag =1;rxcount = 0;  }else{string[rxcount++] = RXBUF1;}
}
/*******************************************
函数名称:Send1Char
功    能:向PC机发送一个字符
参    数:sendchar--要发送的字符
返回值  :无
********************************************/
void Send1Char(uchar sendchar)
{while (!(IFG2 & UTXIFG1));    //等待发送寄存器为空         TXBUF1 = sendchar;
}
/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串并换行指令
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString(uchar *ptr)
{while(*ptr != '\0'){Send1Char(*ptr++);                     // 发送数据}while (!(IFG2 & UTXIFG1));TXBUF1 = '\n';                              //发送换行指令
}
/*******************************************
函数名称:PutSting0
功    能:向PC机发送字符串,无换行
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString0(uchar *ptr)
{while(*ptr != '\0'){Send1Char(*ptr++);                     // 发送数据}
}

关键字: MSP430 485通信 字符串指令
原文链接

三、485+MODBUS

MODBUS为应用层协议。由于485通信只是单工通信(差分传输),故为了实现半双工通信(USART为半双工),所以需要主、从双方所约定的“通用法则”来进行半双工的数据通信。我的理解如果把485物理层比喻为数据传输的公路,则MODBUS就为交通规则。
当然,485不仅可以采用MODBUS协议传输,也可以采用TCP/IP 协议传输。
————————————————
版权声明:本文为CSDN博主「米亚拉斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接

四、Modbus通讯协议——RTU

Modbus协议定义的寄存器地址 是5位十进制地址,即:
线圈(DO)地址:00000~09999
触点(DI)地址:10000~19999
输入寄存器(AI)地址:30000~39999
输出寄存器(AO)地址:40000~49999
由于上述各类地址是唯一对应的,因此有些资料就以其第一个数字区分各类地址,即:0x代表线圈(DO)类地址,1x代表触点(DI)类地址、 3x代表输入寄存器(AI)类地址、4x代表输出寄存器(AO)类地址。
在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。

modbus有四种数据,DI、DO、AI、AO
DI: 数字输入,离散输入,一个地址一个数据位,用户只能读取它的状态,不能修改。比如面板上的按键、开关状态,电机的故障状态。
DO: 数字输出,线圈输出,一个地址一个数据位,用户可以置位、复位,可以回读状态,比如继电器输出,电机的启停控制信号。
AI: 模拟输入,输入寄存器,一个地址16位数据,用户只能读,不能修改,比如一个电压值的读数。
AO: 模拟输出,保持寄存器,一个地址16位数据,用户可以写,也可以回读,比如一个控制变频器的电流值。

无论这些东西被叫做什么名字,其内容不外乎这几种,输入的信号用户只能看不能改,输出的信号用户控制,并可以回读。离散的数据只有一位,模拟的数据有16位。

Modbus-RTU模式是指当控制器设为在Modbus网络上以RTU(远程终端模式)模式通信,在消息中的每个8Bit包含两个4Bit的十六进制字符。
简书·原文链接

MSP430的485通信相关推荐

  1. 485 通信注意事项

    目录 为什么要采用屏蔽线 为什么要接地 485 通信线应如何走线? 为什么485 总线要采用手拉手结构,而不能采用星形结构? 485 总线上设备到设备之间可以有接点吗? 什么叫共模干扰和差模干扰?如何 ...

  2. 485通信自动收发电路,历史上最详细的解释

    作者:瑞生,来源:科技老顽童 微信公众号:芯片之家(ID:chiphome-dy) 上边的485通信自动收发电路,实测波特率9600不会有问题,但是,波特率115200的话,曾经出现过问题. 我们先看 ...

  3. 485通信实现自动收发功能

    在平时使用485通信时,好多人往往首选的就是MAX485芯片,如下图所示: 常规的方法就是使用RE和DE引脚通过程序来切换接收数据和发送数据,但是这样写起程序来比较麻烦,调试起来也比较费劲.为了方便的 ...

  4. 485通信自动收发数据实现

    485通信是工业控制中很常用的一种通信方式,但是编写通信程序的时候需要在代码中手动控制接收和发送,如果接收和发送逻辑没处理好往往会造成通信故障,实现起来比较麻烦.那能不能让485通信是接收和发送数据可 ...

  5. 【genius_platform软件平台开发】第九十三讲:串口通信(485通信)

    485通信 1. 485通信 1.1 termios结构 1.2 头文件 1.3 函数讲解 1.3.1 tcgetattr 1.3.2 tcsetattr 1.4 示例工程 1.5 参考文献 1.5. ...

  6. 通信协议学习-485通信(2)

    2.RS-485通信总线标准 RS-485标准采用平衡式发送和差分接收方式实现通信,由于传输线通常使用双绞线,又是差分传输,所以有极强的抗共模干扰的能力.RS-485采用半双工工作方式,支持多点数据通 ...

  7. STM32F103 485通信开发实例

    目录 一.背景介绍 二.主机代码 1.串口初始化配置 2.发送函数定义 3.串口接收中断函数定义 4.定时中断(用于主机发送指令) 5..h文件 三.从机代码 1.串口初始化配置 2.发送函数定义 3 ...

  8. 如何通过Java实现485通信

    1.整体架构的选择 首先根据需求,我这边使用的是springboot+netty的架构,使用了一个串口转网口的转换模块.为什么这么使用?部署的时候使用的是Linux的系统,在Linux下安装驱动比较麻 ...

  9. 通信协议学习-485通信(1)

    1.RS-485通信协议标准 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定,主要实现两个设备之间的数据交换功能,通信协议分硬件层协议和软件层协议.硬件层协议决定数据如何传输,比如要设备A要 ...

最新文章

  1. Asp.net开发过程中,我们会遇到很多Exception
  2. 综述:AI系统安全的实用方法介绍
  3. 兼容性—IE6/7下带有overflow:hidden属性的父级元素包不住带有position:relative属性的子元素...
  4. java 昨天_JAVA取得昨天的当前时间?
  5. 0x08 大数据分析,七层基本功
  6. es6箭头函数_ES6语法之-箭头函数
  7. boost::mpi模块reduce() 集合的性能测试
  8. linux ucontext 类型,协程:posix::ucontext用户级线程实现原理分析 | WalkerTalking
  9. mysql类似的数据库_MemSQL学习笔记-类似MySQL的数据库
  10. 云计算开源软件有哪些?
  11. return view前端怎么获取_Web 前端路由原理解析和功能实现
  12. STL---vector的内存分配策略
  13. PlayWidget
  14. 【转载】六合一调试神器TTL转USB模块
  15. CREO:CREO软件之装配设计界面的简介、装配图设计流程、常见方法(主控件TOP DOWN设计、骨架模型TOP DOWN设计、记事本模型设计)、案例应用(图文教程)之详细攻略
  16. 自定义TimePicker样式,修改时分、分割线分隔冒号的字体、颜色高度等属性
  17. IT十年人生过客-十八-路过机遇
  18. 我对“渗透性测试”的理解
  19. cad抠图 lisp_[原创]几个超级有用的裁剪用autocad--lisp程序
  20. 浙江大学计算机学院陈越教授,科学网—浙大教授陈越:快乐教学 行者无疆

热门文章

  1. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统
  2. Oracle常见问题一千问
  3. log4j同配置下多个进程写日志
  4. windows10应用程序需要设置管理员权限自启动
  5. android部分手机input、textarea输入框背景色和页面整体背景色不一致
  6. 天津春考计算机学什么,2016天津春季高考计算机基础科目考试大纲
  7. Redis 可视化管理(AnotherRedisDesktopManager / Medis / redis-commander / RedisDesktopManager)
  8. mysql从数据库误删.idb / .frm 文件,恢复数据方法
  9. mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法
  10. 在滴滴云快速搭建自己的简易服务集群(入门版)