久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3021|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

AT89S52單片機模擬I2C總線協(xié)議讀寫AT24C04

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-6 13:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      I2C總線是2條線總線.數(shù)據(jù)線SDA,時鐘線SCL.結(jié)構(gòu)簡單.  
      AT24C04是具有I2C總線接口的EEPROM.大小為512*8bit.單片機AT89S52本身不具有I2C總線結(jié)口,所以可編寫程序用并行端口模擬I2C總線協(xié)議讀寫AT24C04.
     多個設(shè)備通信的重點(1.電平的區(qū)別,如串口通信中PC與單片機通信,PC機[color=#cc0033]串口電平[/color]值為+12V~-12V,單片機為TTL電平0V~+5V.,所以要用電平轉(zhuǎn)換芯片轉(zhuǎn)電平.2,通信協(xié)議.(串口通信協(xié)議))
      具體的協(xié)議內(nèi)容與數(shù)據(jù)格式可查資料.
代碼如下:
#include <reg52.h>
#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;
  }
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品成人热国产成 | 国产精品久久久久久久久久久久冷 | 欧美电影一区 | 成人国产精品免费观看 | 国产精品日韩欧美一区二区 | 中文字幕在线二区 | 日日噜| 亚洲国产欧美日韩 | 久久久久久国产精品免费免费狐狸 | 日韩欧美一区二区三区四区 | 先锋影音资源网站 | 少妇av片| 日韩在线精品 | 国内毛片毛片毛片毛片 | 亚洲福利一区二区 | 91视频88av | 国产精品三级久久久久久电影 | 欧美综合国产精品久久丁香 | 天天操天天怕 | 欧洲尺码日本国产精品 | 国产乱码久久久久久 | 91精品久久久久久久 | 中文字幕在线观看一区二区 | 久久精品网| 久久国产高清 | 天天干,夜夜操 | 欧美成年人 | 久久久免费毛片 | 国产成人精品久久二区二区91 | 国产精品久久av | av永久 | 国产综合久久 | 精品欧美一区二区在线观看视频 | 国产精品视频二区三区 | 久久久久1| 亚洲成人免费av | 91精品国产91久久综合桃花 | 成人在线免费 | 欧美不卡一区二区三区 | 欧美日韩高清一区 | 国产成人精品一区二区三区四区 |