您的位置 首页 IOT

I2C总线C言语源程序

*VIICCH*pragmadbcdsmallincludeintrinsh>includereg52h>defineNOPnop();nop();nop();nop()defineSDA

/*VIICC.H*/

#pragmadbcdsmall
#include
#include
#defineNOPnop();nop();nop();nop()
#defineSDAP1^7
#defineSCLP1^6

voidsta();
voidcack();
voidstop();
voidmnack();
voidmack();
voidwrbyt(ucharshu);
voidwrnbyta(ucharslaw,uchargg[],ucharn);
voidwrnbyt(ucharslaw,ucharff[],ucharnumber);
ucharrdbyt();
voidrdnbyt(ucharslar,ucharqq[],ucharnumber);
源程序由9个函数组成,程序清单如下:
voidsta()/*发动I2C总线*/
{
SDA=1;
SCL=1;
NOP;
SDA=0;
NOP;
SCL=0;
}

voidstop()/*中止I2C总线
*/
{
SDA=0;
SCL=1;
NOP;
SDA=1;
NOP;
SCL=0;
}

voidmack()/*发送应对位*/
{
SDA=0;
SCL=1;
NOP;
SCL=0;
SDA=1;
}

voidmnack()/*发送非应对位*/
{
SDA=1;
SCL=1;
NOP;
SCL=0;
SDA=0;
}

voidcack()/*应对位查看*/
{
SDA=1;
SCL=1;
F0=0;
if(SDA==1)
F0=1;
SCL=0;
nop();
}
/*向虚拟I2C总线上发送1个数据字节*/
voidwrbyt(ucharshu)
{
uchari;
for(i=0;i<8;i++){
if((shu&0x80)>0){
SDA=1;
SCL=1;
NOP;
SCL=0;
SDA=0;
}
else{
SDA=0;
SCL=1;
NOP;
SCL=0;
}
shu=shu<<1;
}
}
/*从I2C总线上读取1个数据字节*/
ucharrdbyt()
{
ucharnn=0xff,mm=0x80,uu=0x7f;
ucharj;
for(j=0;j<8;j++){
SDA=1;
SCL=1;
if(SDA==0)
nn=(nn&uu);
else
nn=(nn|mm);。
nn=crol(nn,1);
SCL=0;
}
return(nn);
}

voidwrnbyta(ucharslaw,uchargg[],ucharn)
{
do{
sta();
wrbyt(slaw);
cack();
}while(F0==1);
wrbyt(gg[n]);
cack();

}
/*向虚拟I2C总线上发送n个字节的数据*/
voidwrnbyt(ucharslaw,ucharff[],ucharnumber)
{
ucharidatak;
do{
sta();
wrbyt(slaw);
?cack();
}while(F0==1);
for(k=0;kwrbyt(ff[k]);
cack();
while(F0==1)
wrnbyta(slaw,ff,k);
}
stop();
}
/*从虚拟I2C总线上读取n个字节的数据*/
voidrdnbyt(ucharslar,ucharqq[],ucharnumber)
{
ucharidatadata0,l;
do{
sta();
wrbyt(slar);
cack();
}while(F0==1);?
for(l=0;ldata0=rdbyt();
qq[l]=data0;
mack();
}
data0=rdbyt();
qq[l]=data0;
mnack();
stop();
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/261612.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部