#include <reg51.h>
#include <absacc.h>
#define TR 1
#define uchar unsigned char
#define uint unsigned int
uchar idata buf[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //从机1发送的数据
uchar idata buf1[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x09}; //从机2发送的数据
uchar idata buf2[3]; //接受从机的数据
uchar data1,data2,data3;
uchar pf,addr,TRR,count,count1;
uchar flag,flag1,flag2=3;
uchar i;
sbit key1=P2^0;
/************延时程序************/
void delay(uchar k)
{
uchar j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
void init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
TR1=1;
SCON=0xd0;
}
void send(uchar addr,uchar TRR)
{
TB8=1;
key1=1; //TB8置1
SBUF=addr; //发送从机的地址
while(TI==0)
{
;
}
TI=0;
key1=0;
while(RI==0)
{
;
}
data1=SBUF; //接受从机地址并检验
RI=0;
if(data1!=addr) //从机地址有错误
{
flag2=0;
}
else{ //从机地址正确--------是发送数据标志0X01
if(TRR==0x01)
{
TB8=0; //TB8置0
key1=1;
SBUF=TRR;
while(TI==0)
{
;
}
TI=0;
key1=0;
while(RI==0) //接受从机状态
{
;
}
data3=SBUF;
RI=0;
if(data3!=TRR) //从机没有就绪
{
flag2=0;
}
else{ //从机就绪
pf=0; //清效验位
key1=1;
for(i=0;i<=9;i++) //发送数据
{
TB8=0;
SBUF=buf[i];
pf+=buf[i];
while(TI==0)
{
;
}
TI=0;
}
TB8=0;
SBUF=pf; //发送效验和
while(TI==0)
{
;
}
TI=0;
key1=0;
while(RI==0) //主机接受从机是否正确接受数据
{
;
}
data2=SBUF;
RI=0;
if(data2==0xcc) //如果正确结束数据通信
{
flag2=3; //通信结束标志
}
else{
flag2=0; //如果不正确重新通信------即重新通信标志
}
}
}
if(TRR==0x02)
{ //是接受从机数据标志------即TRR=0X0
TB8=0;
key1=1;
SBUF=TRR; //发送接受标志0X02
while(TI==0)
{
;
}
TI=0;
key1=0;
while(RI==0) //接受从机的状态
{
;
}
data3=SBUF;
RI=0;
if(data3!=TRR) //从机没有就绪
{
flag2=0;
}
else{ key1=0; //从机就绪---主机接受数据
pf=0;
for(i=0;i<=2;i++)
{
while(RI==0)
{
;
}
buf2[i]=SBUF; //接受从机发送的数据
pf+=buf2[i];
RI=0;
}
key1=0;
while(RI==0) //接受从机的效验和
{
;
}
data2=SBUF;
RI=0;
if(pf==data2) //比较效验和
{
flag2=3; //效验和正确标志
}
else{
flag2=0; //效验和错误标志
}
}
}
}
}
void display(void)
{
if(flag2==3) //如果接受正确开始显示
{
for(i=0;i<=2;i++)
{
P0=buf2[i];
delay(50);
}
}
}
void main(void)
{
delay(500);
init();
count=2;
count1=2;
while(1)
{
while(count!=0)
{
count--;
send(0x03,0x01); //主机---从机1交换数据子函数
send(0x03,0x02);
display();
}
while(count1!=0)
{ count1--;
send(0x04,0x01); //主机---从机1交换数据子函数
send(0x04,0x02);
display();
}
if(count1==0)
{
count1=2;
count=2;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于嵌入式与单片机的485全双工通信设计实现
共81个文件
obj:9个
lnp:9个
hex:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 175 浏览量
2022-04-09
10:05:30
上传
评论
收藏 137KB RAR 举报
温馨提示
基于嵌入式与单片机的485全双工通信设计实现
资源推荐
资源详情
资源评论
收起资源包目录
基于嵌入式与单片机的485全双工通信设计实现.rar (81个子文件)
基于嵌入式与单片机的485全双工通信设计实现
485多数据通信
接受.mpj 2KB
接受.M51 8KB
发送.hex 1KB
00.c 5KB
接受 2KB
发送.mpj 2KB
01.c 3KB
00.OBJ 3KB
接受.hex 746B
接受.cfg 156B
发送.cfg 155B
01.OBJ 2KB
发送.lnp 35B
发送 2KB
接受.lnp 35B
发送.M51 12KB
485单数据通信
接受.mpj 2KB
接受.M51 5KB
发送.hex 364B
00.c 2KB
通信.DSN 82KB
接受 1KB
通信.PWI 963B
发送.mpj 2KB
Last Loaded 通信.DBK 82KB
01.c 1KB
00.OBJ 1KB
接受.hex 354B
接受.cfg 156B
发送.cfg 156B
01.OBJ 1KB
发送.lnp 35B
发送 1KB
接受.lnp 35B
发送.M51 5KB
485自动收发通信
接受1.cfg 158B
接受2 2KB
02.c 5KB
接受1.hex 1KB
发送.hex 1KB
00.c 6KB
接受1 2KB
通信.DSN 77KB
02.OBJ 3KB
接受1.mpj 2KB
接受2.lnp 36B
通信.PWI 1KB
发送.mpj 2KB
Last Loaded 通信.DBK 77KB
01.c 5KB
00.OBJ 3KB
接受1.lnp 36B
接受2.hex 1KB
接受2.M51 9KB
接受2.cfg 158B
接受1.M51 9KB
发送.cfg 238B
01.OBJ 3KB
发送.lnp 35B
发送 2KB
接受2.mpj 2KB
发送.M51 10KB
485通信调试
接受1.cfg 157B
发送1.lnp 36B
发送1.cfg 154B
发送1 1KB
接受1.hex 276B
00.c 1KB
接受1 961B
通信.DSN 70KB
发送1.mpj 2KB
接受1.mpj 2KB
发送1.M51 5KB
通信.PWI 963B
Last Loaded 通信.DBK 70KB
01.c 797B
00.OBJ 1KB
接受1.lnp 36B
发送1.hex 330B
接受1.M51 4KB
01.OBJ 1KB
共 81 条
- 1
资源评论
爱吃苹果的Jemmy
- 粉丝: 84
- 资源: 1134
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功