OTP单片机调试工具之—单线数据编码

news2025/3/16 8:16:34

         OTP单片机调试工具在实现过程中离不开单线数据的传输,那么使用哪一种方式的数据编码会比较好呢?

       我所了解的主要有以下三种:

       1.UART(串口),这种方式在单片机和pc之间进行传输都非常常见,效率比较高,但是受标准波特率的条件限制,必须配合相应的晶体才能达到比较高的速率;其实要是单片机与单片机之前进行数据传输,那么可以无视标准波特率限制,可以自定义波特率。

这里用应广单片机为例,用应广的IDE可以生成通信代码。

/*这一段是通过宏定义和预编译,检测在当前时钟下,是否可以实现标准波特率通信*/
System_Clock    =>    8000000;
FPPA_Duty        =>    _SYS(INC.FPPA_NUM);    // Single FPPA = 1, Mult FPPA = 2 or 4/8/...
.errnz    FPPA_Duty > 2    //    Only for 1 /2 FPPA, not for more FPPAs

Baud_Rate        =>    115200;
/*
UART_Delay        =>    (System_Clock / FPPA_Duty) / Baud_Rate;

    if    System_Clock    =    8,000.000 Hz
        FPPA_Duty        =    /16
    so    FPPA_Clock        =    System_Clock / FPPA_Duty    =    500.000    Hz

    if    Baud_Rate        =    19200
    so    UART_Delay        =    500.000 / 19200 = 26.0416...
    so    match, 26 cycles send one bit.    < 0.5%

    if    Baud_Rate        =    38400
    so    UART_Delay        =    500.000 / 38400 = 13.02083...
    so    match, 13 cycles send one bit.    < 0.5%

    if    Baud_Rate        =    56000
?    so    UART_Delay        =    500.000 / 56000 = 8.9285...        <    1.0%

    if    Baud_Rate        =    57600
X    so    UART_Delay        =    500.000 / 57600 = 8.6805...        :    fail
*/
UART_Delay        =>    ( (System_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate;
//    + (Baud_Rate/2) : to round up or down

Test_V0            =>    System_Clock / 1000 * 995;
Test_V1            =>    UART_Delay * Baud_Rate * FPPA_Duty;
Test_V2            =>    System_Clock / 1000 * 1005;

#if    (Test_V1 < Test_V0) || (Test_V1 > Test_V2)
    .echo    %Test_V0 <= %Test_V1 <= %Test_V2
    .error    Baud_Rate do not match to System Clock
#endif

UART_Out        BIT    PB.0;
UART_In            BIT    PB.1;

/*实际发送代码*/

static    void    UART_Send (void)
{
    BYTE    cnt;
    BYTE    UART_Data_Out;

    UART_Data_Out    =    A;

    //    Start Bit
    set0    UART_Out;                //    1

    #if    FPPA_Duty == 1
        cnt    =    8;                        //    2 ~ 3
        .Delay    3;                        //    4 ~ 6
        do
        {    //    Data Bit * 8
            .Delay    UART_Delay - 10;
            sr        UART_Data_Out;        //    7
            if (CF)
            {
                nop;                    //    10
                UART_Out    =    1;        //    1
            }
            else
            {
                UART_Out    =    0;        //    1
                .delay    2;                //    2 ~ 3
            }
        } while (--cnt);                //    4 ~ 6
        .Delay    UART_Delay - 5;
    #else
        .Delay    UART_Delay - 4;
        cnt    =    8;                        //    2 ~ 3

        //    Data Bit * 8
        do
        {
            sr        UART_Data_Out;        //    4        4
            swapc    UART_Out;            //            1
            .Delay    UART_Delay - 4;
        } while (--cnt);                //            2, 3

        .Delay    2;                        //            3 ~ 4
    #endif

    //    Stop Bit
    set1    UART_Out;                //    1
    .Delay    2 * UART_Delay - 2;
}                                    //    2

       主要是为了能够适配标准波特率,看起来代码不少,实际核心代码不多。如果是自定义波特率,那么会简单很多,只要是时序对得上就好了。这种方式的好处就是效率比较高,但是要求收发双方要时钟同步。

2,使用类1-wire总线协议,实现方式如下


/*1wire 发送*/
void  Wire1_Send_Byte(void)
{
     byte ucCnt;
     ucCnt=8;
     while(ucCnt)
     {
          /*起始位*/
          UART_Tx=1;
          /*移位*/
          src UartTxBuf;
          
          /*根据需要传输的数据输出对应电平*/
          swapc UART_Tx;
          .delay 6;
          
          /*输出低电平*/
          UART_Tx=0;
          ucCnt--;
      }    
}

这种方式是使用了归零码,这种方式的好处就是能够自同步,方便接端进行解码。但是效率不高

3.使用红外遥控编码,其实这种方式和上述类单总线方式很相像,感觉好像是高低电平反过来就是了。

发送实现方式:用这个Wire1_Send_Byte()代码改一下就好了。

以上就是3种常见的单线数据传输方式,可以根据实际需要,选择其中一种方式作为数据传输使用。感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2315906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基础到进阶企业技巧(二)

在 Java 学习的旅程中&#xff0c;我们逐步探索了其丰富的知识体系&#xff0c;从基础的数据类型、字符串操作&#xff0c;到流程控制、运算符的运用&#xff0c;每一步都为我们构建强大的编程能力奠定基石。同时&#xff0c;了解这些知识在 Java 全栈开发中的应用场景&#xf…

Google最新生图模型Gemini-2.0-Flash-Exp免费用

Google发布新生图模型 Google释放出最新生图模型&#xff0c;在发布说明中提到&#xff1a; 2025年3月12日 在 Gemini-2.0-Flash-Exp 中发布原生图像输出功能 Gemini 2.0 Flash Experimental 模型发布&#xff0c;支持原生图像输出功能。开发者能够使用 Gemini 进行图像输出和…

leecode695.岛屿的最大面积

跟求岛屿数量的题目差不多&#xff0c;依旧是深度搜索或者广度搜索问题 class Solution { private:int maxAreaOfIsland(vector<vector<int>>& grid,vector<vector<bool>>& visited,int x,int y){if(x<0||x>grid.size()||y<0||y>…

助力字体管理,规避设计卡顿的得力工具

在设计领域&#xff0c;字体看似平常&#xff0c;却常常在关键时刻“掉链子”&#xff0c;让设计师们头疼不已。面对海量字体库&#xff0c;找到心仪那款宛如大海捞针&#xff0c;字体安装过多还会造成软件卡顿&#xff0c;这些麻烦事儿&#xff0c;频繁与字体打交道的朋友肯定…

数统院复试来啦,西电数学与统计学院—考研录取情况

4西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分&#xff0c;确实增长浮动比较高&#xff0c;接近30分的水平&#xff0c;因此大家更需要好好去努力&#xf…

Windows功能之FTP服务器搭建

一、创作背景 之前有用linux系统搭建过ftp服务器&#xff0c;最近想着用windows系统也顺便搭建一个&#xff0c;看网上有第三方服务软件一键部署&#xff0c;记得windows可以不借助第三方软件就可以搭建&#xff0c;就想顺便操作试试&#xff0c;结果老是连接不上&#xff0c;费…

leetcode hot100普通动态规划/基础DP

1️⃣1️⃣ 普通动态规划&#xff08;基础 DP&#xff09; 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 题解: 动态规划Dynamic Programming ,在观察动态中找到如何规划解题的步骤…

基于Python的天气预报数据可视化分析系统-Flask+html

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.8数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…

【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)

00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器&#xff0c;同时支持诸如调试&#xff0c;任务执行和版本管…

Redis基本命令手册——五大类型

目录 一&#xff1a;基本操作 二&#xff1a;字符串&#xff08;String&#xff09; 三&#xff1a;哈希&#xff08;Hash) 四&#xff1a;列表&#xff08;List&#xff09; 五&#xff1a;集合&#xff08;Set&#xff09; 六&#xff1a;有序集合&#xff08;Zset&…

历年华中科技大学计算机考研复试上机真题

历年华中科技大学计算机考研复试上机真题 2022华中科技大学计算机考研复试上机真题 2021华中科技大学计算机考研复试上机真题 2019华中科技大学计算机考研复试上机真题 在线评测&#xff1a;https://pgcode.cn 八进制 题目描述 输入一个整数&#xff0c;将其转换成八进制数…

Python----数据分析(Pandas二:一维数组Series,Series的创建,Series的属性,Series中元素的索引与访问)

一、一维数组Series Series&#xff1a;一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象&#xff0c;是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。 仅由一组数据也可产生简单的 Series 对象&#xff0c;用值列表生成 Series …

java数据结构(复杂度)

一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准&#xff0c;除了能处理各种异常&#xff0c;还有就是时间效率&#xff0c;当然&#xff0c;对于一些配置好的电脑数据处理起来就是比配置低的高&#xff0c;但从后期发展来看&#xff0c;当数据量足够庞大时&…

windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC

大家好&#xff0c;我是国货系创始人张云泽&#xff0c;最近不少小伙伴在后台问&#xff1a;“听说Windows协议要到期了&#xff1f;我的电脑会不会变砖&#xff1f;”还有人说&#xff1a;“华为笔记本以后用不了Windows了&#xff1f;鸿蒙系统能用吗&#xff1f;”今天咱们就…

HTML+CSS基础(了解水平)

html 的介绍 学习目标 能够知道html的作用 1. html的定义 2. html的定义 HTML 的全称为&#xff1a;HyperText Mark-up Language, 指的是超文本标记语言。 标记&#xff1a;就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1><…

[设计模式]1_设计模式概览

摘要&#xff1a;设计模式原则、设计模式的划分与简要概括&#xff0c;怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用&#xff0c;后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则&#xff08;语言无关&#xff09; 本质原理图 原…

Elasticsearch集群与日志系统实战部署指南

一、环境规划与初始化配置 1. 服务器资源分配 IP地址部署服务主机名172.25.23.7ES Kafka Zookeeper Kibananode1172.25.23.8ES Kafka Zookeeper Filebeatnode2172.25.23.9Kafka Zookeeper Apache Logstashnode3 系统要求&#xff1a; 配置&#xff1a;4核CPU / 4G…

SFT数据处理部分的思考

SFT数据及处理的业内共识 1&#xff0e;prompt的质量和多样性远重要于数据量级&#xff0c;微调一个 30 b 量级的base model只需要 10 w 量级的数据即可 参考&#xff1a;《LIMA&#xff1a;Less Is More for Alignment》 2&#xff0e;合成数据很重要&#xff01;一般需要通过…

netsh实现TCP端口转发

服务器&#xff1a;192.168.31.9 端口&#xff1a;56000 客户端&#xff1a;192.168.31.2 端口&#xff1a;5600 客户端&#xff08;本地端口5600&#xff09;通过TCP连接服务器的56000端口 PC&#xff1a;192.168.31.5&#xff0c;PC实现客户端和服务器之间56000端口转发 1. …

leetcode 75.颜色分类(荷兰国旗问题)

题目描述 题目分析 本题是经典的「荷兰国旗问题」&#xff0c;由计算机科学家 Edsger W. Dijkstra 首先提出。 要想单独解决这道题本身还是很简单的&#xff0c;统计0、1、2的数量然后按顺序赋值&#xff0c;或者手写一个冒泡排序&#xff0c;whatever。 但是在这一题中我们主…