📄 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 + -