/*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,读得的数据 }