中颖51芯片学习3. 定时器

中颖51芯片学习3. 定时器

  • 一、SH79F9476定时器简介
    • 1. 简介
    • 2. 定时器运行模式
  • 二、定时器2
    • 1. 说明
      • (1)时钟
      • (2)工作模式
    • 2. 寄存器
      • (1)控制寄存器 T2CON
      • (2)定时器2模式控制寄存器 T2MOD
    • 3. 工作方式0
      • (1)16位捕获说明
      • (2)代码实现
    • 4. 工作方式1
      • (1)16位自动重载定时器说明
        • 当DCEN = 0,通过在T2CON中的EXEN2位选择两个选项。
        • 设置DCEN位允许定时器2递增计数或递减计数。当DCEN = 1时,T2EX引脚控制计数的方向,而EXEN2控制无效。
      • (2)代码实现
    • 5. 工作方式2 可编程时钟输出
      • (1)功能介绍
      • (2)软件实现
  • 三、其它定时器介绍
    • 1. 定时器3
    • 2. 定时器4
      • 启用 TIMER4_OUT
      • 启用 TIMER4_EDGETRIG
    • 3. 定时器5

一、SH79F9476定时器简介

1. 简介

SH79F9476芯片具有多个定时器模块,包括定时器/计数器、PWM(脉冲宽度调制)定时器等,定时器可以配置为在计时达到特定值时触发中断,以便处理紧急事件或执行特定的任务。

2. 定时器运行模式

  1. MODE0 16位捕捉模式;
  2. MODE1 16位重载方式;
  3. MODE2 可编程时钟输出模式
  4. 上升沿多次触发模式

具体地看,SH79F9476 有定时器 2,定时器 3,定时器 4 和定时器 5 四个定时器,其中:

  • 定时器 2 可配置为 16 位捕捉功能、16 位重载方式或可编程时钟输出方式;
  • 定时器 3 可配置为 16 位自动重载定时/计数器,且可以工作在掉电模式;
  • 定时器 4 可配置为 16 位自动重载定时器或带边沿触发的 16 位自动重载定时器;两个数据寄存器TH4和TL4可作为一个16位寄存器来访问;
  • 定时器 5 可配置为 16 位的自动重载定时器。

二、定时器2

1. 说明

定时器2有两个数据寄存器TH2和TL2,可以作为一个16位寄存器来使用,由寄存器T2CON和T2MOD控制;
定时器2的中断使能位是: IEN0寄存器中的ET2位。

(1)时钟

C/T2选择系统时钟(定时器)或外部引脚 T2 (计数器)作为定时器时钟输入。通过所选的引脚设置TR2允许定时器2/计数器2数据寄存器计数。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。

(2)工作模式

定时器2支持3种工作方式:

  • 捕获/重载
  • 带递增或递减计数器的自动重载方式
  • 可编程时钟输出

可以通过寄存器配置定时器2的工作方式:

C/T2T2OEDCENTR2CP/RL2方式描述
X0X11016位捕获
X0010116位自动重载定时器
X0110116位自动重载定时器
01X1X2可编程时钟
11X1X不推荐使用
XXX0XX定时器2停止,T2EX通路仍旧允许

2. 寄存器

(1)控制寄存器 T2CON

C8H第7 位第6 位第5 位第4 位第3 位第2 位第1 位第0 位
T2CONTF2EXF2--EXEN2TR2C/T2CP/RL2
读/ 写读/写读/写--读/写读/写读/写读/写
复位值(POR/WDT/LVR/PIN)00--0000

位功能:

位编号位符号说明
7TF2定时器2 溢出标志位
0:无溢出(必须由软件清0)
1:溢出(由硬件设1)
6EXF2T2EX 引脚外部事件输入(下降沿)被检测到的标志位
0:无外部事件输入(必须由软件清0)
1:检测到外部输入(如果EXEN2 = 1,由硬件设1)
3EXEN2T2EX 引脚上的外部事件输入(下降沿)用作重载/ 捕获触发器允许/ 禁止控制位
0:忽略T2EX引脚上的事件
1:检测到T2EX引脚上一个下降沿,产生一个捕获或重载
2TR2定时器2 开始/ 停止控制位
0:停止定时器2
1:开始定时器2
1C/T2定时器2 定时器/ 计数器方式选定位
0:定时器方式,T2引脚用作I/O端口
1:计数器方式,内部上拉电阻被打开
0CP/RL2捕获/ 重载方式选定位
0:16位带重载功能的定时器/计数器
1:16位带捕获功能的定时器/计数器

(2)定时器2模式控制寄存器 T2MOD

C9H76543210
T2MODTCLKP2----T2OEDCEN
读/写读/写读/写----读/写读/写
复位值(POR/WDT/LVR/PIN)0-----00

位定义:

位编号位符号说明
7TCLKP2分频选择控制位
0:选择系统时钟的1/12作为定时器2的时钟源
1:系统时钟作为定时器2的时钟源
1T2OE定时器2 输出允许位
0:设置P1.3/T2作为时钟输入或I/O端口
1:设置P1.3/T2作为时钟输出
0DCEN递减计数允许位
0:禁止定时器2作为递增/递减计数器,定时器2仅作为递增计数器
1:允许定时器2作为递增/递减计数器

3. 工作方式0

(1)16位捕获说明

16位的捕获模式下,T2CON按制寄存器的EXEN2位有两个选项:

  • 0:定时器2作为16位定时器或计数器,如果ET2被允许,定时器2能设置TF2溢出产生一个中断;
  • 1:定时器操作与上相同,另外在外部输入T2EX上的下降沿也能引起在TH2和TL2中的当前值分别被捕获到RCAP2H和RCAP2L中;此外,在T2EX上的下降沿也能引起在T2CON中的EXF2被设置; 如果ET2被允许,EXF2位也像TF2一样产生一个中断。

流程框图:
在这里插入图片描述

(2)代码实现

下面的测试让TIMER2工作在16位捕获模式,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,如图所示:
在这里插入图片描述
测试代码:

#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// TIMER2 16位捕获模式// 允许所有中断IEN0 |= 0x80;// 打开定时器2中断IEN1 |= 0x04;// 检测到T2EX 引脚上一个下降沿,产生一个捕获或重载T2CON = 0x08;// 设置定时器2工作在捕获模式T2CON |= 0x01;// 设置系统时钟12分频作为定时器时钟源T2MOD = 0x00;TL2 = 0x00;TH2 = 0x00;// BIT2 启动定时器T2CON |= 0x04; while(1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9{_push_(INSCON);Select_Bank0();// 定时器溢出if(T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;}	// 检测到外部事件下降沿if(T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}

测试代码中启动 T2EX(P1_1) 下降沿捕捉功能;全速运行后,T2EX(P1_1)口灌 1kHz 座号,观察:

  • P1_1 的下降沿 P0_1 状态会发生改变,频率为 500Hz。
  • P0_0 频率1000/0xFFFF(即65535),约为15.259Hz。

输入信号:
在这里插入图片描述

P0_1输出信号:
在这里插入图片描述
P0_0输出信号:
在这里插入图片描述

4. 工作方式1

(1)16位自动重载定时器说明

在16位自动重载方式下,定时器2可以被选为递增计数或递减计数。这个功能通过T2MOD中的DCEN位(递减计数允许)选择。

系统复位后,DCEN位复位值为0,定时器2默认递增计数。当设置DCEN时,定时器2递增计数或递减计数取决于T2EX引脚上的电平。

当DCEN = 0,通过在T2CON中的EXEN2位选择两个选项。
  • 如果EXEN2 = 0,定时器2递增到0FFFFH,在溢出后置起TF2位,同时定时器自动将用户软件写好的寄存器RCAP2H和
    RCAP2L的16位值装入TH2和TL2寄存器。
  • 如果EXEN2 = 1,溢出或在外部输入T2EX上的下降沿都能触发一个16位重载,置起EXF2位。如果ET2被使能,TF2和EXF2
    位都能产生一个中断。
    在这里插入图片描述
设置DCEN位允许定时器2递增计数或递减计数。当DCEN = 1时,T2EX引脚控制计数的方向,而EXEN2控制无效。
  • T2EX置1可使定时器2递增计数。定时器向0FFFFH溢出,然后设置TF2位。溢出也能分别引起RCAP2H和RCAP2L上的16
    位值重载入定时器寄存器。
  • T2EX清0可使定时器2递减计数。当TH2和TL2的值等于RCAP2H和RCAP2L的值时,定时器溢出。置起TF2位,同时0FFFFH
    重载入定时器寄存器。

