云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > RS485多机通信一主机两个下位机

RS485多机通信一主机两个下位机

  • 62 次阅读
  • 3 次下载
  • 2025/6/26 13:41:02

RS485一主机两个下位机,上位机通过发送下位机地址查询下位机两个按钮的状态,仿真时同时在P1口和P2口显示按钮状态 一、原理图

RP1RESPACK-8RP2RESPACK-81234567891U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161719U2地址:0x5118XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617地址:0x5218XTAL2XTAL29RST9RST293031PSENALEEAU31234ROREDEDIMAX487A6SAB7SB293031PSENALEEA23456789U41234ROREDEDIMAX487A6SAB7SB12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52R112012345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52R2120U619XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617123418XTAL2上位机9RST293031PSENALEEAU7ROREDEDIMAX487A6SAB7SB12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52R310k

二、程序

1、上位机程序

#include \

/* 延时t毫秒 */ void delay(uint t) {

uint i; while(t--) {

/* 对于11.0592M时钟,约延时1ms */ for (i=0;i<125;i++) {}

} }

void SendCMD(unsigned char Dbyte)//UART0发送一个字节 { RS487wr=1; TI = 0; }

void SendADDR(unsigned char Dbyte)//UART0发送一个字节 {

RS487wr=1; TI = 0; }

TB8 = 1; SBUF = Dbyte; while(!TI); TI = 0;

// 发送地址帧 // 发送长度

TB8 = 0;

SBUF = Dbyte; while(!TI); TI = 0;

// 发送数据帧 // 发送长度

uchar ReciveUart(void) { }

void init_serial() { TMOD = 0x20;

SCON = 0xd0; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1;

PCON = 0x00;

// SMOD=0

uchar temp; RS487wr=0; REN=1; RI = 0; while(!RI); temp = SBUF; RI = 0;

return temp;

}

/* 主程序 */ void main() { uchar i = 0;

uchar addr_tmp; uchar data_tmp; init_serial(); EA = 1;

// 串口初始化

// 开所有中断

/* 发送地址帧并接收应答信息,如果接收的信号与发送的地址信息不同,则重新发送地址帧 */ while(1) {

//这段程序无效

addr=BASE_ADDR; //下位机地址初值(第一个下位机地址) addr_tmp = addr-1; while(addr_tmp!=addr) {

/* 发送从机地址 */ SendADDR(addr); /* 接收从机应答 */

addr_tmp=ReciveUart(); }

SendCMD(DataCMD); //给下位机发送 传输端口状态信息 data_tmp=ReciveUart();//接收下位机端口信息 P1= data_tmp;

addr=BASE_ADDR+1; //下位机地址2初值(第2个下位机地址) addr_tmp = addr-1; while(addr_tmp!=addr) { }

/* 发送从机地址 */ SendADDR(addr); /* 接收从机应答 */ addr_tmp=ReciveUart();

SendCMD(DataCMD); //给下位机发送 传输端口状态信息 data_tmp=ReciveUart();//接收下位机端口信息 P2=data_tmp; }

}

2)下位机程序 #include \

/* 延时t毫秒 */ void delay(uint t) {

}

uint i;

while(t--) { /* 对于11.0592M时钟,约延时1ms */ for (i=0;i<125;i++) }

{}

void SendCMD(unsigned char Dbyte)//UART0发送一个字节 {

RS487wr=1; TI = 0; TB8 = 0;

// 发送数据帧

// 发送长度

// delay(20); SBUF = Dbyte; }

while(!TI); TI = 0;

void SendADDR(unsigned char Dbyte)//UART0发送一个字节 {

RS487wr=1; TI = 0; TB8 = 1; delay(20); }

SBUF = Dbyte; while(!TI); TI = 0;

// 发送地址帧

// 发送长度

uchar ReciveUart(void) { uchar temp;

RS487wr=0; REN=1; RI = 0; delay(20); while(!RI); temp = SBUF; RI = 0; delay(20); return temp;

//

//

}

/* 串口初始化函数 */

搜索更多关于: RS485多机通信一主机两个下位机 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

RS485一主机两个下位机,上位机通过发送下位机地址查询下位机两个按钮的状态,仿真时同时在P1口和P2口显示按钮状态 一、原理图 RP1RESPACK-8RP2RESPACK-81234567891U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161719U2地址:0x5118XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com