搜索
查看: 2784|回复: 1

关于MC44BS373CA的I2C与单片机的通信问题

[复制链接]

3

主题

7

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2011-5-11 11:22:29 | 显示全部楼层 |阅读模式
大家好,有问题想请教大家,在使用80C51单片机IO口模拟I2C总线与调制芯片MC44BS373CA的I2C总线口通信时,出现了问题,单片机接受不到MC44BS373CA的应答信号,下面是调试使用的程序,不知道哪里出现了问题,请大家帮帮忙啊,看看是不是程序出现了错误,不甚感激哦!
#include<reg51.h>
#include"intrins.h"
#define false 0
#define ture  1
sbit sda=P1^2;              //数据
sbit scl=P1^3;             //时钟
bit ack;                   //应答信号
//************************************************************************//
//                                延时子程序                             //
//**********************************************************************//
void delay(int x,int y)
{
  int i,j;
  for(i=0;i<x;i++)
  {
  for(j=0;j<y;j++);
  }
}
//************************************************************************//
//                                i2c开始信号                            //
//**********************************************************************//
void i2c_start()
{
sda=1;
scl=1;
delay(2,2);
sda=0;
delay(2,2);              //i2c初始化
scl=0;
_nop_();                //准备发送数据
}
//********************************************************************//
//                           i2c结束信号                            //
//******************************************************************//
void i2c_stop()
{
scl=0;
sda=0;
delay(2,2);
scl=1
delay(2,2);
sda=1;
delay(2,2);
}
//********************************************************************//
//                          i2c接收应答信号                          //
//******************************************************************//
bit i2c_ack()
{
  unsigned char error=255;
  sda=1;
  delay(2,2);
  scl=1;
  delay(2,2);
  while(sda)
   {
     error=error-1;
     if(error<=0)
     {
      i2c_stop();
      return(false);
     }
   }
   scl=0;
   _nop_();
   return (ture);
}
//********************************************************************//
//                         i2c发送8字节                              //
//******************************************************************//
void i2c_sendbyte(unsigned char x)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    scl=0;
    if((x<<i)&0x80) sda=1;       //发送
    else sda=0;
    _nop_();
    _nop_();
    scl=1;
    delay(2,2);
    }
   scl=0;
}
//*********************************************************************//
//                         i2c发送单个字节                            //
//*******************************************************************//
unsigned char i2c_send(unsigned char add,c1,c0,fm,fl)
{
    i2c_start();
    i2c_sendbyte(add);        //发送x
    ack=i2c_ack();
   if(ack)
   {i2c_sendbyte(c1);
    ack=i2c_ack();
     if(ack){i2c_sendbyte(c0);
      ack=i2c_ack();
        if(ack){i2c_sendbyte(fm);
         ack=i2c_ack();
          if(ack){i2c_sendbyte(fl);
           ack=i2c_ack();
            if(ack){i2c_stop();return (1); }
            else return(0);
          }
           else return(0);
          }
        else return(0);
      }
     else return(0);
    }
   else return(0);
}
//********************************************************************//
//                             主函数                                //
//******************************************************************//
void main()
{
   unsigned char result=1;
   result=i2c_send(0xCA,0x80,0x18,fm,fl);
  if(result==0)
  { result=i2c_send(0xCA,0x80,0x18,fm,fl);
  }
}
回复

使用道具 举报

0

主题

5

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2011-8-13 14:53:18 | 显示全部楼层

RE:关于MC44BS373CA的I2C与单片机的通信问题

相关程序 http://catv888.taobao.com
QQ: 306099455
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-4-28 13:34 , Processed in 0.072603 second(s), 9 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表