无论定时器2溢出,EXF2位都被用作结果的第17位。在此工作方式下,EXF2不作为中断标志。

(2)代码实现

下面代码示例中,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,启动自动重载功能;
程序启动后,在P0_0引脚输出1k频率方波。
P0 端口翻转一次的时间为:
t = (0xFFFF-TH2TL2)1/24 us。
计算频率为: 1/(t
2) Hz

#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// 允许所有中断IEN0 |= 0x80;// 打开定时器2中断 IEN1 |= 0x04;// 设置定时器工作在重载模式,忽略T2EX引脚检测T2CON = 0;    // 选择定时器为递增定时器,时钟源为系统时钟(未使用1/12分频)T2MOD = 0x80; // 这里 0xD11F递增到0xFFFF溢出,差值12000,下面公式里24是频率24M// 定时12000*1/24=500usTL2 = 0x1F;   TH2 = 0xD1;// 重载计数器 ValueRCAP2L = 0x1F; RCAP2H = 0xD1;// 启动定时器T2CON |= 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;}// 检测到外部事件下降沿if (T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}

在这里插入图片描述

5. 工作方式2 可编程时钟输出

(1)功能介绍

T2端口可以编程输出50%的占空比时钟周期。清C/T2位和置T2OE位,使定时器2作为时钟发生器。TR2位启动和中止定时器。

时钟频率为:
F = 1 2 ∗ 2 ∗ f S Y S 65536 − [ R C A P 2 H , R C A P 2 L ] F = \frac{1}{2*2} * \frac{f_{SYS}}{65536-[RCAP2H,RCAP2L]} F=22165536[RCAP2H,RCAP2L]fSYS

定时器2溢出不产生中断,所以定时器2可以作时钟输出。

功能框图:
在这里插入图片描述

(2)软件实现

下面示例中,系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”。

#include "SH79F9476.h"
#include "cpu.h"
#include "intrins.h"
#include "api_ext.h"void main()
{// 时钟设置高速模式CLKCON = 0x08;Delay();CLKCON |= 0x04;// P0.0,P0.1设置为输出P0CR = 0x03;P0 = 0x00;// 关闭定时器2中断IEN1 &= 0xFB; T2CON = 0;// P13作为T2输出T2MOD = 0x82;  // 系统时钟为24M,可产生100Hz的时钟      f=(1/4)*(Fsys/(65536-[RCAP2H,RCAP2L]))RCAP2L = 0xA0; RCAP2H = 0x15;TL2 = 0xA0;TH2 = 0x15;// 启动定时器T2CON |= 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON & 0x80){// 溢出标志位清0T2CON &= 0x7F;// 翻转P0_0P0_0 = ~P0_0;}// 检测到外部事件下降沿if (T2CON & 0x40){// 1011 1111, T2EX引脚外部事件被检测到的标志位清0T2CON &= 0xBF;// 翻转P0_1P0_1 = ~P0_1;}_pop_(INSCON);
}

程序运行后,T2 输出口(P1_3)输出 100Hz 频率时钟。
输出波形如下图所示:
在这里插入图片描述

三、其它定时器介绍

1. 定时器3

定时器3是16位自动重载定时器,通过两个数据寄存器TH3和TL3访问,由T3CON寄存器控制。IEN0寄存器的ET3位置1允许定时器3中断。

定时器3只有一种工作方式: 16位自动重载计数器/定时器。

在这里插入图片描述
代码示例:

  IEN0 |= 0xA0;     //打开定时器3中断_push_(INSCON);Select_Bank1();T3CON = 0x02;	  //外部32.768kHz/128kHz为时钟源,1分频//配置定时器的初值为0xfffe,溢出时间为2个128kHz时钟TL3 = 0xfe;		 TH3 = 0xff;T3CON |=0x04;  //启动定时器3_pop_(INSCON);void INT_TIMER3(void) interrupt 5
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);   
}

系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz内部 RC 作为振荡器 2”,全速运行后,T3 时钟为低频 128k 时钟,P0_0 引脚输出 32k 频率方波。

2. 定时器4

定时器4是16位自动重载定时器。通过两个数据寄存器TH4和TL4访问,由T4CON寄存器控制。IEN1寄存器的ET4位置1允许定时器4中断。

定时器4有2种工作方式: 16位自动重载定时器和有T4边沿触发的16位自动重载定时器。

官方代码示例:

