#C51 IIC通讯(底层配置时序)
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 一、场景
- 二、IIC核心知识点
- 1.起始信号
- 2.数据有效性
- 3.写数据(1Byte)
- 4.应答信号
- 5.停止信号
- 6.从机地址
- 总结
前言
IIC通讯:二线制SDA/SCL
提示:以下是本篇文章正文内容,下面案例可供参考
一、场景
- 51单片机模拟I/O配置SDA/SCL(主器件)
- 根据AT24C02芯片手册,配置IIC通讯底层时序,操作命令
二、IIC核心知识点
图1 总线时序:
1.起始信号
结合时序图1:SCL高电平期间,SDA由高到低跳变
//起始信号
void IIC_Start()
{SDA = 1;
// Delay2us(); //电路特性要求上升沿小于300ns,最好做延时保证必然高电平SCL = 1; //拉高总线,空闲状态Delay5us(); //1.起始信号建立时间tSU:STA至少4.7usSDA = 0; //2.起始信号产生Delay5us(); //3.起始信号维持时间tHD:STA至少4usSCL = 0; //4.时钟拉低,钳住总线,准备后续数据发送
}
2.数据有效性
SCL低电平时SDA数据允许高低变化
SCL高电平时SDA保持稳定
3.写数据(1Byte)
MSB在前,LSB在后
SDA数据位传输后,将SCL高电平期间,从器件开始读取传输的数据
SCL、SDA高电平代表总线空闲,准备主/从器件下一次动作
//写一个字节数据
void IIC_WriteByte(unsigned char vdata)
{//第一次紧跟着起始信号,SCL已经拉低,无需再操作unsigned char vtemp;for(vtemp = 0x80; vtemp != 0; vtemp >= 1){if(vtemp & vdata){SDA = 1;//发送数据}else {SDA = 0;}Delay5us(); //时钟信号低电平宽度tLOW至少4.7usSCL = 1; //SCL拉高 从器件读数据位Delay5us(); //时钟信号高电平宽度tHIGH至少4usSCL = 0; //拉低总线,下一个数据传输}
}
4.应答信号
8bit数据传输后第9位代表应答信号,0已接收 1未收到
//应答信号
bit IIC_RecvACK()
{bit ack;UC vErrTimeCnt = 0;SDA = 1; //拉高总线空闲,为应答作准备Delay5us(); //维持SCL低电平SCL = 1; //SCL高电平期间,从器件应答,拉高或拉低SDA:0接收1无Delay5us();if((1 == SDA) && (vErrTimeCnt < 255)) //延时保护,防止未收到应答,程序一直停留{vErrTimeCnt++;ack = 0;}else{ack = 1;} return ack;
}
5.停止信号
结合时序图1:SCL高电平期间,SDA由低拉高
//停止信号
void IIC_Stop()
{SCL = 0; //拉低时钟线,防止SDA由高到低产生起始信号
// Delay2us(); //电路特性要求下降沿小于1usSDA = 0;
// Delay2us();SCL = 1;Delay5us(); //停止信号建立时间最少4.7usSDA = 1; //拉高SDA,停止信号Delay5us(); //最少4.7us,释放总线,准备下一次转换
}
6.从机地址
Address | bit7~bit3 | bit2 | bit1 | bit0 | RW* |
---|---|---|---|---|---|
器件唯一标识 | A2 | A1 | A0 | 传输方向 |
@1. bit7~bit3是IIC器件自身地址,由制造商给定,如At24c02地址为1010。
@2. bit2~bit0对应A2 ~A0由硬件连接决定。(一个系统中最多8个器件)
@3. 通讯时第一个字节需要传输地址字节,以确定接收的从器件。如硬件接线A2~A0为低电平,向该写数据。则器件地址为:1010 000 = 0xA0
总结
1.片外IIC器件大体都是这种配置,根据芯片手册会些许微调。实际开发中大多数IC自带EEPROM,后面举例展开
2.基于底层配置后继续实现一个字节的写、读。至于多字节的“按字节”写,“按页写”,“连续读”等等,后续几篇陆续进行。
#C51 IIC通讯(底层配置时序)相关推荐
- IIC通讯读取MPU6050
江科大自化协学习记录,本实验利用IIC读取MPU6050数值,并且在OLED屏上显示 代码在最后面,笔者水平一般,各位凑合着看. 首先是OLED显示的代码,底层驱动来自江科大自化协. 链接就放在这里了 ...
- 示波器观察IIC通讯协议-STM32F4读写24C08EEPROM时序图-新人首更
示波器观察时序不是因为好奇,是因为遇到了问题 STM32F4探索者开发板板载24C02EEPROM,自制了一块开发板,需要存储容量更大的24C08A芯片,焊接后发现开发板上能成功运行的程序,在自己的板 ...
- 8、RH850 F1 IIC通讯功能和配置
前言: 续上章节UART后,此章讲解的IIC也是最常见的串行通讯,广泛应用于单片机和单片机之间通讯.同样这里IIC的具体原理讲解就不做介绍,不清楚的朋友可移步up主的个人专栏 ---- "串 ...
- vs如何自动生成基本的代码_STM32CubeMX底层配置代码自动代码生成
STM32CubeMX + HAL 一些说明 底层配置 Cube基本使用 HAL库函数 中断回调函数 外设对应时钟 配置示例 小编有话说 RTC S ...
- 树莓派IIC通讯获取BMI08x IMU数据进行姿态解算,并通过UART/TCP在rviz上显示
截至2021年,树莓派出的最新款应该是Raspberry Pi 400,设计得跟键盘一样,很难想象到这是个树莓派,尤其是它的标语写的很好"你的下一个电脑,何必是电脑",不言而喻.反 ...
- ARM+SD2405 IIC_RTC驱动编写及IIC通讯协议
IIC通讯协议 协议简介 IIC(inter-integrated Circuit集成电路总线)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它需要两根信号线来完成信息交换,它是由 ...
- LPC1768的iic通讯
LPC1768有三路IIC,其中IIC0支持高速模式和plus模式,另外两路是普通IIC,使用IIC的过程如下 首先依然是打开IIC时钟,同时打开GPIO时钟 然后配置引脚为IIC功能 另外,因为ii ...
- STM32之IIC通讯-SHT30温湿度采集
一.实验目的:通过单片机普通IO口,模拟IIC时序,掌握IIC通讯协议. 二.实验用到的主控芯片:STM32F103RCT6,IIC通讯引脚IIC_SDA:PC11,IIC_SCL:PC12 三.SH ...
- Bq769XX IIC 通讯 ALERT引脚
Bq769X 初入BMS,很可能会选用到TI的这颗料,扩展性和可用性都还不错.但是在调试过程中,会有几个点让初入的人摸不着点. IIC通讯 TI的这个通讯准确说叫Mbus,但是实际与IIC通讯差异不大 ...
最新文章
- redistemplate文档用法_Jedis 使用及 StringRedisTemplate 常用方法
- python之vscode中手动选择python解释器(mac)
- 这年头,老赖没得混了!大数据式追债,你见过吗?
- No space left on device错误解决
- jquery正则表达式验证:验证全是数字
- 总结2:上传图片至指定服务器
- 分数怎么在计算机上关,电脑如何在注册表上关闭AutoRun功能
- notepad 没有plugin manager_和平精英巅峰赛正式开启,热度却没有象中那么高!
- Selenium之Chrome浏览器的启动问题及解决
- 想将有色彩的视频进行去色处理就这样做
- c语言fltk图形库,FLTK编程模型
- 【回波损耗(dB)和电压驻波比(VSWR)之间的关系】
- 2020年春节抢票神器
- Jenkins企业应用进阶详解
- 中国科学院计算机研究所李华,李华-中国科学院大学-UCAS
- .net中的泛型全面解析
- 可以在手机制作游戏的软件
- Windows系统System32目录的访问权限问题
- “钉铛”由小号切入企业服务,相当于通信+移动互联网+CRM
- Howlerjs 音频播放插件
热门文章
- css预处理器Less
- APP上传应用商店加固后打包
- git+github
- 大数据毕业设计 股票量化分析与股票预测系统 - Python
- arrays shot JAVA_Apache Flink 1.3-SNAPSHOT 中文文档: Java 8
- Error: Could not find tools necessary to compile a package/compilation failed for package
- PC端判断屏幕宽度到达手机宽度的时候,直接跳转手机页面
- C语言指针--二级指针
- 易支付5.18最新版协议去授权全套三端开源源码_客户端+云端+监控+协议三网免挂免输入(全套版)
- 使用CNN进行ROI提取(优化代码篇)