• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: at24c1024  

资源简介

at24c1024驱动函数,解开屏蔽即可测试。

资源截图

代码片段和文件信息

/************************************
eeprom:at24c1024 128kBytewp接地。
XUXING 2011.7.13

************************************/
#include 
#include “delay.h“


#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long 

//用单片机模拟iic
sbit iic_sda=P1^2;
sbit iic_scl=P1^1; 

/***********************************
iic开始传送函数,在scl是高电平且恢复
低电平之前sda由高电平变为低电平
************************************/
void iic_start(void)

  iic_sda=1;  
  iic_scl=1;  
  iic_sda=0;  
  iic_scl=0; 
  
}

/*******************************************
停止传送函数
********************************************/
void iic_stop()
{
  iic_scl=0;
  iic_sda=0;  
  iic_scl=1;
  iic_sda=1; 
}
/********************************************
发送确认(应答)信号 ,即在第九个串行上升沿时
将sda置低电平


void iic_ack()
{
 delay_n_us(10);
 iic_sda =0;
 delay_n_us(10);
 iic_scl=1;
 delay_n_us(10);
 iic_scl=0;
 delay_n_us(10);
}
*********************************************/
/************************************************
非应答
*************************************************/

void iic_nack()
{
  
  iic_sda=1;  
  iic_scl=1;
  iic_scl=0;
 ;
}

/*******************************************
发送一个字节形参d为要发送的数据。
mcu向eeprom 写数据的时候首先传送数据
则调用该函数
********************************************/

bit iic_send_byte(uint8 d)
{
 uint8 i=8;
 bit bit_ack;
 while(i--)
   {
    
if(d&0x80) 
         iic_sda=1;
else 
     iic_sda=0;  //最高有效位先发送,直至最低有效位
    
iic_scl=1;

iic_scl=0;
d<<=1;
   }

      //   test ack
   iic_sda=1;  
   iic_scl=1;   
   bit_ack=iic_sda;
   iic_scl=0;   
   return bit_ack;   // 本段程序时用于检测是否ack的状态

}

/***********************************************
接收一个八位数据 ,当单片机接收eeprom传来的数据时,
则调用该函数
***********************************************/

uint8 iic_receive_byte(void)
{
  uint8 i=8d;
  
  iic_sda=1;
  while(i--)
   {
     d<<=1;

 iic_scl=1;
 if(iic_sda)
     d++;

 iic_scl=0;
   }
   return d;
}

/***********************************************
 写eeprom操作,输入参量为单片机内部存储单元,
 还有eeprom的地址, unsigned int count 数据串的长度
  如果单片机存储的数据的地址为data ,要向eeprom的0x30写数据
  数据串长度为10 ,则调用 at24c1024_write(data0x3010)
  从单片机想eeprom中连续写n个字节数据
************************************************/
void at24c1024_write(uint8* mcu_addrbit addr_p0uint16 *at24c1024_addruint8 count)
 {
   while(count--)
   {
    iic_start();
if(addr_p0==1)
{
  iic_send_byte(0xa2);
}
else
{
   iic_send_byte(0xa0);
}

iic_send_byte(*at2

评论

共有 条评论

相关资源