📄 写入一个字节到24c02 并读出来.c
字号:
/* 第16 课。写入一个字节到24c02 并读出来验证
本课的程序已经包含了上一颗的内容,增加了读24c02 的函数,请看程序:
――――――――――――――――――――――――――――― */
#include <reg51.h>//包括一个51 标准内核的头文件
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define W 0xa0//定义器件在IIC 总线中的地址
#define R 0xa1
sbit SCL=P2^7;
sbit SDA=P2^6;
sbit P10=P1^0;
//定时函数
void Delay(unsigned int number)
{
uchar temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--);
}
}
//开始总线函数
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//结束总线函数
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
//发ACKO
void NoACK()
{
SDA=1;
SCL=1;
SCL=0;
}
//测试ACK
bit TeastACK()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
//写入8 个bit 到24c02
Write8bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
//写入一个字节到24c02 中
void Write24c02(uchar ch,uchar address)
{
Start();
Write8bit(W);
TestACK();
Write8bit(address);
TestACK();
Write8bit(ch);
TestACk();
Stop();
Delay(10);
}
//从24c02 中读出8 个bit
uchar Read8bit()
{
uchar temp2,rbyte=0;
for(temp2=8;temp2!=0;temp2--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((uchar)(SDA));
SCL=0;
}
return(rbyte);
}
//从24c02 中读出1 个字节
uchar Read24c02(uchar address)
{
uchar ch;
Start();
Write8bit(W);
TestACK();
Write8bit(address);
TestACK();
Start();
Write8bit(R);
TestACK();
ch=Read8bit();
NoACK();
Stop();
return(ch);
}
//本课试验写入一个字节到24c02 并读出来验证
void main(void) // 主程序
{
uchar c1,c2;
c1=Read24c02(0x02);
Write24c02(0x03);
c2=Read24c02(0x03);
P10=0;
while(1);
}
/*――――――――――――――――
在主程序中,我们将上一课写入的0x02 位置的数据读出来放在c1 中,新写了一个数
据0x99 在0x03 位置中,并立即将它读出来放在c2 中。
编译,运行,等P10 灯亮后。我们看结果。
这次的看结果,我们要在仿真环境中直接看变量。点程序停止,观察c1 和c2 的值,
可以看到,分别为:0x88 和0x99。数据正确!
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -