⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sccb.c

📁 美国豪威OmniVision生产的COMS SENSOR 读写程序
💻 C
字号:
// OmniVision Serial Camera Control Bus (SCCB) Functional File.

#include <Reg52.h>
#include <Intrins.h>

sbit SIO_C=P0^0;
sbit SIO_D=P0^1;
//sbit SIO_D=P1^2;

void nops(void)
{
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
}

void hnops(void)
{
 _nop_();
 _nop_();
}


unsigned char Read_CMOS(unsigned char DeviceAddress,unsigned char RegisterAddress)
{
 unsigned char bdata Buffer_Data;

 bit Buffer_Data0=Buffer_Data^0;
 bit Buffer_Data1=Buffer_Data^1;
 bit Buffer_Data2=Buffer_Data^2;
 bit Buffer_Data3=Buffer_Data^3;
 bit Buffer_Data4=Buffer_Data^4;
 bit Buffer_Data5=Buffer_Data^5;
 bit Buffer_Data6=Buffer_Data^6;
 bit Buffer_Data7=Buffer_Data^7;

 Buffer_Data=DeviceAddress;
 F0=0; 
 //SIO_E=0;
 //nops();

 SIO_C=1;
 SIO_D=1;
 nops();
 SIO_D=0;
 nops();
 SIO_C=0;  
 nops();         //Start

 SIO_D=Buffer_Data7;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit7
 
 SIO_D=Buffer_Data6;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit6

 SIO_D=Buffer_Data5;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit5

 SIO_D=Buffer_Data4;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit4

 SIO_D=Buffer_Data3;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit3

 SIO_D=Buffer_Data2;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit2

 SIO_D=Buffer_Data1;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit1

 SIO_D=Buffer_Data0;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack   
   
 Buffer_Data=RegisterAddress; 

 SIO_D=Buffer_Data7;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit7
 
 SIO_D=Buffer_Data6;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit6

 SIO_D=Buffer_Data5;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit5

 SIO_D=Buffer_Data4;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit4

 SIO_D=Buffer_Data3;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit3

 SIO_D=Buffer_Data2;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit2

 SIO_D=Buffer_Data1;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit1

 SIO_D=Buffer_Data0;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack 
 
//read data 
 Buffer_Data=0xff; 
 SIO_C=1;
 hnops();
 Buffer_Data7=SIO_D;
 hnops();
 SIO_C=0;
 nops();        //bit7

 SIO_C=1;
 hnops();
 Buffer_Data6=SIO_D;
 hnops();
 SIO_C=0;
 nops();         //bit6

 SIO_C=1;
 hnops();
 Buffer_Data5=SIO_D;
 hnops();
 SIO_C=0;
 nops();         //bit5

 SIO_C=1;
 hnops();
 Buffer_Data4=SIO_D;
 hnops();
 SIO_C=0;
 nops();          //bit4

 SIO_C=1;
 hnops();
 Buffer_Data3=SIO_D;
 hnops();
 SIO_C=0;
 nops();          //bit3

 SIO_C=1;
 hnops();
 Buffer_Data2=SIO_D;
 hnops();
 SIO_C=0;
 nops();          //bit2

 SIO_C=1;
 hnops();
 Buffer_Data1=SIO_D;
 hnops();
 SIO_C=0;
 nops();          //bit1

 SIO_C=1;
 hnops();
 Buffer_Data0=SIO_D;
 hnops();
 SIO_C=0;
 nops();          //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack  

 
 SIO_C=1;
 SIO_D=0;
 nops();
 SIO_D=1;
 nops();
 SIO_C=1;
 SIO_D=1;       //stop
 
 return Buffer_Data;
}

bit Write_COMS(unsigned char DeviceAddress,unsigned char RegisterAddress,char Write_Data)
{
 ACC=DeviceAddress;
 F0=0; 
 //SIO_E=0;
 //nops();

 SIO_C=1;
 SIO_D=1;
 nops();
 SIO_D=0;
 nops();
 SIO_C=0;  
 nops();         //Start

 SIO_D=ACC^7;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit7
 
 SIO_D=ACC^6;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit6

 SIO_D=ACC^5;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit5

 SIO_D=ACC^4;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit4

 SIO_D=ACC^3;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit3

 SIO_D=ACC^2;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit2

 SIO_D=ACC^1;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit1

 SIO_D=ACC^0;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack   
   
 ACC=RegisterAddress; 

 SIO_D=ACC^7;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit7
 
 SIO_D=ACC^6;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit6

 SIO_D=ACC^5;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit5

 SIO_D=ACC^4;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit4

 SIO_D=ACC^3;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit3

 SIO_D=ACC^2;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit2

 SIO_D=ACC^1;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit1

 SIO_D=ACC^0;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack 

ACC=Write_Data; 

 SIO_D=ACC^7;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit7
 
 SIO_D=ACC^6;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit6

 SIO_D=ACC^5;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit5

 SIO_D=ACC^4;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit4

 SIO_D=ACC^3;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit3

 SIO_D=ACC^2;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();         //bit2

 SIO_D=ACC^1;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit1

 SIO_D=ACC^0;
 SIO_C=1;
 nops();
 SIO_C=0;
 nops();        //bit0

 SIO_C=1;
 if(SIO_D)
    { 
      if(SIO_D)
      F0=1;
    }
 else
    nops();
 SIO_C=0;     
 nops();        //check Ack 
 
 SIO_C=1;
 SIO_D=0;
 nops();
 SIO_D=1;
 nops();
 SIO_C=1;
 SIO_D=1;       //stop

 return F0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -