中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)

news2025/7/11 12:33:24

文章目录

  • 一、中微单片机烧录与使用
    • 编译软件
    • 烧录软件
    • 下载地址
    • 烧录软件
  • 二、模拟IIC
  • 三、逻辑分析仪下的时序


一、中微单片机烧录与使用

编译软件

中微所使用编译软件为SCMCU_IDE,不过个人不推荐使用这个软件写代码(十分不好用,不能跳转,只能全部搜索一个个查,而且不能替换),大家可以利用VScode打开代码项目文件(直接拖入桌面VScode图标或者打开VScode再打开项目文件),VScode永远的神。
在这里插入图片描述

烧录软件

烧录软件是SCMCU WRITER,买个中微的烧录器直接接好线烧录即可(每次编译完会提醒你代码改变了)
在这里插入图片描述

下载地址

中微官网是:https://www.mcu.com.cn(顺带提一嘴,好牛皮的域名)
进入他的支持界面,开发工具,规格书,DEMO什么的应有尽有。
在这里插入图片描述

烧录软件

在官网下载好软件之后安装即可,进入文件夹即可看到编译软件。
在这里插入图片描述

二、模拟IIC

虽然硬件IIC运行速度很快,但是由于单片机性能受限,并不是所有单片机都有硬件IIC,软件IIC模拟IIC协议通信,进行读写操作,我以中微SC8F5771单片机为例,利用其RB0和RB1口分别作为SDA和SCL口。此处我仅给出大概模板。

void iic_init(void);//iic初始化,调GPIO,也就是选用的sda和scl口,由于最开始要输出,所以设置为输出模式,iic通信最开始都是高电平
void iic_deinit(void);//有初始化肯定有取消初始化,将sda和scl设置为输入模式
void iic_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char date)//iic写入,最为关键的一步,把控协议主体思路
{
	iic_start();
	delay_us();
	write_iic_byte(dev_addr & 0xFE)//iic的地址位最后一位是读写方式,所以是与0xFE,如果忘了就去查一查
	iic_wait_ack();//等待应答
	delay_us();
	write_iicbyte(date);//地址完了就轮到数据
	iic_wait_ack();//等待应答
	delay_us();
	iic_stop();//一次数据写入完成,停止通信
}
void iic_start(void);//开始iic时需要scl和sda置高,然后sda拉低,表明开始,然后再scl拉低,好让sda可以拉高或保持低作为检测的数据。
void iic_stop(void);//停止时需要sda和scl都置高,满足下一次通信的起始状态
void write_iic_byte(unsigned char iic_byte)//一个很经典的写法
{
	unsigned char i=8;
	unsigned char temp;
	unsigned char data;
	data = iic_byte;
	iic_sclk_clr();
	while(i--)
	{
		temp=data>>7;
		data<<1;
		if(temp)
		{
			iic_sdin_set();
		}
		else
		{
			iic_sdin_clr();
		}
		iic_sclk_set();
		delay_3us();
		iic_sclk_clr();
		delay_3us();
		
	}
}
void iic_wait_ack(void);//进行应答

三、逻辑分析仪下的时序

为了让IIC通信更快(该芯片晶振是16MHz的),为了验证其置高低电平和nop、以及空函数调用时间,我利用逻辑分析仪,在while循环里面写了如下代码,观测到的时序如图所示。

   	 			sclk = 1;//delay_us是空的,里面什么都没有,此处只是对比在此单片机中空函数和nop区别时间究竟相差多少
                delay_us();
                delay_us();
                delay_us();
                delay_us();
                delay_us();

                delay_us();
                delay_us();
                delay_us();
                delay_us();
                delay_us();

                delay_us();
                delay_us();
                delay_us();
                delay_us();
                delay_us();

                delay_us();
                delay_us();
                delay_us();
                delay_us();
                delay_us();
                sclk = 0;

                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us

                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us

                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us

                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us
                NOP();//0.25us

在这里插入图片描述

