Exemplo n.º 1
0
/*!
 *  @brief      SCCB起始信号
 *  @since      v5.0
 */
static uint8 SCCB_Start(void)
{
    SDA_H();
    SCL_H();
    SCCB_DELAY();

    SDA_DDR_IN();
    if(!SDA_IN())
    {
        SDA_DDR_OUT();
        return 0;   /* SDA线为低电平则总线忙,退出 */
    }
    SDA_DDR_OUT();
    SDA_L();

    SCCB_DELAY();
    SCL_L();

    if(SDA_IN())
    {
        SDA_DDR_OUT();
        return 0;   /* SDA线为高电平则总线出错,退出 */
    }
    //SDA_DDR_OUT();
    //SDA_L();
    //SCCB_delay();
    return 1;
}
Exemplo n.º 2
0
/*
 * LPLD_SCCB_SendByte
 * SCCB接收数据,内部调用
 */
static uint8 LPLD_SCCB_ReceiveByte(void)  
{ 
  uint8 i=8;
  uint8 ReceiveByte=0;
  
  SCCB_SDA_O=1;	
  SCCB_DELAY();
  
  SCCB_SDA_IN();	
  
  while(i--)
  {
    ReceiveByte<<=1;      
    SCCB_SCL=0;
    SCCB_DELAY();
    
    SCCB_SCL=1;
    SCCB_DELAY();	
    
    if(SCCB_SDA_I)
    {
      ReceiveByte|=0x01;
    }
    
  }
  SCCB_SDA_OUT();
  SCCB_SCL=0;
  
  return ReceiveByte;
}
Exemplo n.º 3
0
/*!
 *  @brief      接收SCCB总线的数据
 *  @return     接收到的数据
 *  @since      v5.0
 */
static int SCCB_ReceiveByte(void)
{
    uint8 i = 8;
    uint8 ReceiveByte = 0;

    //SDA_H();
    //SCCB_DELAY();
    SDA_DDR_IN();

    while(i--)
    {
        ReceiveByte <<= 1;
        SCL_L();
        SCCB_DELAY();
        SCL_H();
        SCCB_DELAY();

        if(SDA_IN())
        {
            ReceiveByte |= 0x01;
        }


    }
    SDA_DDR_OUT();
    SCL_L();
    return ReceiveByte;
}
Exemplo n.º 4
0
/*
 * LPLD_SCCB_Start
 * SCCB起始信号,内部调用
 */
static uint8 LPLD_SCCB_Start(void)
{
  SCCB_SDA_O=1;
  SCCB_SCL=1;
  SCCB_DELAY();
  
  SCCB_SDA_IN();
  if(!SCCB_SDA_I)
  {
    SCCB_SDA_OUT();	
    return 0;
  }
  SCCB_SDA_OUT();	
  SCCB_SDA_O=0;
  
  SCCB_DELAY();
  
  SCCB_SDA_IN();
  if(SCCB_SDA_I) 
  {
    SCCB_SDA_OUT();
    return 0;
  }
  SCCB_SDA_OUT();
  SCCB_SDA_O=0;

  return 1;
}
Exemplo n.º 5
0
/*
 * LPLD_SCCB_Stop
 * SCCB停止信号,内部调用
 */
static void LPLD_SCCB_Stop(void)
{
  SCCB_SCL=0;
  SCCB_SDA_O=0;
  SCCB_DELAY();
  
  SCCB_SCL=1;
  SCCB_SDA_O=1;
  SCCB_DELAY();
}
Exemplo n.º 6
0
/*!
 *  @brief      SCCB应答信号
 *  @since      v5.0
 */
static void SCCB_Ack(void)
{
    SCL_L();
    SCCB_DELAY();
    SDA_L();
    SCCB_DELAY();
    SCL_H();
    SCCB_DELAY();
    SCL_L();
    SCCB_DELAY();
}
Exemplo n.º 7
0
/*!
 *  @brief      SCCB停止信号
 *  @since      v5.0
 */
static void SCCB_Stop(void)
{
    SCL_L();
    //SCCB_DELAY();
    SDA_L();
    SCCB_DELAY();
    SCL_H();
    SCCB_DELAY();
    SDA_H();
    SCCB_DELAY();
}
Exemplo n.º 8
0
/*
 * LPLD_SCCB_NoAck
 * SCCB无应答信号,内部调用
 */
static void LPLD_SCCB_NoAck(void)
{	
  SCCB_SCL=0;
  SCCB_DELAY();
  SCCB_SDA_O=1;
  SCCB_DELAY();
  SCCB_SCL=1;
  SCCB_DELAY();
  SCCB_SCL=0;
  SCCB_DELAY();
}
Exemplo n.º 9
0
/*!
 *  @brief      SCCB 等待应答
 *  @return     应答结果(0表示无应答,1表示有应答)
 *  @since      v5.0
 */
static int SCCB_WaitAck(void)
{
    SCL_L();
    //SDA_H();
    SDA_DDR_IN();

    SCCB_DELAY();
    SCL_H();

    SCCB_DELAY();

    if(SDA_IN())           //应答为高电平,异常,通信失败
    {
        SDA_DDR_OUT();
        SCL_L();
        return 0;
    }
    SDA_DDR_OUT();
    SCL_L();
    return 1;
}
Exemplo n.º 10
0
/*
 * LPLD_SCCB_SendByte
 * SCCB发送数据,内部调用
 */
static void LPLD_SCCB_SendByte(uint8 data) 
{
  uint8 i=8;
  while(i--)
  {
    SCCB_SCL=0;
    SCCB_DELAY();
    if(data&0x80)
    {
      SCCB_SDA_O=1; 
    }
    else 
    {
      SCCB_SDA_O=0;   
    }
    data<<=1;
    SCCB_DELAY();
    SCCB_SCL=1;
    SCCB_DELAY();
  }
  SCCB_SCL=0;
}
Exemplo n.º 11
0
/*
 * LPLD_SCCB_WaitAck
 * SCCB等待应答信号,内部调用
 */
static uint8 LPLD_SCCB_WaitAck(void) 	
{
  SCCB_SCL=0;
  SCCB_DELAY();
  SCCB_SDA_O=1;	
  SCCB_DELAY();
  
  SCCB_SCL=1;
  
  SCCB_SDA_IN();
  SCCB_DELAY();
  
  if(SCCB_SDA_I)
  {
    SCCB_SDA_OUT();
    SCCB_SCL=0;
    return 0;
  }
  SCCB_SDA_OUT();
  SCCB_SCL=0;
  return 1;
}
Exemplo n.º 12
0
 /*******************************************************************
 * 函数名:SCCB_SendByte
 * 描述  :数据从高位到低位
 * 输入  :SendByte: 发送的数据
 * 输出  :无
 * 注意  :内部调用        
 *********************************************************************/
static void SCCB_SendByte(uint8 SendByte) 
{
    uint8 i=8;
    while(i--)
    {
        SCL_L();
        SCCB_DELAY();
      	if(SendByte&0x80)
		{
			SDA_H(); 
		}
      	else 
		{
			SDA_L();   
		}
        SendByte<<=1;
        SCCB_DELAY();
		SCL_H();
        SCCB_DELAY();
    }
    SCL_L();
}
Exemplo n.º 13
0
/********************************************************************
 * 函数名:SCCB_WaitAck
 * 描述  :SCCB 等待应答
 * 输入  :无
 * 输出  :返回为:=1有ACK,=0无ACK
 * 注意  :内部调用        
 ********************************************************************/
static int SCCB_WaitAck(void) 	
{
	SCL_L();
	SCCB_DELAY();
	SDA_H();	
	SCCB_DELAY();
	
	SCL_H();
	
	SDA_DDR_IN();
	SCCB_DELAY();

	if(SDA_IN())
	{
		SDA_DDR_OUT();
      	SCL_L();
      	return 0;
	}
	SDA_DDR_OUT();
	SCL_L();
	return 1;
}
Exemplo n.º 14
0
/*!
 *  @brief      SCCB 发送的数据
 *  @param      SendByte    需要发送的数据
 *  @since      v5.0
 */
static void SCCB_SendByte(uint8 SendByte)
{
    uint8 i = 8;
    while(i--)
    {

        if(SendByte & 0x80)     //SDA 输出数据
        {
            SDA_H();
        }
        else
        {
            SDA_L();
        }
        SendByte <<= 1;
        SCCB_DELAY();
        SCL_H();                //SCL 拉高,采集信号
        SCCB_DELAY();
        SCL_L();                //SCL 时钟线拉低
        //SCCB_DELAY();
    }
    //SCL_L();
}