MAX485的功能Word格式.docx

上传人:b****6 文档编号:16227168 上传时间:2022-11-21 格式:DOCX 页数:7 大小:39.57KB
下载 相关 举报
MAX485的功能Word格式.docx_第1页
第1页 / 共7页
MAX485的功能Word格式.docx_第2页
第2页 / 共7页
MAX485的功能Word格式.docx_第3页
第3页 / 共7页
MAX485的功能Word格式.docx_第4页
第4页 / 共7页
MAX485的功能Word格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

MAX485的功能Word格式.docx

《MAX485的功能Word格式.docx》由会员分享,可在线阅读,更多相关《MAX485的功能Word格式.docx(7页珍藏版)》请在冰豆网上搜索。

MAX485的功能Word格式.docx

在与单片机连接时接线非常简单。

只需要一个信号控制MAX485的接收和发送即可。

同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。

引脚(管脚)图及工作电路

  

计算机是不能直接识别RS485通讯信号的。

我简单地讲一下,这应该是两个电路,一个是单片机的电路先将RS485协议定的信号,通过MAX485接收。

MAX485是通过两个引脚RE(2脚)和DE(3脚)来控制数据的输入和输出。

当RE为低电平时,MAX485数据输入有效;

当DE为高电平时,MAX485数据输出有效。

在半双工使用中,通常可以将这两个脚直接相连,由单片机输出的高低电平控制一块7404让MAX485在接收和发送状态之间转换并且通过7404成RS485到TTL的电平转换。

另一个电路就简单了MAX485加MAX232即可完成RS485到PC机的RS232数据转换了。

程序就用普通的单片机串行程序就行。

MAX引脚(管脚)图及工作电路(3张)

AX485是用于RS-485与RS-422通信的低功耗收发器。

MAX485的驱动器摆率不受限制,可以实现最高2.5Mbps的传输速率。

这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120μA至500μA之间。

驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态。

接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。

具有较高的抗干扰性能。

MAX485是市面上最为常见的RS422芯片,亦是用量最大的RS422芯片,性价比高,优质,供货稳定是大部分厂家采用它的主要原因。

485与89C52图,供参考。

赞同

12

|评论485-1脚-----------》MCUp3.0

485-2,3脚---------》MCUp3.3作为收发数据的使能短,H为发数据L为收数据

485-4脚-----------》MCUP3.1

485-5脚-----------》GND

485-6脚-----------》A

485-7脚-----------》B

485-8脚-----------》VCC485的多机通信//-----------------------函数声明,变量定义---------------------

#include<

reg51.h>

sbitRE_DE=P1^0;

#defineCOUNT10//定义接收缓冲区大小

#defineSlaver_NUM10

unsignedcharbdataflag;

//在可位寻址去定义一个标志变量

sbittime_over_flag=flag^0;

//接收超时标志

unsignedcharbuffer[COUNT];

//定义缓冲区

unsignedcharpoint;

//定义缓冲区位置指示

unsignedcharSlave_AD[Slaver_NUM];

//定义有效地址存放区

unsignedcharADD_num;

//有效地址个数

unsignedcharidatacount_10ms;

//用于表示有多少次10ms中断

unsignedcharidatasend_data[7]={

0x31,0x32,0x33,0x34,0x35,0x36,0x37};

//与定义发送数据,共7位

voidUART_init();

//串口初始化函数

voidCOM_send(void);

//串口接收函数

unsignedcharCLU_checkdata(void);

//计算校验位函数

//---------------------------------------------------------------

//函数名称:

UART_init()串口初始化函数

//函数功能:

在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s

//串口接收中断允许,发送中断禁止,设定定时器中断允许

voidUART_init()

{

//初始化串行设置

SCON=0x58;

//选择串口工作方式为1,打开接收允许,TB8=1

TMOD=0x21;

//定时器1工作在方式2,定时器0工作在方式1

TR1=1;

//启动定时器T1

ES=1;

//允许串行口中断

PS=1;

//设计串行口中断优先级

//初始化定时器1

TH1=0xfd;

//实现波特率9600(系统时钟11.0592MHZ)

ET1=0;

//定时器1中断禁止

}

timer0_init()初始化定时器0

设置timer0工作模式

voidtimer0_init()

time_over_flag=0;

count_10ms=0;

ADD_num=0;

TL0=0x0F0;

//T0用于产生10ms的中断

TH0=0x0D8;

//50次T0中断产生1次超时溢出

ET0=1;

//允许定时器0中断

system_init()系统初始化

调用串口、定时器初始化函数,完成系统初始化

voidsystem_init(void)

//系统总设置

UART_init();

timer0_init();

EA=1;

//单片机中断允许

com_interrup()串口接收中断处理函数

接收包括起始位"

S"

在内的十位数据到数据缓冲区

com_interrupt(void)interrupt4using3

unsignedcharRECEIVR_buffer;

if(RI)//处理接收中断

{RI=0;

//清除中断标志位

RECEIVR_buffer=SBUF;

//接收串口数据

if(point==0)//如果还没有接收到起始位

{

if(RECEIVR_b

 

本文来自:

高校自动化网(W)详细出处参考(转载请保留本链接):

uffer==0xFE) 

//判断是否起始标志位

buffer[point++]=RECEIVR_buffer;

//把接收到的数据放入接收缓存区

}

else

point=0;

//不是,继续等待起始位

}

elseif(point>

0&

&

point<

10) 

//判断是否接收够十位数据

//不够,把接收到的数据放入接收缓存区

elseif(point==10)

if(RECEIVR_buffer==0xEF) 

//判断结束标志位是否正确

buffer[point]=RECEIVR_buffer;

//把接收到的数据放入接收缓存区

Slave_AD[ADD_num++]=buffer[2];

//把接收到的地址放到地址存储器

//表示该地址有有效设备

elsepoint=0;

 

//缓冲区已满,清除缓存区内数据重新接收

if(TI) 

//串口发送中断

TI=0;

//清除发送中断

timer0_interrup()

定时器T0中断服务程序

//函数说明:

T0枚10ms中断一次,连续中断50次置time_over_flag=1;

timer0_interrupt(void)interrupt1using2

count_10ms++;

if(count_10ms==50)

ET0=0;

//关闭定时器T0中断

TR0=0;

//停止定时器T0

time_over_flag=1;

//设置接收超时标志

count_10ms=0x00;

//10ms计数器复位

else

TL0=0x0F0;

//重装定时器初始值

TH0=0x0D8;

COM_send()串口发送函数

把数据缓冲区的十位数据发送出去

voidCOM_send(void)

RE_DE=1;

//设置MAX483进入发送状态

for(point=0;

=10,TI=1;

point++) 

//连续发送十位数据

//把缓存区的数据都发送到串口

SBUF=buffer[point];

TI=0;

RE_DE=0;

//设置MAX483进入接收状态

write_buffer()

写发送缓冲区十位数据

voidwrite_buffer(unsignedcharslaver_add)

unsignedchari;

TB8=1;

//打开多机通信方式

buffer[0]=0xFE;

buffer[1]=slaver_add;

for(i=2;

i<

9;

i++) 

buffer[i]=send_data[i-2];

buffer[9]=0xEF;

主函数

调度个子函数,完成通信过程

voidmain(void)

unsignedchari=0;

system_init();

//系统初始化

do{ 

//查旬0到10好地址有没有对应设备

write_buffer(i++);

//写查询第i号设备的发送信息

COM_send();

//调用发送函数,完成发送

//完成一次查询,重新初始定时器0,准备下一次查询

while(time_over_flag&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1