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

📄 at24c16.c

📁 基于WINBOND单片机W78E516B的最小系统源代码.通过UART具有BOOTLOAD功能.开发环境为KEIL C51.
💻 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 + -