永发信息网

80C51单片机

答案:2  悬赏:0  手机版
解决时间 2021-04-25 13:22
  • 提问者网友:爱唱彩虹
  • 2021-04-24 13:39

uchar read_byte()
{
 uchar i,j,k;
 scl=0;
 delay();
 sda=1;
 delay();
 for(i=0;i<8;i++)
 {
  scl=1;
  delay();
  j=sda;
  k=(k<<1)|j;
  scl=0;
  delay();
 }
 return k;
}

 

帮忙解释下。。那个return k。。有什么用?k=(k<<1)|j;还有这个怎么理解?

最佳答案
  • 五星知识达人网友:野慌
  • 2021-04-24 13:52

return k 是函数返回值,这是个子函数,处理完后返回给调用函数一个处理后的值。


k=(k<<1)|j;


这个是指K左移一位,在或上J,因为J=SDA,看你的写法,据我猜测DA是一个芯片的端口,这是串行输入的方式,你要读取芯片的输出值


假设某个时候K=0000 0001,假设j这个时候为1,那执行k=(k<<1)|j;后,K左移一位再或上J就为0000 0011了,一共执行8次,刚好从sda也就是j那里读出了一个字节的数据。


欢迎追问

全部回答
  • 1楼网友:孤老序
  • 2021-04-24 15:24
1.函数返回值,是一个左值2.先对1按位左移就是缩小两倍再和j或运算
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