⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c04.c

📁 51写的一个定时时钟
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define ucahr  unsigned char 
#define uint   unsigned int

sbit SDA=P3^7;
sbit SCL=P3^6;

#define SomeNOP(); { _nop_(); }

delay32()
{
unsigned int i=300;
while(i--);
}

/*--------------------------------------------------------------------------------
  调用方式:void I2CStart(void) ﹫2001/07/0 4
  函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
  EA=0;
  SDA=1; SCL=1; SomeNOP();//INI
  SDA=0; SomeNOP(); //START
  SCL=0;
}

/*--------------------------------------------------------------------------------
  调用方式:void I2CStop(void) ﹫2001/07/0 4
  函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
  SCL=0; SDA=0; SomeNOP(); //INI
  SCL=1; SomeNOP(); SDA=1; //STOP
  EA=1;
}

/*--------------------------------------------------------------------------------
  调用方式:I2CAck(void) ﹫2001/07/0 4
  函数说明:私有函数,I2C专用,等待从器件接收方的应答
---------------------------------------------------------------------------------*/
 WaitAck(void)
{
  bit Errorbit;
  SDA=1;
  SCL=1;
  Errorbit=SDA;
  SCL=0;
  return(Errorbit);
  }


/*--------------------------------------------------------------------------------
 调用方式:void SendAck(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
---------------------------------------------------------------------------------*/
 void SendNotAck(void)
 {
 SDA=1; SomeNOP();
 SCL=1; SomeNOP();
 SCL=0;
 }


/*--------------------------------------------------------------------------------
 调用方式:void I2CSend(unsigned char ch) ﹫2001/07/0 5
 函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CSendByte(unsigned char ch)
{
  unsigned char i=8;
  while(i--)
       {
         SCL=0;_nop_();
         SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
         SCL=1; SomeNOP();
       }
  SCL=0;
}

/*--------------------------------------------------------------------------------
  调用方式:unsigned char I2CReceive(void) ﹫2001/07/0 5
  函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
unsigned char I2CReceiveByte(void)
{
  unsigned char i=8;
  unsigned char dat=0;
  SDA=1;
  while(i--)
       {
         dat<<=1;
         SCL=0;SomeNOP();
         SCL=1;SomeNOP();
         dat|=SDA;
       }
  SCL=0;
  return(dat);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*-------------------------------------------------------------------------------------*/
/*  向AT24C02的任意地址写入一个字节                                                    */
/*=====================================================================================*/

void Write_24c04( unsigned char add,unsigned char dat)
{
 I2CStart();
 I2CSendByte(0xA0);
 WaitAck();
// I2CSendByte((char)(add>>8));delay32();   //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的话 那么这句话就不需要屏蔽了
// WaitAck();
 I2CSendByte(add);delay32();
 WaitAck();
 I2CSendByte(dat);delay32();
 WaitAck();
 I2CStop();
}

/*-------------------------------------------------------------------------------------*/
/*  从AT24C02的任意地址读入一个字节                                                    */
/*=====================================================================================*/
unsigned char Read_24C04(unsigned char add)
{
 unsigned char a;
 I2CStart();
 I2CSendByte(0xA0);
 WaitAck();
 //I2CSendByte((char)(add>>8));   //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的话 那么这句话就不需要屏蔽了
 //WaitAck();
 I2CSendByte(add);
 WaitAck();
 I2CStart();
 I2CSendByte(0xA1);
 WaitAck();
 a=I2CReceiveByte();
 SendNotAck();
 I2CStop();
 return(a);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -