485数据传输c语言程序,基于RS485总线的PC与多个单片机通信的C语言程序

思路:

PC方面:可以用MSCOMM控件先发一个字符表示接收地址,后延迟1ms,(注意PC端在

485通讯在字符发送过程中一定要加延迟,这是我多次测试的总结,如果是用调试助手的话,

他内部代码已经加过延迟了,就不必考虑这个问题)再发控制指令,初学者建议直接用调试

助手

单片机方面:首先对接收数据进行核对,如果不是本地地址,放弃,如果是本地地址,在检

测命令是否正确,如果正确,做出处理后返回PC本地地址并发送命令

我举个例子教你怎么玩多站通讯,下面是我已经通过测试的一个程序

#include //选用晶振11.0592MHz

#include

#define DATA51 DBYTE[0x80] //80H存数据

#define AddressID 0x31 //本机地址1

sbit RS485E=P3^7; //定义485的使能脚// RS5485E=0为接收状态 RS5485E=1为发送状态

sbit MAX485_DIR=P3^7;

main()

{

//****************通讯设置

SCON = 0xF0; //REN=1允许串行接受状态,串口工作模式3,SM2=1

TMOD|= 0x20; //定时器工作方式2

PCON|= 0x80; //波特率提高一倍

IP=0x10; //串口优先级高

// TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位

无(11.0592)

TH1 = 0xf4; //fa // //baud*2 /* 波特率4800、数据位8、停止位1。效验

位无 (11.0592M)

TL1 = 0xf4;

TR1 = 1; //开启定时器1 EA = 1; // 开总中断

ES = 1; //开串口中断

RS485E=0; // RS5485E=0为接收状态 RS5485E=1为发送状态

while(1);

}

void counter4(void) interrupt 4 using 2 //串口中断

{

while(RI==0);

RI=0;

if(SBUF==AddressID)

{

while(RI==0);

RI=0;

if(SBUF==0x01) //发送指令

{

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值