我们可以很清楚的看到高电平之后延时20个空函数,再低电平,执行20个nop指令,最终显示一个周期内,高电平持续33us,低电平持续6.25us,后续又将20个空函数和nop改为1个空函数和1个nop,以及不加n空函数和nop的测试,可以大致得出,置一次高低电平需要2us,一个nop指令花费0.2us-0.25us,一个空函数调用大致在1.2us。
由于时间关系我并没有去验证太多,测出结果可能也不太严谨,学过汇编的同学知道,调用函数时先跳转再返回,以51汇编为例,不同位置的函数使用对应不同的跳转指令,范围越大的跳转指令耗费时间也更久,由于我是跨文件调用,应该是对应汇编中的LCALL长跳转,并且RET返回,所以花费nop指令5-6倍的时间似乎也合理(nop本身就只占一个时钟周期)。

以上为个人分析,无法确定其正确性,仅凭客观数据以及主观猜测,如有错误,请您指正。
非常感谢各位的观看!

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

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

相关文章

Linux搜索查找命令【详细整理】

目录Linux下文件搜索、查找、查看命令findfind 【搜索范围】【选项】​ find /home -name ‘hello.txt’​ find /home -user root​ find / -size 100Mlocate特别说明&#xff1a;locate 文件名whichwhich lsgrep​ 基本语法&#xff1a;grep [选项] 查找内容 源文件grep -niL…

第六章 图论 8 AcWing 1624. 地铁地图

第六章 图论 8 AcWing 1624. 地铁地图 原题链接 AcWing 1624. 地铁地图 算法标签 图论 单源最短路 dijkstra spfa 思路 若采用邻接矩阵存储 超出本题空间限制&#xff0c;因此无法采用邻接矩阵存储&#xff0c;可采用邻接表存储 若采用常规建图方式&#xff08;即相邻两…

微信小程序|基于小程序实现人脸融合

文章目录一、文章前言二、具体流程及准备三、开发步骤四、完整代码一、文章前言 此文主要通过小程序实现人脸图像融合&#xff0c;将检测到的两张人脸进行融合&#xff0c;输出一张融合后的人脸。 二、具体流程及准备 2.1、注册百度开放平台及微信公众平台账号。 2.2、下载及安…

概论_第2章随机变量及其概率分布__离散型随机变量之二项分布

二项分布是离散型随机变量的内容 一. 定义&#xff1a; 若随机变量X的可能取值为0, 1, ... ,n, 而X的分布值为 , k0,1,…n 其中&#xff0c;0<p<1, q 1-p, 称X服从参数为n, p的二项分布&#xff0c; 简记为 X ~ B(n, p) 1. 当n1时&#xff0c; X服从0-1分布, …

想进入游戏建模行业,这4点必须了解

“游戏行业不关心你的专业&#xff0c;只关心你的作品”&#xff0c;想要进入游戏行业就记住这句话&#x1f44d; 这一年可是越来越多人想要进入游戏行业啦&#xff5e;造成了汤多肉少的情况&#xff0c;咱们怎样才能在一群竞争者中脱颖而出呢❓有4⃣大点你要注意的&#xff1…

决策树算法在计算机视觉中的应用附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

利用SpringBoot和vue+elementui做一个简单的书本信息管理系统

目录 1.准备工作 1.1.数据库准备 1.2.前端准备工作 1.3.后端准备工作 2.后台代码的编写 2.1.修改配置文件 2.2. 编写service层 2.3.编写Controller层 3.前台代码的编写 3.1.在src里面的api里面的action.js 3.2.搜索栏&#xff0c;表单 3.3.表格 3.4.弹出新增的模态…

[附源码]SSM计算机毕业设计整形美容咨询网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【考研复试】计算机专业考研复试英语常见问题二(研究方向/前沿技术/本科毕设篇)

相关链接&#xff1a; 【考研复试】计算机专业考研复试英语常见问题一&#xff08;家庭/家乡/学校篇&#xff09;【考研复试】计算机专业考研复试英语常见问题二&#xff08;研究方向/前沿技术/本科毕设篇&#xff09;【考研复试】计算机专业考研复试英语常见问题三&#xff0…

