首页 > 应用 > 单片机应用
[导读]AT89S52单片机模拟I2C总线协议读写AT24C04

I2C总线是2条线总线.数据线SDA,时钟线SCL.结构简单.

AT24C04是具有I2C总线接口的EEPROM.大小为512*8bit.单片机AT89S52本身不具有I2C总线结口,所以可编写程序用并行端口模拟I2C总线协议读写AT24C04.

多个设备通信的重点(1.电平的区别,如串口通信中PC与单片机通信,PC机串口电平值为+12V~-12V,单片机为TTL电平0V~+5V.,所以要用电平转换芯片转电平.2,通信协议.(串口通信协议))

具体的协议内容与数据格式可查资料.

代码如下:

#include

#define WriteDeviceAddress 0xa0

#define ReadDeviceAddress 0xa1

sbit SCL = P3^4;

sbit SDA = P3^5;

sbit DOG = P0^0;

sbit PP = P0^1;

sbit DOG1 = P0^7;

void DelayMs(unsigned int number)

{

unsigned char tmp;

for(;number!=0;number--,DOG1=!DOG1)

{

for(tmp=112;tmp!=0;tmp--)

{

}

}

}

void Start()

{

SDA = 1;

DelayMs(1);

SCL = 1;

DelayMs(1);

SDA = 0;

DelayMs(1);

SCL = 0;

DelayMs(1);

}

bit Write8bit(unsigned char input)

{

unsigned char tmp;

for(tmp =8;tmp!=0;tmp--)

{

SDA = (bit)(input&0x80);

DelayMs(1);

SCL = 1;

DelayMs(1);

SCL = 0;

DelayMs(1);

input = input << 1;

}

return 1;

}

bit TestAck()

{

bit ErrorBit;

SDA = 1;

DelayMs(1);

SCL = 1;

DelayMs(1);

ErrorBit = SDA;

DelayMs(1);

SCL = 0;

DelayMs(1);

return(ErrorBit);

}

void Stop()

{

SCL = 0;

DelayMs(1);

SDA = 0;

DelayMs(1);

SCL = 1;

DelayMs(1);

SDA = 1;

DelayMs(1);

}

void WriteI2C(unsigned char *Wdata, unsigned char RomAddress, unsigned char number)

{

Start();

Write8bit(WriteDeviceAddress);

TestAck();

Write8bit(RomAddress);

TestAck();

for(;number!=0;number--)

{

Write8bit(*Wdata);

TestAck();

Wdata++;

}

Stop();

DelayMs(1);

}

unsigned char Read8Bit()

{

unsigned char tmp,rbyte = 0;

for(tmp=8;tmp!=0;tmp--)

{

SCL = 1;

DelayMs(1);

rbyte = rbyte << 1;

DelayMs(1);

rbyte = rbyte|((unsigned char)(SDA));

SCL = 0;

DelayMs(1);

}

return(rbyte);

}

void Ack()

{

SDA = 0;

DelayMs(1);

SCL = 1;

DelayMs(1);

SCL = 0 ;

DelayMs(1);

SDA = 1;

DelayMs(1);

}

void NoAck()

{

SDA = 1;

DelayMs(1);

SCL = 1;

DelayMs(1);

SCL = 0 ;

DelayMs(1);

}

void ReadI2C(unsigned char* RamAddress,unsigned char RomAddress,unsigned char bytes)

{

Start();

Write8bit(WriteDeviceAddress);

TestAck();

Write8bit(RomAddress);

TestAck();

Start();

Write8bit(ReadDeviceAddress);

TestAck();

while(bytes != 1)

{

*RamAddress = Read8Bit();

Ack();

RamAddress++;

bytes--;

}

*RamAddress = Read8Bit();

NoAck();

Stop();

}

void main()

{

unsigned char writeByte[8] = {0xC0,0X34,0X12,0X22,0X11,0X01,0X00,0X00};

unsigned char readByte[8];

unsigned char *addw;

unsigned char *addr;

unsigned char i;

unsigned char ok = 0;

bit write = 1;

DOG = 1;

while(1)

{

if(write == 1)

{

addw = writeByte;

addr = readByte;

WriteI2C(addw,0x00,8);

ReadI2C(addr,0x00,8);

for(i=0;i<8;i++)

{

if(writeByte[i] == readByte[i])

{

ok++;

}

}

if(ok == 8)

{

DOG = 0; //一样P0.0亮

}

else

{

PP = 0; //不一样P0.1亮

}

write = 0;

}

}

}

