#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全双工通信.rar
共81个文件
lnp:9个
c:9个
hex:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 64 浏览量
2023-05-07
13:28:53
上传
评论
收藏 137KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
单片机程序 485全双工通信.rar (81个子文件)
0035、485全双工通信
485通信调试
接受1.lnp 36B
通信.DSN 70KB
00.c 1KB
接受1.hex 286B
00.OBJ 1KB
通信.PWI 963B
接受1 961B
接受1.mpj 2KB
发送1.cfg 160B
01.OBJ 1KB
发送1.M51 5KB
接受1.cfg 163B
01.c 851B
发送1 1KB
Last Loaded 通信.DBK 70KB
接受1.M51 4KB
发送1.mpj 2KB
发送1.lnp 36B
发送1.hex 342B
485自动收发通信
接受1.lnp 36B
发送.M51 11KB
发送.hex 2KB
通信.DSN 77KB
00.c 6KB
发送 2KB
发送.mpj 2KB
接受1.hex 1KB
00.OBJ 3KB
接受2.hex 1KB
接受2.mpj 2KB
02.OBJ 3KB
通信.PWI 1KB
接受1 2KB
接受1.mpj 2KB
接受2.M51 9KB
01.OBJ 3KB
接受2 2KB
接受2.cfg 164B
接受1.cfg 164B
01.c 5KB
发送.lnp 35B
发送.cfg 247B
02.c 5KB
接受2.lnp 36B
Last Loaded 通信.DBK 77KB
接受1.M51 9KB
485多数据通信
发送.M51 12KB
接受.hex 767B
发送.hex 2KB
00.c 5KB
发送 2KB
接受.M51 8KB
发送.mpj 2KB
00.OBJ 3KB
01.OBJ 2KB
接受.mpj 2KB
01.c 3KB
接受.lnp 35B
发送.lnp 35B
接受 2KB
接受.cfg 162B
发送.cfg 161B
485单数据通信
发送.M51 5KB
接受.hex 366B
发送.hex 376B
通信.DSN 82KB
00.c 2KB
发送 1KB
接受.M51 5KB
发送.mpj 2KB
00.OBJ 1KB
通信.PWI 963B
01.OBJ 1KB
接受.mpj 2KB
01.c 1KB
接受.lnp 35B
发送.lnp 35B
接受 1KB
接受.cfg 162B
发送.cfg 162B
Last Loaded 通信.DBK 82KB
共 81 条
- 1
资源评论
荣华富贵8
- 粉丝: 215
- 资源: 7653
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功