助老服务机器人结构设计

目 录 摘要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 国外助老服务机器人的研究 1 1.2.1 爱尔兰PAM-AID 助老服务机器人 1 1.2.2 美国SmartCane 助老服务机器人 2 1.2.3 韩国WAR 助老服务机器人 3 1.2.4 日本助老服务机器人 4 1.2.5 可穿戴的外骨骼式助老服务机器人 4 …

(九)Spring之Bean的循环依赖问题

文章目录环境什么是Bean的循环依赖singleton下的set注入产生的循环依赖prototype下的set注入产生的循环依赖构造注入产生的循环依赖singleton下的构造注入prototype下的构造注入Spring解决循环依赖的机理&#xff08;底层实现&#xff09;上一篇&#xff1a;&#xff08;八&…

注释写的好,文档不潦草.

大家好&#xff0c;long time no see&#xff01;这次聊一聊「注释」。写「注释」的好处众所周知&#xff0c;但有时在实现一些「公共代码」后&#xff0c;需要编写「文档」&#xff0c;其中「注释」和「文档」的内容是大致相同的&#xff0c;比如param和returns等(相信有不少同…

Java_抽象类和接口(一)

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者简介&#xff1a;大三学生&#xff0c;希望跟大家一起进步&#xff01; 文章目录 目录 文章目录 一、抽象类 1.1 抽象类概念 1.2 抽象类语句 1.3 抽象类特性 1.4 抽象类和普通类的区别 1.5 抽…

赞不绝口!仅靠阿里P9分享的 Redis 工作手册,拿到60W年薪Offer

昨晚有六七位小伙伴告诉我说&#xff1a;“大佬&#xff0c;有没有Redis的面试教程啊&#xff0c;最近面试被问到好多” 这就帮小伙伴们专门整理了一份资料&#xff08;不仅仅是面试题&#xff09;&#xff0c;从Redis核心原理到Redis设计与源码帮助大家梳理体系&#xff0c;快…

教你自己写Arcpy批处理程序

自己写Arcpy批处理栅格和矢量 先上代码&#xff0c;讲解各行代码的意思&#xff0c;从而达到自己写代码的目的 #....Edit by Longhao Wang.... import arcpy from arcpy import env from arcpy.sa import * import os import os.path import sys arcpy.env.workspace"D:…

Vue项目开发经验

文章目录前言网页组件echarts使用打包后显示包体积安装tensorflow和anaconda可能出现的错误![在这里插入图片描述](https://img-blog.csdnimg.cn/c1facd95a7f645c5af3e8dc1237913a3.png)总结前言 本博客仅做学习笔记&#xff0c;如有侵权&#xff0c;联系后即刻更改 科普&…

《调试九法》阅读笔记

1. 理解系统 阅读手册、仔细阅读每个细节、掌握基础知识、了解工作流程、了解工具。 2. 制造失败 制造失败、从头开始、引发失败、但不要模拟失败、查找不受你控制的条件、记录每件事情&#xff0c;并找到间歇性bug特征、不要过于相信统计数据、要认识到“那”是可能会发生的…

[附源码]java毕业设计商场日常维修管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【云原生】k8s 中的 hostNetwork 和 NetworkPolicy(网络策略)讲解与实战操作

文章目录一、hostNetwork 介绍二、k8s 网络策略 NetworkPolicy三、Pod 隔离的两种类型四、NetworkPolicy 资源1&#xff09;NetworkPolicy 示例演示2&#xff09;选择器 to 和 from 的行为五、总结一、hostNetwork 介绍 在k8s中&#xff0c;若pod使用主机网络&#xff0c;也就是…

UE5笔记【四】UE5主材质Master Materials和材质实例MI

上一篇我们讲解了关于鹅卵石的纹理材质。 假设&#xff1a;如果我们在关卡中每个材质都这么连接的话&#xff0c;那么将使得整个世界非常复杂&#xff0c;并且将浪费大量的时间。对此&#xff0c;解决方案是&#xff1a;主材质&#xff1a;master Materials。 新建一个新关卡…