No.100794 作者:newman0708 邮件:newman0708@gmail.com ID:65075 登陆:9次 文章数:18篇 最后登陆IP:218.80.13.101 最后登陆:2007/4/27 20:37:57 注册:2006/12/10 11:02:14 财富:183 发帖时间:2006/12/19 14:55:43 发贴者IP:211.167.159.68 标题:newman0708:我的24C16A芯片读写不了,请指点一下, 摘要:No.100794我的24C16A芯片读写不了,请指点一下, 下面是我的测试代码, 读和写都不行,不知道哪里出了问题。 #1 A0 接地 #2 A1 接地 #3 A2 接地 #4 GND 接地 #5 SDA P2^1 #6 SCL P2^0 #7 WP 接地 #8 VCC 5V #include <reg52.h> #include <intrins.h> #define OP_WRITE 0xa0 #define OP_READ 0xa1 sbit SCL=P2^0; sbit SDA=P2^1; void delayms(unsigned char address); /*----------------------------------------------- 调用方式:void start_bit(void) 函数说明:开始位 -----------------------------------------------*/ void start_bit(void) { SCL=1;_nop_(); SDA=1;_nop_(); SDA=0;_nop_(); SCL=0;_nop_(); } /*----------------------------------------------- 调用方式:void stop_bit(void) 函数说明:停止位 -----------------------------------------------*/ void stop_bit(void) { SDA=0;_nop_(); SCL=1;_nop_(); SDA=1;_nop_(); } /*----------------------------------------------- 调用方式:void mast_ack(void) 函数说明:主答函数 -----------------------------------------------*/ void mast_ack(void) { SCL=0;_nop_(); SDA=0;_nop_(); SCL=1;_nop_(); SCL=0;_nop_(); SDA=1;_nop_(); } /*----------------------------------------------- 调用方式:void ack(void) 函数说明:应答函数 -----------------------------------------------*/ void ack(void) { SDA=1; SCL=0;_nop_(); SCL=1;_nop_(); while(SDA){;} SCL=0;_nop_(); } /*----------------------------------------------- 调用方式:void no_ack(void) 函数说明:无需应答位,在读程序中用到 -----------------------------------------------*/ void no_ack(void) { SDA=1;_nop_(); SCL=1;_nop_(); SCL=0;_nop_(); } /*----------------------------------------------- 调用方式:write_8bit(unsigned char ch) 函数说明:写一个字节(8位)数据 -----------------------------------------------*/ write_8bit(unsigned char ch) { unsigned char i=8; SCL=0;_nop_(); while(i--) { SDA=(bit)(ch&0x80);_nop_(); ch < <=1; SCL=1;_nop_(); SCL=0;_nop_(); } } /*---------------------------------------------- 调用方式:unsigned char read24c16(unsigned int address) 函数说明:读24c16指定地址数据(字节读) -----------------------------------------------*/ unsigned char read24c16(unsigned int address) { unsigned char page=(address/256) < <1; unsigned char data rdata; unsigned char i=8; start_bit(); write_8bit(OP_WRITE|page); ack(); write_8bit(address); ack();//伪写 start_bit(); write_8bit(OP_READ|page); ack(); while(i--) { rdata < <=1; SCL=0;_nop_(); SCL=1; _nop_(); if(SDA) rdata|=0x01; } no_ack(); ......
>>返回讨论的主题
|