好文档 - 专业文书写作范文服务资料分享网站

RS485使用手册与指南

天下 分享 时间: 加入收藏 我要投稿 点赞

广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com

SBUFSerial_data; while(!TI); TI=0; }

/*发送一个字节,并进行偶校验*/

/******************************************************************** 发送一帧数据函数 原型:void TXD_Int(uchar *); =功能:发送一帧数据

入口参数:发送数据帧地址指针 出口参数:无

==

********************************************************************/

void TXD_Int(uchar *s) {

uchar CS0x68;

=

char i,j;

=

CTRL4850; /*RS-485通讯,切换为发送状态*/ =Delay_T(1);

TI0;

Send_Data(0xfe); /*发送2个前到字节*/ Send_Data(0xfe); Send_Data(0x68); /*发送帧头*/

for(i=0;i<=5;i++) /*发送电表通讯地址*/

{CS+=*(s+i);Send_Data(*(s+i));} CS+=0x68;Send_Data(0x68); /*发送数据帧头*/ CS+=*(s+6);Send_Data(*(s+6)); /*发送帧命令*/ CS+=*(s+7);j=*(s+7);Send_Data(j); /*发送数据长度*/ =

for(i0;i

w.wwd15.jpten{

(*(s+i+8))+0x33; Send_Data(*(s+i+8));

CS+=(*(s+i+8));

} Send_Data(CS); /*发送校验字节*/

Send_Data(0x16); /*发送帧尾*/

RI=0;TI=0;

Delay_T(1); CTRL485=1;

/*一帧发送完毕,恢复信道切换功能*/

}

/******************************************************************** 通讯地址判断函数 原型:uchar Serial_Address(uchar *);

35

广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com 功能:通讯地址判断,通讯地址存储E2PROM 0区0x00~0x05中 全局变量:

=入口参数:s1指向从通讯地址

出口参数:=0x00=错误,0x01正确,0x02广播地址

********************************************************************/

uchar Serial_Address(uchar *s1) {

uchar i,a[6]; IRcvStr(CAT24W08,0x00,a,6); /*读取电表通讯地址*/

for(i=0;i<=5;i++)

{

if((*(s1+i))!0x99)

/*不是广播地址*/ break; if(i==5)

return(0x02); /*是广播地址*/

} =

for(i0;i<5;i++)

== {

if((*(s1+i))!a[i]) return(0x00); /*地址不相同*/

=}

return(0x01); /*地址相同*/ }

/******************************************************************** 通讯密码判断函数 原型:bit Serial_Password(uchar *); 全局变量:

功能:通讯密码判断,密码存储E2PROM 0区0x06~0x09中 入口参数:s1指向从通讯密码地址 出口参数:0错误,1正确

w.ww

d15.jpten********************************************************************/

bit Serial_Password(uchar *s1)

{

uchar i,a[4];

IRcvStr(CAT24W08,0x06,a,4); for(i0;i<3;i++) {

if((*(s1+i))!a[i]) return 0;

/*密码不对*/ /*密码正确*/

}

}

return 1;

36

广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com

/******************************************************************** 通讯执行函数 原型:bit Serial_Command_Run(uchar *); 功能:执行通讯命令 入口参数:帧地址

出口参数:是否正确及是否完毕,0为错误和通讯没有完成,1为正确和通讯完成

********************************************************************/

bit Serial_Command_Run(uchar *s) {

switch(Serial_Address(s)) /*判断地址是否正确*/

{

case 0x02: break; case 0x01:

=

=

/*广播地址999999999999H*/ /*正常地址*/

switch(*(s+6)) {

/*进行密码修改*/ case 0x0f:

if(~Serial_Password(s+8)) /*密码是否正确*/

return 0; /*错误,返回*/

ISendStr(CAT24W08,0x06,s+12,4);/*存取新密码*/

Delay_T(5);

/*构造返回数据帧*/

w

break; case 0x01: /*读数据*/ break; case 0x04: /*写数据*/ break; default:

break;

/*其他命令*/

.wwIRcvStr(CAT24W08,0x00,s,6); /*读取电表通讯地址*/

IRcvStr(CAT24W08,0x06,s+8,4); /*读取存取的密码*/

(*(s+6))|0x80;(*(s+7))0x04; /*存入命令码及长度字节*/ TXD_Int(s); /*发送一帧数据*/

d15.jpten}

break; case 0x00:

/*地址错误*/

}

return 1;

return 0; break;

/*帧执行正确,返回*/

}

/********************************************************************

37

本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com

通讯主函数 原型:void Serial_Command(); 功能:执行通讯命令 入口参数:无 出口参数:无

********************************************************************/

void Serial_Command()

{ if(Command_status1&0x04) /*通讯事件发送*/ {

if(~Serial_Command_Run(Serial_buf)) /*帧执行*/

{ESR=1;Command_status1&=0xfb;return;} /*帧错误,恢复信道功能*/

ESR=1; /*恢复信道功能*/

Command_status1&0xfb; /*j清除通讯处理事件*/

}

}

电表程序主函数 原型:void main(); 功能:完成通讯主流程 入口参数:无 出口参数:无

/********************************************************************

=

********************************************************************/

void main() {

Ini_CPU();

EA=1;

while(1) {

Serial_Command(); } }

w.ww

d15

.jp

ten/*对CPU各个部件初始化*/ /*打开中断开关*/

1.6 RS-485应用要点

1.1.1

合理选用芯片

合理地选择一个高效、合适的RS-485收发器型号,可以有效减少电路设计、网络维护

等后续阶段的工作量。

例如,对外置设备为防止强电磁(雷电)冲击,建议选用SP485E、75LBC184等集成ESD增强保护功能的RS-485收发器;对节点数要求较多的,可选用SP485R增强型1/10单位负载RS-485收发器;对于3V的应用系统,可以选用3V的RS-485收发器,比如SP3483芯片。

38

本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com

1.1.2

终端匹配电阻

为了匹配网络的通讯阻抗,减少由于不匹配而引起的反射、吸收噪声,有效抑制噪声干

扰,提高RS-485通讯的可靠性,需要在RS-485网络的2个端点各安装1个终端匹配电阻。终端匹配电阻的大小由传输电缆的特性阻抗所决定。例如,RS-485网络通常采用双绞线或屏蔽双绞线作为传输介质,其特性阻抗为120Ω,因此,RS-485总线上的两个端点也应各安装1个120Ω的终端匹配电阻。

匹配电阻要消耗较大电流,不适用于功耗限制严格的系统。在特殊的场合,可以考虑比较省电的并联“RC”匹配方案,可以节省大部分功率,但电容C的取值是个难点,需要在功耗和匹配质量间进行折衷。

1.1.3

应用层通信协议

RS-485收发器仅能够用于实现RS-485网络的物理层。在一个实际运行的RS-485网络中,还需要编制基于应用层的通讯协议,以完成预定功能的目标间数据通讯。

由RS-485网络的传输特性决定,任一时刻在同一物理连接网络中只能够存在一个发送节点,多节点同时发送可能会导致RS-485总线出现竞争“锁定”;因此,只可以选择单主多从通讯协议作为RS-485网络的应用层通信协议,比如ModBus协议,或者其他“单主/多从”模式的通讯协议。

一般来说,通讯协议中规定的数据包格式由引导码、长度码、地址码、命令码、数据、校验码、尾码组成。

1.1.4

3V-5V系统的连接

通常,5V的应用系统可以选择5V的RS-485收发器,比如SP485、SP485E、SP485R、SP490、SP491等RS-485收发器或RS-422收发器;而3V的应用系统应选择3V的RS-485收发器,比如SP3485、SP3481、SP3490、SP3491等RS-485收发器或RS-422收发器。合适的器件选择将提供适合的电平匹配,保障系统能够可靠工作。

同时,大多数3V、3.3V的微处理器都可以直接驱动Sipex公司的5V系列RS-485收发器芯片,例如PHILIPS的LPC900系列8位MCU芯片、LPC2000系列32位ARM芯片,技术的关键在于应用系统中微处理器的I/O电平容限。

下面以3V、5V混合系统为例,说明不同电平器件接口情况。为保证在混合电压系统中数据交换的可靠性,必须满足输入转换电平的要求,但又不能超过输入电压的限度。各种转换电平的要求如下:

TTL电平:输入高电平VIH为2V以上;输入低电平VIL为0.8V以下。 CMOS电平:VIH为0.7×VCC以上;VIL为0.3×VCC以下。

例如VCC为5V±0.5V的系统,CMOS的输入电压VIH至少是3.85V,而VIL必须小于1.35V。目前大多数所接触到微处理器芯片都是采用CMOS工艺。例如,参考SP485R芯片数据手册,其逻辑输入的高电平VIH为2V以上,低电平VIL为0.8V以下;逻辑输出的高电平VOH为2.4V以上,低电平VOL为0.4V以下。因此,SP485R芯片可以与大多数微处理器芯片直接连接。

其实,可以用以下原则来考虑3V、5V混合系统:5V TTL器件可以驱动3V TTL输入;3V CMOS/TTL器件驱动5V TTL的输入端也都是完全可以的;当用5V CMOS器件来驱动3V TTL输入时,必须小心选择,当选用的3V接收器件应具有5V的I/O容限时才可以实现;

w.wwd15.jpten 39

RS485使用手册与指南

广州周立功单片机发展有限公司Tel:(020)3873097738730977Fax:38730925http://www.zlgmcu.comSBUFSerial_data;while(!TI);TI=0;}/*发送一个字节,并进行偶校验*//**********************
推荐度:
点击下载文档文档为doc格式
4yr5b96mxg8n6j487kif
领取福利

微信扫码领取福利

微信扫码分享