Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630810
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:31:12

原文地址:I2C C51 作者:luozhiyong131

#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++);
}


阅读(124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~