📄 24c04.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit sck = P1^4;
sbit sda = P1^7;
/****************************I2C总线开始*************************/
void start_24c04(void)
{
sda = 1;
_nop_();sck = 1;_nop_();
sda = 0;_nop_();
sck = 0;
}
/****************************I2C总线停止*************************/
void stop_24c04(void)
{
sda = 0;
_nop_();sck = 1;_nop_();
sda = 1;
_nop_();
}
/*****************************应答程序**************************/
void ack_24c04(void)
{
uchar i = 255;
sck = 1;_nop_();
while(sda && i--);
sck = 0;
}
//***************************I2C总线初始化************************/
void init_24c04(void)
{
sda = 1;_nop_();//常态
sck = 0;_nop_();//常态
}
/***************************读取一个字节*************************/
uchar read_onebyte_24c04(void)
{
uchar i,dat;
sda = 1; // 释放总线
for(i = 0;i < 8;i++)
{
sck = 1;
dat = dat << 1;
if(sda)dat = dat | 0x01;
sck = 0;
}
sda = 1;sck = 0;
return(dat);
}
/*****************************写入一个字节**********************/
void write_onebyte_24c04(uchar dat)
{
uchar i;
for(i = 0;i < 8;i++)
{
sda = (bit)(dat & 0x80);
dat = dat << 1;
sck = 1;
sck = 0;
}
sck = 0;sda = 1;
}
/*********************对某个地址写一个字节的数据***********************/
void write_add_dat_24c04(uchar add,uchar dat)
{
start_24c04();
write_onebyte_24c04(0xa0);
ack_24c04();
write_onebyte_24c04(add);
ack_24c04();
write_onebyte_24c04(dat);
ack_24c04();
stop_24c04();
}
/********************读取某个地址一个字节的数据*******************/
uchar read_add_dat_24c04(uchar add)
{
uchar dat;
start_24c04();
write_onebyte_24c04(0xa0);
ack_24c04();
write_onebyte_24c04(add);
ack_24c04();
start_24c04();
write_onebyte_24c04(0xa1);
ack_24c04();
dat = read_onebyte_24c04();
stop_24c04();
return(dat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -