欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機i2c存儲器24c02驅動程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年10月16日   【字體:


這是電路圖,這是從這個項目中取得的文件里面有電路圖和仿真文件:http://www.raoushi.com/bbs/dpj-22586-1.html

下面是 i2c.c文件:
#include <reg52.h>
#include "i2c.h"
#include "delay_ms.h"
void delay()
{
 ;;
}
void i2cinit()//總線初始化
{
 SDA = 1;
 delay();
 SCL = 1;
 delay();
}
void start()//啟動信號
{
 SDA = 1;
 SCL = 1;
 delay();
 SDA = 0;
 delay();
}
void stop()//停止信號
{
 SDA = 0;
 delay();
 SCL = 1;
 delay();
 SDA = 1;
 delay();
}
void respons()//應答信號
{
 unsigned char i = 0;
 SCL = 1;
 delay();
 while(SDA == 1 && i < 255)//等待應答,過一段時間不應答退出循環
  i++;
 SCL = 0;
 delay();
}
void writebyte(unsigned char date)//寫一個字節
{
 unsigned char i,temp;
 temp = date;
 for(i = 0; i < 8; i++)
 {
  temp <<= 1;//temp左移一位后高位進CY
  SCL = 0;
  delay();
  SDA = CY;
  delay();
  SCL = 1;
  delay();
 } 
 SCL = 0;//應答信號中SCL = 1,所以這里要置0
 delay();
 SDA = 1;//用完要釋放數據總線
 delay();
}
unsigned char readbyte()//讀一個字節
{
 unsigned char i,k;
 SCL = 0;
 delay();
 SDA = 1;
 for(i = 0; i < 8; i++)
 {
  SCL = 1; 
  delay();
  k = (k << 1) | SDA; //和最低位或,一位位送到K
  SCL = 0;
  delay();
 }
 delay();
 return k;
}
void write_add(unsigned char address,unsigned char date)//向地址寫一個字節數據
{
 start();
 writebyte(0xa0);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
 respons();
 writebyte(address);
 respons();
 writebyte(date);
 respons();
 stop();
}
unsigned char read_add(unsigned char address)//向地址讀一個字節數據
{
 unsigned char date;
 start();
 writebyte(0xa0);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
 respons();
 writebyte(address);
 respons();
 start();
 writebyte(0xa1);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
 respons();
 date = readbyte();
 stop();
 return date;
}


//向地址寫n個字節數據,數據存放在指針P指的數組中
void write_n_add(unsigned char * p,unsigned char address,unsigned char n)
{
 unsigned char i;
 for(i = 0; i < n; i++)
 {
  write_add((address + i),*(p + i));
  delay_ms(20);//一定要適當延時,不然寫不進去
 }
}
//向地址讀n個字節數據,數據存放在指針P指的數組中
void read_n_add(unsigned char * p,unsigned char address,unsigned char n)
{
 unsigned char i;
 for(i = 0; i < n; i++)
 {
  *(p + i) = read_add(address + i);
  
 }
}

 

關閉窗口

相關文章