Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7723936
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: C/C++

2011-01-05 16:02:57

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_()

sbit PCF_SCL=P2^0; sbit PCF_SDA=P2^1;
delay();
RcvStr(uchar suba,num); ISendStr(uchar suba,uchar mdata); ISendbyte(uchar c);void WaitACK();
void Ack_I2c(bit a); uchar RcvByte(); void SendByte(uchar c) ;void Stop_I2c(); void Start_I2c();

extern uchar rd[6];


IRcvStr(uchar suba,num)
{
 uchar j;
 Start_I2c();
 delay();
 SendByte(0xa0);
 delay();
 SendByte(suba);
 delay();
 Start_I2c();
   delay();
 SendByte(0xa1);
 delay();
 for(j=0;j<num;j++)
   {
        rd[j]=RcvByte();
 delay();
 if(j<num-1)Ack_I2c(0);
    
   }
 Ack_I2c(1);
 delay();
 Stop_I2c();
 delay();
}

ISendStr(uchar suba,uchar mdata)
{
 
 Start_I2c();
 SendByte(0xa0);
 delay();
 SendByte(suba);
 delay();
 
 SendByte(mdata);
 delay();
 Stop_I2c();
    delay();
}

 

void Ack_I2c(bit a)
{
 PCF_SDA=a;
   delay();
 PCF_SCL=1;
 delay();
 PCF_SCL=0;
 delay();
}

uchar RcvByte()
{
 uchar BitCnt,retc;
 PCF_SDA=1;
 for(BitCnt=0;BitCnt<8;BitCnt++)
 {
  
  PCF_SCL=1;
  delay();
         retc=retc<<1;
  retc|=PCF_SDA;
              PCF_SCL=0;
       delay();
  
 }
 delay();
 return(retc);
 delay();
}

void SendByte(uchar c)
{
 uchar BitCnt;
 for(BitCnt=0;BitCnt<8;BitCnt++)
 {
  if(c&0x80)PCF_SDA=1;
  else PCF_SDA=0;
  c=c<<1;
  PCF_SCL=1;
    delay();
  PCF_SCL=0;
  delay();
 }
 delay();
 WaitACK();
}

void WaitACK()
{
   uchar errtime=20;
   PCF_SDA=1;
   delay();
   PCF_SCL=1;
   delay();
   while(PCF_SDA)
   {
      errtime--;
   delay();
        if(!errtime) Stop_I2c();
   }
   PCF_SCL=0;
   delay();
}

void Stop_I2c()
{
 
 PCF_SDA=0;
 delay();
 PCF_SCL=1;
 delay();
 PCF_SDA=1;
 delay();
 PCF_SCL=0;
  
}

void Start_I2c()
{
 PCF_SDA=1;
 delay();
 PCF_SCL=1;
 delay();
 PCF_SDA=0;
 delay();
 PCF_SCL=0;
 NOP;NOP;
}

delay()
{
 uchar cc;
 for(cc=0;cc<10;cc++);
}


阅读(907) | 评论(0) | 转发(2) |
0

上一篇:红处接收

下一篇:74HC165读按键

给主人留下些什么吧!~~