timg (4).jpg

换一批

延伸阅读

[单片机应用] pic单片机超神篇,pic单片机RAM用作寄存器

pic单片机超神篇,pic单片机RAM用作寄存器

pic单片机,想必大家都比较熟悉。其中,pic单片机简介、pic单片机优势以及pic单片机不足等内容,皆是入门级知识。本文将向大家介绍pic单片机的高级应用——将pic单片机的数据存储器RAM用作寄存器,本文存在一定难度,望大家用心研读。......

关键字:pic单片机 RAM 寄存器

[单片机应用] pic单片机入门篇,3大方面了解pic单片机

pic单片机入门篇,3大方面了解pic单片机

据调查,pic单片机是相关人员使用的最多硬件之一。因此,凡入门者需对pic单片机保持一定的了解。为此,本文为大家带来三部分内容:1.pic单片机简介,2.pic单片机特点,3.pic单片机不足之处。通过本文,希望大家对pic单片机存在一个简......

关键字:pic单片机 特点 不足

[单片机应用] pic单片机选型 + pic单片机INT0中断原理

pic单片机选型 + pic单片机INT0中断原理

pic单片机在实际应用中使用广泛,对pic单片机各类型特点了熟于心十分必要。只有对每款pic单片机的特点有所把握的情形下,才能在依据项目需求而选择最合适的pic单片机。本文中,将为大家介绍两部分内容:一、pic单片机选型参考,二、pic单片......

关键字:pic单片机 选型 中断原理

[智能硬件] 单片机程序的三种构架

单片机程序的三种构架

1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3. 操作系统,此法应该是应用程序编写的最高......

关键字:单片机 构架 程序

[单片机应用] 单片机编程软件学不会?看看这篇keil4、5单片机编程软件使用教程吧!

单片机编程软件学不会?看看这篇keil4、5单片机编程软件使用教程吧!

单片机编程软件以Keil和IAR使用最多,而其中又以keil单片机编程软件为主。本文中,将为大家带来keil4、5单片机编程软件的使用教程,希望本文教程对学习单片机编程软件的朋友有所帮助。......

关键字:单片机编程软件 keil 使用教程

[单片机应用] 大牛分享单片机编程软件使用经验,Keil C51单片机编程软件使用教程

大牛分享单片机编程软件使用经验,Keil C51单片机编程软件使用教程

Keil C51是最知名的单片机编程软件之一,也是从事单片机开发人员必定会使用的单片机编程软件。对于Keil C51单片机编程软件,很多新手朋友并不熟知它的使用方法。为此,小编特地带来这篇有关Keil C51单片机编程软件的使用教程,希望为......

关键字:单片机编程软件 Keil C51 使用教程

[单片机应用] 单片机编程软件超神篇,轻松搞定Keil单片机编程软件安装、破解

单片机编程软件超神篇,轻松搞定Keil单片机编程软件安装、破解

谈及单片机编程软件,Keil和IAR乃必提软件。其中,Keil作为大家更加深受喜爱的单片机编程软件,自然受到更多关注。对于单片机编程软件Keil,许多新手朋友对安装以及破解过程不太熟悉。为此,小编特地带来这篇单片机编程软件Keil的安装、破......

关键字:单片机编程软件 Keil 安装

[消费类电子新闻] 苹果新iPhone量产已进入最后倒计时,正式发布时间待揭晓

苹果新iPhone量产已进入最后倒计时,正式发布时间待揭晓

现在已经8月中旬了,按照往年的惯例,还有不到一个月的时间,苹果的发布会就要来了,现在苹果供应链传出消息,新款iPhone已经进入量产准备的最后阶段了,很快就要批量生产了。现在只剩下新款iPhone发布时间有待揭晓。 ......

关键字:苹果 iPhone

我 要 评 论

网友评论

技术子站

更多

项目外包

更多

推荐博客