找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1648|回复: 0

c51写的24c02的读写程序

[复制链接]
发表于 2004-11-6 03:47:26 | 显示全部楼层 |阅读模式
//整理:聂小猛。该资料来自“51单片机世界”http://go.163.com/~dz2000,欢迎访问。
#include <reg51.h>

// 对24C02的读、写
// extern void DelayMs(unsigned int);
// extern void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
// extern void Write24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);

/***************************************************************************/
#define        WriteDeviceAddress 0xa0
#define        ReadDviceAddress 0xa1

/***************************************************************************/
sbit        SCL=P1^4;
sbit        SDA=P1^3;
sbit        DOG=P3^7;

/***************************************************************************/
void DelayMs(unsigned int number) {
        unsigned char temp;
        for(;number!=0;number--,DOG=!DOG) {
                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;
}

/***************************************************************************/
void Ack() {
        SDA=0;
        SCL=1;
        SCL=0;
        SDA=1;
}

/***************************************************************************/
void NoAck() {
        SDA=1;
        SCL=1;
        SCL=0;
}

/***************************************************************************/
bit TestAck() {
        bit ErrorBit;
        SDA=1;
        SCL=1;
        ErrorBit=SDA;
        SCL=0;
        return(ErrorBit);
}

/***************************************************************************/
bit Write8Bit(unsigned char input) {
        unsigned char temp;
        for(temp=8;temp!=0;temp--) {
                SDA=(bit)(input&0x80);
                SCL=1;
                SCL=0;
                input=input<<1;
        }
}

/***************************************************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
        Start();
        Write8Bit(WriteDeviceAddress);
        TestAck();
        Write8Bit(RomAddress);
        TestAck();
        for(;number!=0;number--) {
                Write8Bit(*Wdata);
                TestAck();
                Wdata++;
        }
        Stop();
        DelayMs(10);
}

/***************************************************************************/
unsigned char Read8Bit() {
        unsigned char temp,rbyte=0;
        for(temp=8;temp!=0;temp--) {
                SCL=1;
                rbyte=rbyte<<1;
                rbyte=rbyte|((unsigned char)(SDA));
                SCL=0;
        }
        return(rbyte);
}

/***************************************************************************/
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
        unsigned char temp,rbyte;
        Start();
        Write8Bit(WriteDeviceAddress);
        TestAck();
        Write8Bit(RomAddress);
        TestAck();
        Start();
        Write8Bit(ReadDviceAddress);
        TestAck();
        while(bytes!=1) {
        *RamAddress=Read8Bit();
        Ack();
        RamAddress++;
        bytes--;
        }
        *RamAddress=Read8Bit();
        NoAck();
        Stop();
}

/***************************************************************************/

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-28 00:45 , Processed in 0.027012 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表