李家大少 发表于 2015-7-7 17:31:51

STC单片机驱动RX8025问题

刚刚看了一位大神的STC单片机驱动RX8025程序   在用STC的51模拟IIC读写RX8025,在读写过程中不能按指定寄存器来读写。无论指定的是哪个寄存器,读写寄存器都是从00H开始。
有空的朋友,可以帮忙看下么,先谢谢了.


具体如下:采用11.0592MHZ + 1T模式
unsigned char IIC_err;
sbit SDA = P1^7;
sbit SCL = P1^6;
#define      R_TIME0x64   
#define S_SDA      (SDA = 1)
#define S_SCL         (SCL = 1)
#define C_SDA      (SDA = 0)
#define C_SCL   (SCL = 0)
/***********************************IIC 开始******************************/

void I2cDelay(void)
{
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();      
}

/***************************************************************************/
//SCL'''''''''''''\____
//SDA'''''''\____

void Start(void)
{            
      S_SCL;
      S_SDA;
      I2cDelay();
      C_SDA;
      I2cDelay();
      C_SCL;//产生下降沿
}

/***************************************************************************/
//SCL____/''''''''''''''
//SDA______/''''''''
void Stop(void)
{   
      C_SDA;
      I2cDelay();
      S_SCL;
      I2cDelay();      
      S_SDA;//产生上升沿//结速
}

/***************************************************************************/
//SCL__/'1'''\__/''2''\__/''3''\__/''4''\__/''5''\__/''6''\__/''7''\__/''8''\__/''9''\__
//SDA_<M::::::><:::::::><:::::::><:::::::><:::::::><:::::::><:::::::><::::::L>\__ACK__从设备返回
unsigned char Write8Bit(unsigned char input)
{
      unsigned char temp;
      temp = 8;
      while(temp--)
      {
                if(input&0x80)
                {
                        S_SDA;
                }
                else
                {
                        C_SDA;
                }
                I2cDelay();
                S_SCL;
                I2cDelay();
                C_SCL;
                input <<= 1;
      }
      S_SDA;      //发送完1字节后释放总线      
      I2cDelay();
      S_SCL;//上升沿检测信号
      I2cDelay();
      if(SDA)//检测ACK
      {

                C_SCL;
      I2cDelay();
                S_SDA;
                return 1;
      }
      C_SCL;
      I2cDelay();
      S_SDA;
    return 0;//有ACK      
}
/***************************************************************************/
//SCL__/'1'''\__/''2''\__/''3''\__/''4''\__/''5''\__/''6''\__/''7''\__/''8''\__/''9''\__
//SDA_<M::::::><:::::::><:::::::><:::::::><:::::::><:::::::><:::::::><::::::L>\__ACK__->主设备返回

unsigned char Read8Bit(unsigned char Ack)
{
      unsigned char temp,rbyte=0;
      for(temp=0;temp<8;temp++)
      {
                I2cDelay();
                rbyte=rbyte<<1;
                S_SCL;
                I2cDelay();
                if(SDA)rbyte++;//下降沿前读取数据
                C_SCL;

      }
      if(Ack)//回应ACK
      {
         SDA = 0;
      }
      else
      {
         SDA = 1;
      }
      I2cDelay();
      S_SCL;//第9个脉冲
      I2cDelay();
      C_SCL;
      I2cDelay();
      S_SDA;//释放总线
      return(rbyte);
      
}
void WriteI2cPage(unsigned char DAdd,unsigned int add,unsigned char *str,unsigned char len)
{
      IIC_err = 0;
      Start();
      IIC_err += Write8Bit(DAdd);
      if(DAdd == E_PROM)
      {
      IIC_err += Write8Bit(add>>8);
      }
      IIC_err += Write8Bit(add);//写入地址
      for(;len > 0;len--)
      {
         IIC_err += Write8Bit(*str);
          str++;
      }
      Stop();
}

void ReadI2cPage(unsigned char DAdd,unsigned int add,unsigned char *str,unsigned char len)
{
      IIC_err = 0;
      Start();
      IIC_err += Write8Bit(DAdd);
      if(DAdd == E_PROM)
      {
      IIC_err += Write8Bit(add>>8);
      }
      IIC_err += Write8Bit(add);
      Start();
      IIC_err += Write8Bit(DAdd+1);
      for(;len > 1;len--)
      {
          *str=Read8Bit(1);
          str++;
      }
      *str = Read8Bit(0);
      Stop();
}
/*IIC 结束*/如下:

请问这里的(DAdd == E_PROM)是什么含义呢
http://www.amobbs.com/forum.php?mod=viewthread&tid=4906952&highlight=rx8025   原贴致敬

愤怒的蜗牛 发表于 2018-1-4 11:00:01

最近在用8025,关注下
页: [1]
查看完整版本: STC单片机驱动RX8025问题