📄 contr.c
字号:
#include"reg52.h"
#include "intrins.h"
#define TRUE 1
#define FLASE 0
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define _Nop() _nop_()
sbit SDA2=P1^3;
sbit SCL1=P1^0;
bit ack1;
////////////////////////////////
void JIYI_StartI2c( )
{
SDA2 = 1;
_Nop();
_Nop();
_Nop();
SCL1 = 1;
_Nop(); // after stop must wait > 4.7 can to new start
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA2 = 0;
_Nop(); // the start signal keep up to > 4.0
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL1 = 0;
_Nop(); // T_low > 4.7
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
}
void JIYI_StopI2c()
{
SDA2 = 0;
_Nop();
_Nop();
SCL1 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA2 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
}
void JIYI_Send_byte( uchar c )
{
uchar BitCnt;
for( BitCnt = 0; BitCnt < 8; BitCnt ++ )
{
if((c << BitCnt) & 0x80) SDA2 = 1;
else SDA2 = 0;
_Nop();
_Nop();
_Nop();
SCL1 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL1 = 0;
_Nop();
_Nop();
_Nop();
}
_Nop();
_Nop();
_Nop();
SDA2 = 1;
_Nop();
_Nop();
_Nop();
SCL1 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
if (SDA2 == 1) ack1 =0;
else ack1 = 1;
SCL1 = 0;
_Nop();
_Nop();
_Nop();
_Nop();
}
uchar JIYI_Rcv_byte()
{
uchar retc;
uchar BitCnt;
retc = 0;
SDA2 = 1;
for( BitCnt = 0 ; BitCnt < 8; BitCnt ++)
{
_Nop();
_Nop();
_Nop();
SCL1 = 0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL1 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
retc = retc << 1;
if (SDA2 == 1) retc= retc +1;
_Nop();
_Nop();
_Nop();
_Nop();
}
SCL1 = 0;
_Nop();
_Nop();
_Nop();
_Nop();
return(retc);
}
void JIYI_AckI2c( bit a )
{
if ( a == 0) SDA2 = 0;
else SDA2 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL1 = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL1 = 0;
_Nop();
_Nop();
_Nop();
}
///////////////////////
bit JIYI_RS16K ( uchar sla, uchar suba, uchar *s, uchar no )
{
uchar i;
JIYI_StartI2c ();
JIYI_Send_byte (sla);
if( ack1 == 0 ) return (0);
JIYI_Send_byte (suba);
if (ack1 == 0 ) return (0);
JIYI_StartI2c();
JIYI_Send_byte(sla + 1);
if ( ack1 == 0) return ( 0 );
for(i =0;i< no -1; i++)
{
*s = JIYI_Rcv_byte();
JIYI_AckI2c(0);
s++;
}
*s = JIYI_Rcv_byte();
JIYI_AckI2c(1);
JIYI_StopI2c();
return(1);
}
/////////////////////////////////////////////
bit JIYI_SendStr16K( uchar sla, uchar suba, uchar *s, uchar no )
{
uchar i;
JIYI_StartI2c();
JIYI_Send_byte(sla);
if(ack1 == 0)return (0);
JIYI_Send_byte(suba);
if(ack1 == 0)return (0);
for( i = 0; i < no ;i ++)
{
JIYI_Send_byte(*s);
if(ack1 == 0)return (0);
s++;
}
JIYI_StopI2c();
return (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -