#include
#include <intrins.h>
#define OP_READ 0xa1 // 器件地址以及读取操作
#define OP_WRITE 0xa0 // 器件地址以及写入操作
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int eepromdata; //从EEPROM里读出来的数据
sbit SDA = P3^4;
sbit SCL = P3^3;
void delay()ms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void delay()(void)
{
int k;
for(k=0;k<400;k++);
}
void start()
{
SDA = 1;
SCL = 1;
_nop_();
_nop_();
SDA = 0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
}
void stop()
{
SDA = 0;
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 1;
}
unsigned char shin()
{
unsigned char i,read_data;
for(i = 0; i < 8; i++)
{
SCL = 1;
read_data <<= 1;
read_data |= (unsigned char)SDA;
SCL = 0;
}
return(read_data);
}
bit shout(unsigned char write_data)
{
unsigned char i;
bit ack_bit;
for(i = 0; i < 8; i++)
{
SDA = (bit)(write_data & 0x80);
_nop_();
SCL = 1;
_nop_();
_nop_();
SCL = 0;
write_data <<= 1;
}
SDA = 1;
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit = SDA; // 读取应答
SCL = 0;
return ack_bit; // 返回AT24Cxx应答位
}
void write_byte(unsigned char addr, unsigned char write_data)
{
start();
shout(OP_WRITE);
shout(addr);
shout(write_data);
stop();
delay()ms(10);
}
unsigned char read_current()
{
unsigned char read_data;
start();
shout(OP_READ);
read_data = shin();
stop();
return read_data;
}
unsigned char read_random(unsigned char random_addr)
{
start();
shout(OP_WRITE);
shout(random_addr);
return(read_current());
}
void display(int k)
{
P2=0xfe; //最高位数码管1234
P0=tab[k/1000];
delay();
P2=0xfd;
P0=tab[k00/100];
delay();
P2=0xfb;
P0=tab[k0/10];
delay();
P2=0xf7;
P0=tab[k];
delay();
P2=0xff;
}
void main(void)
{
SDA = 1;
SCL = 1;
eepromdata=0;
write_byte(0x01, 0x55); //向0x01地址写入0x55(85)的数据
delayms(250);
write_byte(0x02, 0xAA); //向0x02地址写入0xAA(170)的数据
delayms(250);
delayms(250);
eepromdata= read_random(0x02); // 读取其中一个地址内的数据来验证
delayms(250);
while(1)
{
display(eepromdata);
}
}
关键字:I2C总线 读写AT24c02
引用地址:
I2C总线读写AT24c02的程序
推荐阅读最新更新时间:2024-03-16 14:33
I2C总线协议(AT24c02)程序
主:STC89C54 从: AT24C02 电路图 时序图 下面是代码 #include reg51.h #define uchar unsigned char #define addr_x 0xae // 写 #define addr_d 0xaf // 读 sbit sda = P2^1; //数据管脚 sbit scl = P2^0; //时钟管脚 bit ack; void DelayUs2x(unsigned char t)
[单片机]
比较流行的几种内部总线技术
目前比较流行的几种内部总线技术:
----1.I2C总线 ----I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
----2.SPI总线 ----串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列
[嵌入式]
I2C总线规范详细介绍
一、I2C 总线术语的定义 术语 描述
发送器 发送数据到总线的器件
接收器 从总线接收数据的器件
主机 初始化发送产生时钟信号和终止发送的器件
从机 被主机寻址的器件
多主机 同时有多于一个主机尝试控制总线但不破坏报文
仲裁 是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程
同步 两个或多个器件同步时钟信号的过程
二、I2C 总线上数据传输的过程
I2C 总线是一个多主机的总线,这就是说可以连接多于一个能控制总线的器件到总线。由于主机通常是微控制器,让我们
[嵌入式]
I2C总线通信接口的CPLD实现
摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。
关键词: I2C总线 CPLD VHDL
I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。
目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[半导体设计/制造]
数字式温湿度传感器SHT11在51单片机系统的应用
1 概述
温湿度的测量在仓储管理、生产制造、气象观测、科学研究以及日常生活中被广泛应用,传统的模拟式湿度传感器一般都要设计信号调理电路并需要经过复杂的校准和标定过程,因此测量精度难以保证,且在线性度、重复性、互换性、一致性等方面往往不尽人意。SHT11是瑞士Sensirion公司推出的基于CMOSensTM技术的新型温湿度传感器。该传感器将CMOS芯片技术与传感器技术结合起来,从而发挥出它们强大的优势互补作用。 2 性能特点
SHT11温湿度传感器的主要特性如下:
●将温湿度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一芯片(CMOSensTM技术);
●可给出全校准相对湿度及温度值输出;
●带
[单片机]
加密存储芯片AT88SC1616的设计应用
随着嵌入式产品性能的日益提高,嵌入式系统在消费类电子、汽车、工业控制和通信等行业迅速普及;但由于嵌入式系统开发成本高、 研发周期长,使得关键技术的加密和重要数据的保密问题日益突出。如何在这些嵌入式系统中采用低成本、高效率的方法保护自己的科研成果不被非法仿制和剽窃,同时保存一些关键代码或数据已成为困扰许研发工程师的问题之一。解决的办法除了采用法律手段保护知识产权外,另一个更加简单有效的方法就是采用加密存储芯片进行硬件电路的加密和重要数据的认证存储。 AT88SCxx系列加密存储芯片是国际著名芯片厂商Atmel公司生产的具有多用途的加密存储系列芯片。其中AT88SC1616是该系列芯片的典型代表。由于其具有多达2KB的EEPRO
[单片机]
基于GAL的I2C总线时序模拟
FI1200 MK2系列电视信号前端处理器是飞利浦公司专为计算机多媒体环境下的射频应用而设计的。FI1256 MK2是该系列中的一个型号,它体积小,结构紧凑,性能稳定,可直接从射频信号解调出视频信号和音频信号,且只需单一5V电源,因而可在图文电视接收、有线电视信号自动监测等许多场合得到广泛的应用。笔者曾用它开发出图文电视接收卡、电视信号检测系统等多种设备。 FI1256 MK2可通过I2C串行总线接口进行编程控制。当使用单片机进行编程控制时,带有I2C接口的单片机可以与FI1256 MK2直接连接,没有I2C接口的单片机可以用I/O口线模拟I2C总线的时序。但是FI1256 MK2在计算机扩展卡中使用时,为了节省成本,通过计算机的
[嵌入式]
按平台模式设计的虚拟I2C总线软件包VIIC
摘要: VIIC是主方式下的虚拟I2C总线软件包,用于80C51系列单片机的单主系统中。只需两根普通I/O口线就可随时扩展I2C总线外围器件。将VIIC1.0装入程序存储器中,对其中的符号单元赋值后,使用三条通用操作命令就可实现任何I2C总线外围器件的应用程序设计。本文以VIIC为例,介绍应用软件形式的广义平台设计方法,给出VIIC1.0程序文本。按照这一思路,也可移植到其他系列的嵌入式系统中。
关键词: 平台模式虚拟I2C总线VIIC应用程序设计
一、 I2C总线及其虚拟应用
1. I2C总线应用呼唤平台模式
目前,单片机应用系统的外围扩展已从并行
[应用]