📄 at24c16.c
字号:
#include "config.h"
#include <intrins.h>
#include "io.h"
#include "at24c16.h"
#include "global.h"
#define FM24C16DEVICE 0xa0
void Start(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
SDA=0;
SCL=0;
}
void Stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void Ack(void)
{
SDA=0;
SCL=1;
_nop_();
SCL=0;
SDA=1;
}
void NoAck(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
SCL=0;
}
bit TestAck(void)
{
bit ErrB;
SDA=1;
_nop_();
SCL=1;
_nop_();
ErrB=SDA;
SCL=0;
return(ErrB);
}
bit Write8Bit(U8 input)
{
U8 i;
for(i=8;i!=0;i--)
{
SDA = (bit)(input & 0x80);
SCL = 1;
input = input<<1;
SCL = 0;
}
return (1);
}
void Write24c04(void idata *buffer,U16 address,U8 len)
{
U8 writepage;
U8 idata *ptr;
ptr = buffer;
writepage = FM24C16DEVICE + ((address / 0x100) & 0x07)*2;
Start();
Write8Bit(writepage);
TestAck();
Write8Bit(address & 0xff);
TestAck();
for(;len!=0;len--)
{
Write8Bit(*ptr);
TestAck();
ptr++;
}
Stop();
delayms(10);
}
U8 Read8Bit(void)
{
U8 i,rbyte;
rbyte = 0;
for(i=8;i!=0;i--)
{
SCL = 1;
rbyte = rbyte<<1;
rbyte = rbyte|((U8)(SDA));
SCL = 0;
}
return(rbyte);
}
void Read24c04(void idata *buffer,U16 address,U8 len)
{
U8 temp;
U8 writepage,readpage;
U8 idata *ptr;
ptr = buffer;
temp = (address / 0x100) & 0x07;
writepage = FM24C16DEVICE + temp*2;
readpage = writepage + 1;
Start();
Write8Bit(writepage); /* 写页地址 */
TestAck();
Write8Bit((U8)(address & 0xff)); /* 写该页下的具体地址 */
TestAck();
Start();
Write8Bit(readpage);
TestAck();
while(len!=1)
{
*ptr = Read8Bit();
Ack();
ptr++;
len--;
}
*ptr = Read8Bit();
NoAck();
Stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -