导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[koji]24C01读写问题[求助]



No.54440
作者:koji
邮件:deungxu0740@sina.com
ID:44787
登陆:9次
文章数:5篇
最后登陆IP:116.24.163.55
最后登陆:2009/7/19 21:47:58
注册:2005/12/20 14:03:47
财富:131
发帖时间:2009/3/2 22:29:47
发贴者IP:116.24.84.126
标题:koji:24C01读写问题[求助]
摘要:No.5444024C01读写问题[求助] //-----------------------函数声明,变量定义--------------------------------------------------------
#include   <reg51.h>  
#include   <intrins.h>  
sbit SDA=P1^0;                          // 将p1.0口模拟数据口
sbit SCL=P1^1;                          // 将p1.1口模拟时钟口
#define  NUM  8                      // 接收和发送缓存区的深度
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                  
unsigned char idata sendbuf[NUM];       // 数据发送缓冲区
unsigned char idata receivebuf[NUM];    // 数据接收缓冲区
bit   bdata SystemError;                // 从机错误标志位
//--------------------------------------------------------------------------------------------------
// 函数名称: iic_start()
// 函数功能: 启动I2C总线子程序
//--------------------------------------------------------------------------------------------------
void iic_start(void)
{  EA=0;            //时钟保持高,数据线从高到低一次跳变,I2C通信开始
 SDA = 1;         
 SCL = 1;
 delayNOP();      // 延时5us 
 SDA = 0;
 delayNOP();
 SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: iic_stop()
// 函数功能: 停止I2C总线数据传送子程序
//--------------------------------------------------------------------------------------------------
void iic_stop(void)

 SDA = 0;       //时钟保持高,数据线从低到高一次跳变,I2C通信停止
 SCL = 1;
 delayNOP();
 SDA = 1;
 delayNOP();
 SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: slave_ACK
// 函数功能: 从机发送应答位子程序
//--------------------------------------------------------------------------------------------------
void slave_ACK(void)
{
 SDA = 0;    
 SCL = 1;
 delayNOP();   
 SDA = 1;
 SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: slave_NOACK
// 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
//--------------------------------------------------------------------------------------------------
void slave_NOACK(void)

 SDA = 1;   
 SCL = 1;
 delayNOP();
 SDA = 0;
 SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: check_ACK
// 函数功能: 主机应答位检查子程序,迫使数据传输过程结束
//--------------------------------------------------------------------------------------------------
void check_ACK(void)

 SDA = 1;      // 将p1.0设置成输入,必须先向端口写1
 SCL = 1;
 F0 = 0;
 if(SDA == 1)    // 若SDA=1表明非应答,置位非应答标志F0
  F0 = 1;
 SCL = 0;
}

//--------------------------------------------------------------------------------------------------
// 函数名称: IICSendByte
// 入口参数: ch
// 函数功能: 发送一个字节
//--------------------------------------------------------------------------------------------------
void IICSendByte(unsigned char ch)

 unsigned char idata n=8;     // 向SDA上发送一位数据字节,共八位
 while(n--)
 { 
  if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
  {
   SDA = 1;    // 传送位1
   SCL = 1;
   delayNOP();
   SDA = 0;
   SCL = 0;    
  }
  else
  {  
   SDA = 0;    // 否则传送位0
   SCL ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:78531毫秒 查询6次