📄 24c04.c
字号:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <reg89C58.h>
#include <intrins.h>
#include "net.h"
#include "24c04.h"
sbit SDA=P3^5;
sbit SCL=P3^4;
void delay1(UINT x)
{
UCHAR j;
while(x--){
for(j=0;j<150;j++)
{;}
}
}
void wrbyt0()
{SDA=0;SCL=1;_nop_();_nop_();SCL=0;}
void wrbyt1()
{SDA=1;SCL=1;_nop_();_nop_();SCL=0;SDA=0;}
UCHAR rdbyt()
{
UCHAR nn=0xff,mm=0x80,uu=0x7f;
UCHAR j;
UINT q=0;
for(j=0;j<8;j++)
{SDA=1;SCL=1;
if(SDA==0)
{nn=(nn&uu);
nn=_crol_(nn,1);
SCL=0;
}
else
{nn=(nn|mm);
nn=_crol_(nn,1);
SCL=0;}
}
return(nn);
}
void sta() ////1-STAR IIC BUS
{ SDA=1;
SCL=1;
while(SCL==0){;}
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=0;
}
void stop() /////2-STOP IIC BUS
{
SDA=0;
SCL=1;
while(SCL==0){;}
_nop_();
SDA=1;
_nop_();
_nop_();
SCL=0;
}
void mack()
{
SDA=0;
SCL=1;
_nop_();
_nop_();
SCL=0;
SDA=1;
}
void mnack()
{SDA=1; SCL=1;_nop_(); _nop_();SCL=0;SDA=0;}
void cack()
{ SDA=1;SCL=1;F0=0;
if(SDA==0)
{SCL=0;_nop_();_nop_();}
else
{F0=1;SCL=0;_nop_();_nop_(); }
}
void wrbyt(UCHAR shu)
{UCHAR i;
if((shu&0x80)>0)
{SDA=1;}
else
{SDA=0;}
SCL=1;
while(SCL==0){;}
_nop_();SCL=0;SDA=0;
shu=_crol_(shu,1);
for(i=1;i<8;i++)
{ if((shu&0x80)>0)
{wrbyt1();}
else
{wrbyt0();}
shu=_crol_(shu,1);
}
}
void wrnbyta(UCHAR slaw,UCHAR gg[],UCHAR n)
{
do{
sta();
wrbyt(slaw);
cack();
}while(F0==1);
wrbyt(gg[n]);
cack();
}
void wrnbyt(UCHAR slaw,UCHAR number,UCHAR ff[])
{
UCHAR k;
do{
sta();
wrbyt(slaw);
cack();
}while(F0==1);
for(k=0;k<number;k++)
{
wrbyt(ff[k]);
cack();
while(F0==1)
{
wrnbyta(slaw,ff,k);
}
}
stop();
delay1(600);
}
void rdnbyt(UCHAR number,UCHAR slar,UCHAR qq[])
{
UCHAR data0,l;
do{
sta();
wrbyt(slar);
cack();
}while(F0==1);
for(l=0;l<number;l++)
{
data0=rdbyt();
qq[l]=data0;
if(l<(number-1))
{mack();}
}
mnack();
stop();
}
void read_temp(UCHAR qrdaddr,UCHAR readlen,UCHAR QHYTEMP[]) //起始地址读出的长度和存储的字节
{ //超如地址
//讯出字节的长充
//存储读出的数据
UCHAR QTEMP[2];
UCHAR rdaddr[2];
QTEMP[0]=0Xa0;
QTEMP[1]=0Xa1;
rdaddr[0]=qrdaddr;
wrnbyt(QTEMP[0],1,rdaddr);
rdnbyt(readlen,0xa1,QHYTEMP);
}
void write_temp(UCHAR WRADDR,UCHAR SLAW,UCHAR WRTEMP[])
{ UCHAR i;
UCHAR temp[18];
UCHAR HTEMP[2];
HTEMP[0]=0Xa0;
temp[0]=WRADDR;
for (i=1;i<=SLAW;i++)
{
temp[i]=WRTEMP[i-1];
}
wrnbyt(HTEMP[0],SLAW+1,temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -