1. 三菱FX3U-485-BD端子含义
- SDA和RDA短接后即为RS485发送/接收+信号
- SDB和RDB短接后即为RS485发送/接收-信号
- SG即为信号地
2. 单片机串口2通信口端子含义
- 3脚:即为RS485发送/接收+信号
- 8脚:即为RS485发送/接收-信号
3. 通信连接
- 三菱FX3U-485BD之SDA和RDA短接后接单片机串口2的3脚
- 三菱FX3U-485BD之SDB和RDB短接后接单片机串口2的8脚
4. 通信参数设置程序段
波特率9600bps、8位数据位、无校验位、1位停止位、报头为STX、报尾为ETX、8位数据模式
5. 输入X0~X7处理程序
将X0~X7共计8个位组成的1个字节转换为ASCII码最终保持至D1、D2的低8位里
6. RS指令程序
发送缓冲区首地址为D1、发送字节计数为2、接收缓冲区首地址为D11、接收字节计数为0
7. 启动发送程序
- 上电初始化延时1000ms后开始启动发送
- 定时置位M8122,实现定时发送
8. 单片机通信程序所用的头文件
include <reg51.h>
include <stdio.h>
include <stdlib.h>
9. 单片机通信程序所用的简化定义
define STX 0x02
define ETX 0x03
define RS_ADDR 0x01
define RS_DATA_SIZE 2
10. 单片机通信程序所用的函数定义
void Delay(u16 time);
void ASCIIToHex(u8 p, u16 len);
11. 单片机通信程序所用的变量定义
u8 TxBuf[RS_DATA_SIZE];
u8 RxBuf[RS_DATA_SIZE];
12. 单片机通信程序主函数
void main()
{
// 初始化定时器
TMOD = 0x11;
TH1 = 0x00;
TL1 = 0xFF;
TR1 = 1;
// 初始化串口
SCON = 0x52;
PCON |= 0x80;
// 上电初始化延时
Delay(1000);
// 启动发送程序
while (1)
{
TxBuf[0] = STX;
TxBuf[1] = RS_ADDR;
// 将X0~X7转换为ASCII码
ASCIIToHex(TxBuf, RS_DATA_SIZE);
TxBuf[RS_DATA_SIZE] = ETX;
// 发送数据
for (u8i = 0; i < RS_DATA_SIZE + 2; i++)
{
while (!TI);
TI = 0;
SBUF = TxBuf[i];
}
// 延时
Delay(100);
}
}
13. 单片机通信程序延时子函数
void Delay(u16 time)
{
u16 i;
while (time--)
{
for (i = 0; i < 12000; i++);
}
}
14. 单片机通信程序ASCII码转16进制子函数
void ASCIIToHex(u8 p, u16 len)
{
u8 i, temp;
for (i = 0; i < len; i++)
{
temp = p;
temp -= 0x30;
temp <<= 4;
p++ = temp;
temp = p;
temp -= 0x30;
p++ = temp;
}
}
15. 三菱PLC和单片机通信程序提供下载
下载本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!
添加新评论