可编程逻辑器件应用专区 首页 / 论坛 / 自由讨论 / 可编程逻辑器件应用专区
可编程逻辑器件已经广泛应用于各种电子设备中,其应用、设计已经成为工程师必备的设计技能之一,电子工程专辑“可编程逻辑器件应用”专区是工程师朋友探讨、交流、学习可编程逻辑器件应用的知识乐园,欢迎广大工程师朋友踊跃交流!!
发表新主题  收藏 打印 关注  推荐  推荐到我的小组 
楼主 问题: 急求用单片机读AT24C01的程序,最好实际验证过的 发布时间: 2006-8-1 下午8:24

作者: 陈庆艺

等级: 初入江湖

积分: 121 分

发帖数: 6 次

网站总积分: 121 分

发送消息

加为好友

查看用户的所有发言

小第我第一次做东西,现在需要这个程序,麻烦一下了.
引用 回复 鲜花 ( 0) 臭鸡蛋 ( 0)
第 1 楼 回复主题:急求用单片机读AT24C01的程序,最好实际验证过的 发布时间: 2006-8-3 上午9:48

作者: 仁少

等级: 初入江湖

积分: 125 分

发帖数: 11 次

网站总积分: 125 分

发送消息

加为好友

查看用户的所有发言

  汇编写的24C01 单字节读写程序
; =======================================================
;         24C01存储器I2C总线实验        汇编语言例子
; =======================================================
;
;      ew51仿真编程器         配套实验板学习例程
;
;      中山单片机学习网       诚电科技       站长:逸风
;
;      http://www.zsMCU.com
;      E-mail:ew51@zsmcu.com
; =======================================================
SDA              EQU       P2.0
SCL        EQU       P2.1
Address          EQU       08H
I2CData         EQU       09H
 
ORG 0000H
 
START:
       MOV      SP,#60H
 
       MOV      Address,#00H
       MOV      I2CData,#55H
       CALL      I2C_WRITE   ;写入数据
 
       MOV      I2CDATA,#0AAH   ;
 
       MOV      Address,#00H
       CALL      I2C_READ
       MOV      I2CData,A      ;读出数据
       NOP
       NOP
 
MAIN:
 
       JMP        MAIN
 
/*=======================================================
写一个字节    Address地址  I2CDatata写入的数据
=======================================================*/
I2C_WRITE:
    I2C_WRITE_A:
       LCALL    I2C_START
       MOV      A,#10100000B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_WRITE_A      ;=1,表示无确认,再次发送
      
       MOV      A,Address
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK      
 
       MOV      A,I2CData
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK      
       LCALL    I2C_STOP
RET
 
/*=======================================================
读一个字节    Address地址  Data读出的数据
=======================================================*/
 
I2C_READ:
    I2C_READ_A:
       LCALL    I2C_START
       MOV      A,#10100000B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_READ_A ;=1,表示无确认,再次发送
 
       MOV      A,Address
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK      
 
    I2C_READ_B:
       LCALL    I2C_START
       MOV      A,#10100001B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_READ_B
 
       LCALL    I2C_RECEIVE8BIT
       MOV      I2CData,A
       LCALL    I2C_ACK
       LCALL    I2C_STOP
RET
;=======================================================
;发送开始信号
I2C_START:
       SETB      SCL
       SETB      SDA
       NOP
       NOP
       CLR SDA
       NOP
       NOP
       CLR SCL
RET
;=======================================================
;发送结束信号
I2C_STOP:
       CLR SDA
       NOP
       NOP
       SETB      SCL
       NOP
       NOP
       SETB      SDA
RET
;=======================================================
;发送接收确认信号
I2C_ACk:
       SETB      SDA
       SETB      SCL
       NOP
       NOP
       JB    SDA,I2C_ACK0
       CLR C    
       SJMP      I2C_ACK_END
    I2C_ACK0:
       SETB      C
    I2C_ACK_END:
       CLR SCL
RET
;=======================================================
;送八位数据
I2C_SEND8BIT:
       MOV      B,#08H
I2C_SEND8BIT_A:      
       RLC A
      
       MOV      SDA,C
       SETB      SCL
       NOP
       NOP
       CLR SCL
       DJNZ      B,I2C_SEND8BIT_A
RET
;=======================================================
;接收八位数据
I2C_RECEIVE8BIT:
       MOV      B,#08H
       CLR A
       SETB      SDA
I2C_RECEIVE8IT_A:
       SETB      SCL
       NOP
       NOP
       MOV      C,SDA
       RLC A
       CLR SCL
       DJNZ      B,I2C_RECEIVE8IT_A
 
RET
 
 
5    C语言写的24C01 单字节读写程序
/*=======================================================
                    24C01存储器I2C总线实验   C语言例子  
 =======================================================
 
       ew51仿真编程器         配套实验板学习例程
 
       中山单片机学习网       诚电科技       站长:逸风
 
       http://www.zsmcu.com
       E-mail:ew51@zsmcu.com
=======================================================*/
#include
#include
sbit  SDA=0x90;
sbit  SCL=0x91;
 
//函数声明
unsigned char i2c_read(unsigned char);
void i2c_write(unsigned char,unsigned char);
 
void i2c_send8bit(unsigned char);
unsigned char i2c_receive8bit(void);
void i2c_start(void);
void i2c_stop(void);
bit i2c_ack(void);
//=======================================================
void main(void)
{
       unsigned char dd;
 
       i2c_write(0x00,0x55);
       _nop_();
 
       dd=i2c_read(0x00);
    for(;;)
       {}
}
 
/*=======================================================
i2c_write(地址,数据),写一个字节
=======================================================*/
void i2c_write(unsigned char Address,unsigned char Data)
{
       do{
       i2c_start();
       i2c_send8bit(0xA0);
       }while(i2c_ack());
       i2c_send8bit(Address);
       i2c_ack();
       i2c_send8bit(Data);
       i2c_ack();
       i2c_stop();
       return;
}
/*=======================================================
i2c_read(地址,数据),写一个字节
=======================================================*/
unsigned char i2c_read(unsigned char Address)
{
       unsigned char c;
       do{
       i2c_start();
       i2c_send8bit(0xA0);
       }while(i2c_ack());                //=1,表示无确认,再次发送
       i2c_send8bit(Address);
       i2c_ack();
 
       do{
       i2c_start();
       i2c_send8bit(0xA1);
       }while(i2c_ack());
       c=i2c_receive8bit();
       i2c_ack();
       i2c_stop();
       return(c);
}
//=======================================================
//发送开始信号
void i2c_start(void)
{
       SDA = 1;
       SCL = 1;
       SDA = 0;
       SCL = 0;
       return;
}
//发送结束信号
void i2c_stop(void)
{
       SDA = 0;
       SCL = 1;
       SDA = 1;
       return;
}    
//发送接收确认信号
bit    i2c_ack(void)
{
       bit    ack;
       SDA = 1;
       SCL = 1;
       if     (SDA==1)
       ack = 1;
       else
       ack = 0;
       SCL = 0;
       return      (ack);
}
 
//送八位数据
void i2c_send8bit(unsigned char b)
{
       unsigned  char a;
       for(a=0;a<8;a++)
              {
              if     ((b<
              SDA = 1;
              else
              SDA = 0;
              SCL = 1;
              SCL = 0;
              }
       return;
}
//接收八位数据
unsigned char i2c_receive8bit(void)
{
       unsigned  char a;
       unsigned char b=0;
       for(a=0;a<8;a++)
              {
              SCL = 1;
              b=b<<1;
              if (SDA==1)
              b=b|0x01;       //按位或
              SCL = 0;
              }
       return      (b);
}
引用 回复
鲜花 ( 1) 臭鸡蛋 ( 0)
第 2 楼 回复主题:急求用单片机读AT24C01的程序,最好实际验证过的 发布时间: 2006-8-8 下午12:15

作者: WongPierre

等级: 初入江湖

积分: 186 分

发帖数: 44 次

网站总积分: 186 分

发送消息

加为好友

查看用户的所有发言

在ATMEL的网站上就有程序提供
引用 回复
鲜花 ( 0) 臭鸡蛋 ( 0)
第 3 楼 回复主题:急求用单片机读AT24C01的程序,最好实际验证过的 发布时间: 2008-5-20 下午12:32

作者: 深圳博广达

等级: 初入江湖

积分: 104 分

发帖数: 9 次

网站总积分: 104 分

发送消息

加为好友

查看用户的所有发言

LZ你要AT24C01的程序可以到AT的网站上去下载就OK啦!如果要原装现货,可以同我联系!周到服务,原装现货,优惠的价格!
AT24C01 AT24C02全新原装现货:
AT24C01A-10PU-2.7
24C01BN-SH-T
AT24C02B-10PU-1.8
AT24C02BN-10SU-1.8
AT24C02BN-SH
AT24C04-10PU-2.7
AT24C04N-10SU-2.7
AT24C04N-10SU-1.8
AT24C08A-10PU-2.7
AT24C08AN-10SU-2.7
AT24C08AN-10SU-1.8
AT24C08A-10TU-1.8
AT24C16BN-SH
AT24C164-10SI-2.7
AT24C16A-10TU-1.8
AT24C32A-10PI(U)-2.7
AT24C32AN-10SU-2.7
AT24C32AN-10SU-1.8
AT24C32C-TH
AT24C64A-10PU-2.7
AT24C64AN-10SU-2.7
AT24C64AN-10SU-1.8
AT24C64CN-SH
AT24C128-10PI-2.7
AT24C128N-10SU-2.7
AT24C128N-10SU-1.8
AT24C128BN-SH
AT24C256N-10SU-2.7
AT24C256BN-10SU-1.8
AT24C256BN-SH
深圳博广达科技
赵生:13380332112
深圳博广达 编辑于 2008-5-20 下午12:37
引用 回复
鲜花 ( 0) 臭鸡蛋 ( 1)



快速回复
用户名:
游客null (您目前以游客身份发表,请登陆 | 注册)
标题: *
评论: *
验证码:  * 
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回可编程逻辑器件应用专区 | 返回自由讨论
本论坛仅陈述专家或个人观点,并不代表电子工程专辑网站立场。
返回论坛页首