找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5994|回复: 0
收起左侧

单片机模拟I2C总线读写EEPROM(24CXX)之最简单的读写程序

[复制链接]
ID:104835 发表于 2016-2-2 03:19 | 显示全部楼层 |阅读模式
本帖最后由 51黑科技 于 2016-2-2 03:22 编辑

下面是一个最简单的读写程序,可以用来检测线路状况。先附上程序和电路,后面附有说明。
电路:

说明:P2口的LED都是我用来检测电路执行到哪一步的,个人觉得一目了然。
程序:
#include <reg51.h>
#define unit unsigned int
#define uchar unsigned char
int ok;
sbit scl=P0^0;         
sbit sda=P0^1;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
delay(void)               //delay
{
  int i;
  led1=1;
  for(i=0;i<1;i++) led1=0;
}
start(void)            //start
{
  sda=1;
  scl=1;
  delay();
  sda=0;
  delay();
  scl=0;
  led0=0;
}
stop(void)         //stop
{
  sda=0;
  scl=1;
  delay();
  sda=1;
  delay();
  scl=0;
}
checkanswer(void)       //check answer
{
  sda=1;
  scl=1;
  if(sda==1)
  {
  F0=1;
  led7=0;
  }
  scl=0;
  led3=0;
}
sendabyte(int temps)       //send a byte
{
  uchar n=8;
  while(n--)
  {
    led2=1;
    if((temps&0x80)==0x80)
{
   sda=1;
   scl=1;
   delay();
   scl=0;
}
else
{
   sda=0;
   scl=1;
   delay();
   scl=0;
}
temps=temps<<1;
led2=0;
  }
}
reciveabyte()           //recive a byte
{
  uchar n=8,tempr;
  while(n--)
  {        //uchar idata *abyte
   scl=1;
tempr=tempr<<1;
if(sda==1)
   tempr=tempr|0x01;
else
   tempr=tempr&0xfe;
scl=0;
  }
  ok=tempr;
  return(ok);
}
main(void)         //MAIN
{
start();
sendabyte(0xa0);
checkanswer();
if(F0==1) return;
sendabyte(0x00);
checkanswer();
if(F0==1) return;
sendabyte(0x11);
checkanswer();
if(F0==1) return;
/*-----------------------*/
start();
sendabyte(0xa0);
checkanswer();
if(F0==1) return;
sendabyte(0x00);
checkanswer();
if(F0==1) return;
start();
sendabyte(0xa1);
checkanswer();
if(F0==1) return;
reciveabyte();
if(ok==0x11) led6=0;
stop();
}
说明:
1、写驱动程序之前建议了解清楚24CXX系列芯片的读写时序,中文资料:http://www.51hei.com/bbs/dpj-30339-1.html
2、程序功能:先在地址0x00写入一个数据0x11,然后再读出来,若写入的数据和读出的数据一样就点亮led6。下一篇来电复杂点的:http://www.51hei.com/bbs/dpj-43299-1.html



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表