和单片机之间的串口通信示例006 Mitsubishi FX3U (和单片机之间的关系)

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网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论