导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→IIC通讯协议发送和接收字节问题![求助][koji]

 *第16704篇: IIC通讯协议发送和接收字节问题![求助]

  
楼 主:koji 2008年2月22日10:31
 IIC通讯协议发送和接收字节问题![求助]
单片机I/O口模拟IIC数据发送和接收字节的程序:

//--------------------------------------------------------------------------------------------------
// 函数名称: 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从1到0啊?,不是说SCL在低电平才能改变数据吗? 
   SCL = 0;    
  }
  else
  {  
   SDA = 0;    // 否则传送位0
   SCL = 1;
   delayNOP();
   SCL = 0;  
  }
  ch = ch  <  <1;    // 数据左移一位
 }
}
//--------------------------------------------------------------------------------------------------
// 函数名称: IICreceiveByte
// 返回接收的数据
// 函数功能: 接收一字节子程序
//--------------------------------------------------------------------------------------------------
unsigned char IICreceiveByte(void)
{
 unsigned char idata n=8;    // 从SDA线上读取一上数据字节,共八位
 unsigned char tdata;
 while(n--)
 {
  SDA = 1;
  SCL = 1;    //这个地方为什么也要先置1呢?
  tdata = tdata  <  <1;    // 左移一位,或_crol_(temp,1)    //为什么要先左移,这句应该放到循环最后面吧!
  if(SDA == 1)
   tdata = tdata|0x01;    // 若接收到的位为1,则数据的最后一位置1
  else 
   tdata = tdata&0xfe;    // 否则数据的最后一位置0
  SCL=0;
 }
 return(tdata);
}

我是新手,请大家指教!

  
2楼:liuyalan 2008年10月11日12:12
 11

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:[公告]专业供应各类CCD图像传感器

[下一篇主题]:求助,C8051F350,AD转换