📄 sccb.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 + -