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

📄 24c02.c

📁 对24c02进行单字写操作............................................................
💻 C
字号:
/********************************************************
* 工程名称:                               
* 功能描述:   对24c02进行单字写操作                        
* IDE环境:   伟福KeilC uVision3  自制的下载线与实验板        
* 硬件连接:  针对配合AT89S51精简开发板(第三版本)使用             
* 组成文件:   24c02.C    
********************************************************/
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define BYTE unsigned int
#define someNop(); _nop_(); _nop_(); _nop_(); _nop_();
sbit SDA_24 = P0^5;                 //定义24C02数据线
sbit SCL_24 = P0^4;                 //定义24C02时钟线
bit ACK  =  1;				  //??????


/********************************************************
* 名称: startI2C
* 说明: 
* 功能: 启动I2C总线 
* 调用: someNOp()
* 输入: 无
* 返回值:无
********************************************************/
void startI2C()
 {
    EA  =  0;
	SDA_24  =  1; SCL_24  =  1; someNop(); //INI
	SDA_24  =  0; someNop(); //启动
	SCL_24  =  0;
 }

/********************************************************
* 名称: stopI2C
* 说明: 
* 功能: 停止I2C总线 
* 调用: someNOp()
* 输入: 无
* 返回值:无
********************************************************/
void stopI2C()
 {
    SDA_24  =  0; SCL_24  =  0; someNop(); //INI
	SCL_24  =  1; someNop();SDA_24  =  1; //停止
	EA  =  1;
 }

/********************************************************
* 名称: waitAck
* 说明: 等待ACK
* 功能: 停止I2C总线 
* 调用: someNop();stopI2C()  
* 输入: 无
* 返回值:0?1
********************************************************/
bit waitAck()
{   //errtime??? = 20 or 255
	uchar errtime  =  255; //因故障接收方无ACK,超时为255
    SDA_24  =  1;someNop(); 
    SCL_24  =  1; someNop();
	while(SDA_24) 
	{
		errtime--;
		if(!errtime)
		{
			stopI2C();
			return 0;
		}
	}
	SCL_24  =  0;
	return 1;
}

/********************************************************
* 名称: sendByte
* 说明: 通常被用来写24c02一个字节
* 功能: 向I2C总线发送一个字节
* 调用: someNop()  
* 输入: 无
* 返回值:无
********************************************************/
void sendByte(BYTE ch)
{
    uchar i  =  8;
	while(i--)
	{
		SCL_24  =  0; someNop(); //或者一个_nop_()
		SDA_24  =  (bit)(ch&0x80);
		ch  =  ch << 1; someNop(); 
		SCL_24  =  1; someNop(); 
	}
	SCL_24  =  0;
}

/********************************************************
* 名称:  sendStr 
* 说明:
* 功能:  向有子地址的器件发送3个字节数据,发送的内容
*         是S指向的内容
* 调用:  startI2C();sendByte();waitAck();stopI2C();
* 输入:  器件地址Device,单元地址StartUint,发送内容ch
* 返回值:无
********************************************************/
void sendStr(uchar Device,uchar StartUint,BYTE ch)
{
	startI2C();
	sendByte(Device);	
	waitAck();
	sendByte(StartUint);
    waitAck();
	sendByte(ch);	
	waitAck();
	stopI2C();
}

/********************************************************
* 名称:main
* 说明:这是个测试程序,向24c02存储数据
* 功能:向24c02的一个指定单元发送指定的数据
* 调用:sendStr()
* 输入:无
* 返回值:无
********************************************************/
void main()
{
  BYTE T = 0x33;         //要发送数据               
  sendStr(0xa0,0x00,T);	 //	 发送到24C02 的00单元
  while(1);				 
}

⌨️ 快捷键说明

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