51单片机-第九节-AT24C02存储器(I2C总线)

2024-08-30 17:20

本文主要是介绍51单片机-第九节-AT24C02存储器(I2C总线),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、AT24C02存储器介绍:

AT24C02是存储器,且掉电不丢失,可存储单片机要永久保存的数据。

通讯接口:I2C总线。

容量:256字节。

二、存储器简化模型:

引脚及应用电路:

三、I2C总线:

1.介绍:

(1)I2C总线 (Inter IC BUS)是由Philips公司开发的一种通用数据总线

(2)两根通信线:SCL(Serial Clock)、SDA(Serial Data)

(3)同步、半双工,带数据应答

(4)通用的I2C总线,可以使各种设备的通信标准统一 。

2.  时序结构:

(1)起始,终止:

(2)发送和接收字节:

下面的SDA的两行是具体数据,可0可1,需要注意SCL拉高期间SDA不能变。

  

(3)发送和接收应答:

四、利用I2C操作AT24C02:

(1)发送一帧数据:

首先 发送 S 表示开始,即时序结构中的起始部分。

随后 发送地址,由8位构成,最后一位是读写标志位,前7位中的前4位是固定的,51单片机中为1010,后3位是可变地址,即存储器简化模型中的 E0,E1,E2 ,我们用不到,置000即可。

然后每发送一个字节需要接收应答。循环。

最后终止流程。

(2)其他流程见下图,拼接而已。

(3)注意:在每次将数据写入AT24C02后,需 Delay 5ms,因为写入时AT24C02需要操作时间。

五、I2C集成:

//I2C的开始和停止,接受和发送字节,接受和发送应答
sbit I2C_SDA = P2 ^ 0;
sbit I2C_SCL = P2 ^ 1;void I2C_Start()
{I2C_SCL = 1;I2C_SDA = 1;//因为根据时序,Start前需要两个均为高I2C_SCL = 0;I2C_SDA = 0;
}
void I2C_Stop()
{I2C_SDA = 0;I2C_SCL = 1;	I2C_SDA = 1;
}
void I2C_SendByte(unsigned char Byte)
{unsigned char i;for (i = 0; i < 8; i++){I2C_SDA = Byte & (0x80 >> i);I2C_SCL = 1;I2C_SCL = 0;//此处注意:拉高立马拉低,需要考虑单片机执行指令的速度//不过51本来就很慢,不用考虑,否则每行间需加入Delay}
}
unsigned char I2C_ReceiveByte()
{unsigned char Byte = 0x00;unsigned char i = 0;I2C_SDA = 1;for (i = 0; i < 8; i++){I2C_SCL = 1;if (I2C_SDA) { Byte |= (0x80>>i); }I2C_SCL = 0;}return Byte;
}void I2C_SendAck(unsigned char AckBit)
{I2C_SDA = AckBit;I2C_SCL = 1;I2C_SCL = 0;
}unsigned char I2C_ReceiveAck()
{unsigned char AckBit;I2C_SDA = 1;I2C_SCL = 1;AckBit = I2C_SDA;I2C_SCL = 0;return AckBit;
}

六、AT24C02集成:

//AT24C02存储器写入和读取字节,WordAddress=0~256
void AT24C02_WriteByte(unsigned char WordAddress, unsigned char Data)
{I2C_Start();I2C_SendByte(0xA0);I2C_ReceiveAck();I2C_SendByte(WordAddress);I2C_ReceiveAck();	I2C_SendByte(Data);I2C_ReceiveAck();I2C_Stop();
}
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{unsigned char Data;I2C_Start();I2C_SendByte(0xA0);I2C_ReceiveAck();I2C_SendByte(WordAddress);I2C_ReceiveAck();//此处由写改为收,重新startI2C_Start();I2C_SendByte(0xA1);I2C_ReceiveAck();Data = I2C_ReceiveByte();I2C_SendAck(1);I2C_Stop();return Data;
}

七、实例:独立按键写入读出AT24C02:

按键1:Num加一;    按键2:Num减一;

按键3:Num写入;    按键4:Num读出;

unsigned char KeyNum;
unsigned int Num;
void main()
{LCD_Init();LCD_ShowString(1, 1, "Hello");while (1){KeyNum = Key();if (KeyNum == 1){Num++;LCD_ShowNum(1, 1, Num, 5);}		if (KeyNum == 2){Num--;LCD_ShowNum(1, 1, Num, 5);}		if (KeyNum == 3){AT24C02_WriteByte(0, Num % 256);Delay(5);AT24C02_WriteByte(1, Num / 256);Delay(5);LCD_ShowString(2, 1, "Write OK");Delay(1000);LCD_ShowString(2, 1, "        ");}		if (KeyNum == 4){Num = AT24C02_ReadByte(1);Num = Num << 4;Num += AT24C02_ReadByte(0);LCD_ShowNum(1, 1, Num, 5);}}
}

这篇关于51单片机-第九节-AT24C02存储器(I2C总线)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121453

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

MCU5.51单片机的最小系统

1.最小系统的组成部分 晶振电路(时钟),复位电路,电源电路(控制电压,保持稳定),下载电路(外加的,用于烧录程序) 烧录: 通过下载电路,把程序下载到单片机中用于运行 2.晶振电路 电路图: 是晶振 是电容 为了防止晶振起振时产生影响,因此加电容 3.复位电路 电路图: 按按钮RSTK1(保持一段时间的高电平)即可实现STC芯片的复位 4.电源电路 电路图:

单片机XTAL引脚引出的晶振分析

51单片机的18,19脚XTAL1,XTAL2用来提供外部振荡源给片内的时钟电路。 XTAL1和XTAL2引脚,该单片机可以使用外部时钟也可以使用内部时钟。 当使用内部时钟时,此二引线端用于外接石英晶体和微调电容; 当使用外部时钟时,用于接外部时钟信号,NMOS接XTAL2,CMOS接XTAL1。 原理: XTAL1和XTAL2分别是一个反相器的输入和输出。NMOS的反相器是

程序存储器编址及程序执行顺序

对于内部有ROM的芯片,根据情况也可以扩展外部ROM,虽然内、外程序存储器总容量可以超过64KB,但其有效存储空间只有64KB,内、外程序存储器逻辑上将共用64K存储空间。片内程序存储器地址空间和片外程序存储器的低地址空间重叠。51子系列重叠区域为0000H~0FFFH,52子系列重叠区域为0000H~1FFFH。        单片机在执行指令时,对于低地址部分,是从片内程序存