void init_timer4()
{IEN0 |= 0x84;     //EA,ET4,中断使能_push_(INSCON);Select_Bank1();#ifdef TIMER4_OUTT4CON = 0x40;	  //T4引脚输出//配置定时器的初值为0x8000,T4引脚输出周期为2*0x8000个系统时钟的方波TL4 = 0x00;		 TH4 = 0x80;#endif#ifdef TIMER4_EDGETRIGT4CON = 0x48;	//T4上升沿触发,且可以多次触发TL4 = 0x00;TH4 = 0x00;#endifT4CON |=0x02;  //启动定时器4Select_Bank0();_pop_(INSCON);
}void INT_TIMER4(void) interrupt 2
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);       
}

启用 TIMER4_OUT

系统时钟 Option 选择“内部 128kHz RC振荡器作为振荡器1,24MHz内部RC作为振荡器2”,全速运行后,时钟为系统时钟,T4引脚(P1_1)输出周期为 2.7302ms 方波。

启用 TIMER4_EDGETRIG

系统时钟 Option 选择“内部 128kHzRC 振荡器作为振荡器 1,24MHz 内部 RC 作为振荡器 2”,全速运行后:
向 T4(P1_1)输入一个上升沿,P0.0状态翻转一次;向T4 (P1_1)输入周期性的上升沿,若周期小于T4定时时间(2.7302ms),
T4 将一直处于重新计时状态,P0.0 将无波形输出;若周期大于 T4 定时时间(2.7302ms),P0.0输出方波。

3. 定时器5

定时器5是16位自动重载定时器。通过两个数据寄存器TH5和TL5访问,由T5CON寄存器控制。IEN0寄存器的ET5位置1允许定时器5中断。

定时器5有一种工作方式:16位自动重载定时器。

官方代码示例:

void init_timer5()
{IEN0 |= 0x88;     //EA, ET5_push_(INSCON);Select_Bank1();//配置定时器的初值为0xD120,溢出时间为0x2EE0个系统时钟TL5 = 0x20;		 TH5 = 0xD1;T5CON |=0x02;  //启动定时器5_pop_(INSCON);
}void INT_TIMER5(void) interrupt 3
{ _push_(INSCON);Select_Bank0();P0_0 = ~P0_0;_pop_(INSCON);       
}

系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 1,24MHz
内部 RC 作为振荡器 2”,运行后时钟为系统时钟,P0_0 引脚输出 1kHz 频率方波。

本文学习资源来自中颖官网芯片文档
本文代码开源地址: https://gitee.com/xundh/learn-sinowealth-51

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp6使用阿里云SDK发送短信

使用composer安装sdk "alibabacloud/dysmsapi-20170525": "2.0.24"封装发送短信类 发送到的短信参数写在env文件里面的 #发送短信配置 [AliyunSms] AccessKeyId "" AccessKeySecret "" signName"" templateCode"&…

⼿机客户端画K线图流程

优质博文:IT-BLOG-CN 一、什么是K线流程 K线图是一种用于展示金融市场价格走势的图表。它通常由四个关键价格点组成,即开盘价、收盘价、最高价和最低价。K线图的流程可以简单概括为以下几个步骤: 【1】收集数据: 首先&#xff0c…

网络通信流程

建立完tcp请求再发起http请求 开启系统代理之后,以clash verge为例 127.0.0.1:7897,假设hci.baidu.com的IP为153.37.235.50 发起对hci.baidu.com的HTTP请求,由于开启了系统代理不进行DNS解析,浏览器调用socket()获得一个socket&a…

AI绘画工具的兴起与应用:热门AI绘画生成器推荐及使用指南

文章目录 一、AI绘画工具概述二、热门AI绘画生成器推荐2.1、DALL-E22.2、DeepDreamGenerator2.3、Artbreeder2.4、BigSleep2.5、NightCafe2.6、DeepAI2.7、触站AI2.8、美术加AI2.9、文心一格 三、如何使用AI绘画生成器3.1、选择AI绘画生成器3.2、描述画面内容3.3、选择绘画风格…

自动驾驶中的交通标志识别原理及应用

自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验:链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路,以促进道路行车安全,而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…

内网穿透的应用-如何在Android Termux上部署MySQL数据库并实现无公网IP远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

esp32上PWM呼吸灯

1、什么是pwm PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。 1.1频率 单位时间内PWM方波重复的次数 1.2占空比 一个周期内…

Unity2023使用sdkmanager命令行工具安装Android SDK

1,下载cmdline-tools,官网地址:https://developer.android.com/studio或者https://dl.google.com/android/repository/文件名 文件名对应版本名。例如文件名为commandlinetools-win-9862592_latest.zip 引用Android cmdline-tools 版本与其…

【二分查找】Leetcode 寻找峰值

题目解析 162. 寻找峰值 题目中有一个很重要的提示:对所有有效的i都存在nums[i] ! nums[i1],因此这道题不需要考虑nums[mid] 和 nums[mid1]之间的相等与否的关系 算法讲解 1. 暴力枚举 我们按照顺序判断每个数字是否是当前的峰值,如果是直接返回&#…

下一代分层存储方案:CXL SSD

近日,在Memcon 2024大会上,三星推出了一款名为CXL Memory Module-Hybrid for Tiered Memory(CMM-H TM),这款扩展卡配备了高速DRAM和NAND闪存,允许CPU和加速器远程访问额外的RAM和闪存资源。 那么&#xff0…

Java面试八股文(更新中)

Java面试八股文 1. 基础篇1.1 Java语言特点1.2 面向对象和面向过程的区别1.3 八种基本数据类型的大小,以及他们的封装类1.4 标识符的命名规则1.5 instanceof 关键字的作用 ************************************************************* 1. 基础篇 1.1 Java语言特…

智慧公厕:提升城市管理效率,改善居民生活体验

智慧公厕作为城市基础设施的重要组成部分,正逐渐成为改善城市品质和提升居民生活体验的一项关键措施。通过智能化管理、数字化使用和信息化运行,智慧公厕不仅可以为城市居民带来更舒适便利的使用体验,而且对于城市的高质量发展、宜居性和包容…

IP-guard WebServer 任意文件读取漏洞复现

0x01 产品简介 IP-guard是由溢信科技股份有限公司开发的一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。 0x02 漏洞概述 由于IP-guard WebServer /ipg/static/appr/lib/flexpaper/php/view.php接口处未对用户输入的数据进行严…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例,下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

hexo接入github Discussions评论系统

评论存储仓 可以是你的博客项目的(github)仓库,也可以单独新建一个评论存储仓库。 我的博客项目在gitee上,就以新建存储仓为例: 使用Discussions评论系统必须开通Discussions模块! 安装giscus插件 https://github.com/apps/…

代码随想录|Day35|动态规划04|01背包(二维、一维)、416.分割等和子集

01背包(二维dp数组) 背包最大重量为4。 物品为: 重量价值物品0115物品1320物品2430 背包能背的物品最大价值是? 动规五步曲: dp数组的含义:dp[i][j] 表示从下标为 [0 - i] 的物品里任取,放入…

17-1-HTML5 新增语义标签及属性

文章目录 HTML5 新增语义标签及属性1 HTML5 新增的块级语义化标签2 HTML5 新增的多媒体标签(了解)2.1 音频 audio2.2 视频 video 3 HTML5 新增的 input 类型(了解) HTML5 新增语义标签及属性 1 HTML5 新增的块级语义化标签 以前…

全新4.0版本圈子社交论坛系统 ,可打包小程序,于TP6+uni-app 全开源 可打包小程序app uniapp前端+全开源+独立版

简述 首先 圈子系统的核心是基于共同的兴趣或爱好将用户聚集在一起,这种设计使得用户能够迅速找到与自己有共同话题和兴趣的人。 其次 圈子系统提供了丰富的社交功能,如发帖、建圈子、发活动等,并且支持小程序授权登录、H5和APP等多种形式…

AI日报:北大Open Sora视频生成更强了;文心一言可以定制你自己的声音;天工 SkyMusic即将免费开放;

🤖📱💼AI应用 北大Open Sora视频生成更强了!时长可达10秒,分辨率更高 【AiBase提要:】 ⭐️ Open-Sora-Plan v1.0.0模型发布 显著提升视频生成质量和文本控制能力 ⭐️ 支持华为昇腾910b芯片,提升运行效率和质量。 ⭐…

STM32_IIC_AT24C02_3_读写操作

从图中可以看到,如果进行一个写的操作,也是要先发送一个启动操作,然后发送设备地址,接着发送字节地址,最后发送数据,然后停止。Tips:先发送高位,再发送低位 设备地址(Device Address…