码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能


    基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能

    • STC12C5A60S2系列1T 8051单片机管脚图
    • STC12C5A60S2系列1T 8051单片机串口通信介绍
    • STC12C5A60S2系列1T 8051单片机串口通信的结构
    • 基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表
      • 基于STC12C5A60S2系列1T 8051单片机串口通信用到的特殊功能寄存器
        • STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR
        • STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR1
        • 串口1控制寄存器SCON
        • 串口电源控制寄存器PCON
        • 串口数据缓冲寄存器SBUF
        • 串口辅助寄存器AUXR
        • 串口中断寄存器
    • 基于STC12C5A60S2系列1T 8051单片机串口1通信工作模式
      • 串口1通信模式0
      • 串口1通信模式1
      • 串口1通信模式2
      • 串口1通信模式3
    • 串口通信波特率设置
    • 基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能
      • 串口通信简单介绍
      • 基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能电路连接及工作原理
        • USB转RS485 取到A B电平
        • TTL转RS485 取到A B电平作为逻辑电平
    • 基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能编程
    • 基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能实现结果
      • 串口助手通过RS485通信给单片机发送数据
      • 单片机通过RS485通信给串口助手发送数据

    STC12C5A60S2系列1T 8051单片机管脚图

    在这里插入图片描述在这里插入图片描述# STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置在这里插入图片描述# STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍在这里插入图片描述在这里插入图片描述

    STC12C5A60S2系列1T 8051单片机串口通信介绍

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    STC12C5A60S2系列1T 8051单片机串口通信的结构

    基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表

    在这里插入图片描述

    基于STC12C5A60S2系列1T 8051单片机串口通信用到的特殊功能寄存器

    STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR

    在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率

    STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR1

    在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信引脚切换

    串口1控制寄存器SCON

    在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
    (1)、设置串口通信工作模式
    (2)、设置串口方式2或方式3多机通信
    (3)、设置串口通信允许接收
    (4)、设置串口通信在方式2或方式3下发送第9位数据
    (5)、设置串口通信通信在方式2或方式3下接收第9位数据
    (6)、设置串口通信发送中断请求
    (7)、设置串口通信接收中断请求

    串口电源控制寄存器PCON

    在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
    (1)、设置串口通信波特率选择
    (2)、设置串口通信帧错误检测有效控制

    串口数据缓冲寄存器SBUF

    在这里插入图片描述在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信发送或接收数据

    串口辅助寄存器AUXR

    在这里插入图片描述在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率

    串口中断寄存器

    在这里插入图片描述
    作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信中断允许、中断优先级

    基于STC12C5A60S2系列1T 8051单片机串口1通信工作模式

    串口1通信模式0

    在这里插入图片描述

    串口1通信模式1

    在这里插入图片描述在这里插入图片描述

    串口1通信模式2

    在这里插入图片描述在这里插入图片描述

    串口1通信模式3

    在这里插入图片描述在这里插入图片描述

    串口通信波特率设置

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能

    串口通信简单介绍

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能电路连接及工作原理

    USB转RS485 取到A B电平

    在这里插入图片描述

    TTL转RS485 取到A B电平作为逻辑电平

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能编程

    main.c

    #include <stc12c5a60s2.h>
    #include "Uart.h"
    #include "Timer0.h"
    #include "Key.h"
    #include "Digitron.h"
    #include "stdio.h"
    #define uchar unsigned char//自定义无符号字符型为uchar
    #define uint unsigned int//自定义无符号整数型为uint 
    sbit LED = P1^7;//声明单片机P1.7端口为LED接口
     void PortModeSet()//端口模式设置函数
    {
       
      P0M1 = 0x00;
      P0M0 = 0x00;
      P1M1 = 0x00;
      P1M0 = 0x00;
      P2M1 = 0x00;
      P2M0 = 0x00;
      P3M1 = 0x00;
      P3M0 = 0x00;
      P4M1 = 0x00;
      P4M0 = 0x00;
     }
     void main()//主函数
    {
       
      PortModeSet();//端口模式设置函数
      Uart1Init();//串行口1工作模式1的8位串行口波特率可变初始化函数 波特率为9600bps 晶振为12MHz
      Timer0Init();//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHz
      DigitronBootDisplay();//数码管开机显示函数
      while(1)//主循环
     {
        
       KeyScanResult();//按键扫描结果函数
       if(ReceiveOverDataFlag == 1)//判断接收完数据标志位变量是否置1 即主单片机串行口数据缓存器已经接收完从单片机发送来的数据
      {
       
        ReceiveOverDataFlag = 0;//接收完数据标志位变量清0
    	LED = 0;//点亮LED灯 表示主单片机成功接收从单片机发送来的数据
    //	RS485DIR = 1;//启动RS485发送数据控制
    //	KeyPressNumber = ReceiveData;//接收数据变量含有的数值赋给按键按下数值变量 即主单片机串行口数据缓存器接收从单片机发送来的数据赋给按键按下数值变量
    //    RS485DIR = 1;//启动RS485发送数据控制
    //    ReceiveData = ReceiveData + 1;//接收数据变量累加
    //    MasterSendData(ReceiveData);//主单片机发送数据函数 即主单片机给从单片机发送数据
    //    RS485DIR = 0;//启动RS485接收数据控制 准备下一次收发数据循环
       }
      }
     }
    

    Uart.c

    /*****关于8051系列单片机定时器溢出率、波特率和定时器初值(定时计数初值)之间计算的知识点*****/
    /****
    一、定时器溢出率计算公式
    1、定时器溢出率:定时器每秒溢出的次数
    2、定时器溢出率计算公式表
        定时方式           分频方式                      公式
    方式1:16位定时器  12分频(即12T 默认值)  Ft=晶振频率/12/(65536-定时器初值)
    方式2:8位定时器   12分频(即12T 默认值)  Ft=晶振频率/12/(256-定时器初值)
    方式1:16位定时器      1分频(即1T)      Ft=晶振频率/1/(65536-定时器初值)
    方式2:8位定时器       1分频(即1T)      Ft=晶振频率/1/(256-定时器初值)
    二、波特率计算公式
    1、波特率:每秒传输二进制位数的多少
    2、波特率计算公式表
        定时方式             分频方式                        公式
    方式1:16位定时器T1  12分频(即12T 默认值)  波特率=晶振频率/12/(65536-定时器初值)/4
    方式2:8位定时器T1   12分频(即12T 默认值)  波特率=晶振频率/12/(256-定时器初值)*2^SMOD/32
    方式1:16位定时器T2  12分频(即12T 默认值)  波特率=晶振频率/12/(65536-定时器初值)/4
    方式1:16位定时器T1      1分频(即1T)      波特率=晶振频率/1/(65536-定时器初值)/4
    方式2:8位定时器T1       1分频(即1T)      波特率=晶振频率/1/(256-定时器初值)*2^SMOD/32
    方式1:16位定时器T2      1分频(即1T)      波特率=晶振频率/1/(65536-定时器初值)/4
    三、根据波特率计算定时器初值(定时器定时计数)
        定时方式             分频方式                        公式
    方式1:16位定时器T1  12分频(即12T 默认值)  定时器初值(定时计数)=65536-晶振频率/(48*波特率)
    方式2:8位定时器T1   12分频(即12T 默认值)  定时器初值(定时计数)=256-晶振频率*2^SMOD/(384*波特率)
    方式1:16位定时器T2  12分频(即12T 默认值)  定时器初值(定时计数)=65536-晶振频率/(48*波特率)
    方式1:16位定时器T1      1分频(即1T)      定时器初值(定时计数)=65536-晶振频率/(4*波特率)
    方式2:8位定时器T1       1分频(即1T)      定时器初值(定时计数)=256-晶振频率*2^SMOD/(32*波特率)
    方式1:16位定时器T2      1分频(即1T)      定时器初值(定时计数)=65536-晶振频率/(4*波特率)
    *****/
    #include "Uart.h"
    #include "stdio.h"
    #define	uchar unsigned char	//定义无符号字符
    #define	uint  unsigned int	//定义无符号整形
    bit ReceiveOverDataFlag = 0;//定义接收完数据标志位变量为0
    uchar ReceiveData = 0;//定义接收数据变量为0
    uint DecomposeDataShiWei,DecomposeDataGeWei;//声明分解数据变量十位 分解数据变量个位
     void Uart1Init()//串行口1工作模式1的8位串行口波特率可变初始化函数 波特率为9600bps 晶振为12MHz
    {
       
      SCON = 0x50;//工作模式1的8位串行口波特率可变
      AUXR &= 0xBF;//定时器时钟12T模式
      AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
      PCON &= 0x7f;//波特率不加倍
      TMOD &= 0x0f;//定时器/计数器工作模式清0
      TMOD |= 0x20;//设定定时器/计数器为定时器 工作模式为8位自动重装定时器1模式2
      TH1 = 0xfd;//设定定时器1高八位初值
      TL1 = 0xfd;//设定定时器1低八位初值
      ET1 = 0;//禁止定时器1中断
      ES 
  • 相关阅读:
    vue cli3.0 怎么配置 后端请求接口域名,区别打包环境及 vue项目域名的问题
    Web程序设计-实验05 DOM与BOM编程
    IAR 下的雅特力AT32F415CBT7工程创建与设置
    2023智能科学工程毕业设计选题有哪些
    mysql查看sql日志操作
    深度学习笔记之优化算法(六)RMSprop算法的简单认识
    盒子模型详解
    Spring Boot之统一处理异常
    【系统设计系列】 回顾可扩展性
    Flutter笔记:滚动之-无限滚动与动态加载的实现
  • 原文地址:https://blog.csdn.net/CWQLTYH/article/details/139466129
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号