您的位置:首页 > 其它

常用位操作,读8位 I2C 1302 18B20 .

2013-08-16 19:08 141 查看
/*1302*/
unsigned char DS1302OutputByte(void) 	//实时时钟读取一字节(内部函数)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;         			//相当于汇编中的 RRC
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}

/*读18b20*/
/*-----------------------------读一个字节------------------------------*/
readonechar(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=1;
delay_us(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_us(4);
}
return(dat);
}

/*读I2C*/
uchar read_byte()			 //读一个字节的函数
{
uchar i,j,k;
scl=0;
delaywus();
sda=1;
delaywus();
for(i=0;i<8;i++)		 //8个循环,读一个字节
{
scl=1;
delaywus();
j=sda;
k=(k<<1)|j;			 //按位相或,把数据移入k
scl=0;
delaywus();
}
return k;				//返回值是K,读得的数据
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: