4897|10

23

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

谁能看懂这个程序啊 ? [复制链接]

uchar readbyte()                                     /*读一个字节*/
{
uchar i,j,k;
SCL=0;
delaym(1);
SDA=1;
for(i=0;i<8;i++)
{
  SCL=1;
  delaym(1);
  if(SDA==1)
    j=1;
  else
    j=0;
  k=(k<<1)|j;
  SCL=0;
  delaym(1);
}

这是个AT24C64的读程序,但是看不懂什么意思 ,它的返回值是几位?K是怎么得到值的?
此帖出自单片机论坛

最新回复

这个程序看的不是很懂 但想琢磨琢磨  详情 回复 发表于 2009-7-23 19:53
点赞 关注
 

回复
举报

2498

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 crazy258 的帖子

k=(k<<1)|j;
首先说明,我不知道是不是系统自动默认的有数值,k在移位之后,就是一个表达式了,也就是逻辑指令,是1/0后面是或运算! 每次读一位吧!不是说独一个字节吗,循环了八次,我的看法!
此帖出自单片机论坛
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 

回复

1781

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
如果这样的程序都看不懂的话还是先仔细看一看C语言吧,而且数字逻辑也不算过关,基础很重要,否则是没办法提高的。楼上说得有道理,我就写一个完整的注释吧,仅供参考。
uchar readbyte()                                     /*读一个字节*/
{
uchar i,j,k;
SCL=0;                                                  //时钟线置0
delaym(1);                                            //等待1ms
SDA=1;                                                  //数据线置1
for(i=0;i<8;i++)                                     //通过循环八次读出一字节当中的每一位
{
  SCL=1;                                                 //时钟线置1
  delaym(1);                                            //等待1ms
  if(SDA==1)                                            //如果数据线是1
    j=1;                                                       //J置1
  else                                                        //否则
    j=0;                                                       //J置0
  k=(k<<1)|j;                                             //从高位到低位分别放进K里,首先把K内的数据左移
                                 //一位,再和J进行按位或运算,从而把J放进K的最
                                 //低位。
  SCL=0;                                                   //时钟线置0
  delaym(1);                                             //等待一ms
}                                                                 //循环结束,数据放在K中
}                                                                 //子程序结束
很明显你复制的时候少了一个大扩号。
只要一步一步分析,是很容易得到结果的,最重要的就是要有耐心,想做电子没耐心是不行的,经常一个很简单的问题却要调很长时间,所以有问题的时候要先自己考虑几次,不行查一查资料,总问别人是不行的,别人的东西要变成自己的东西才是真正的提高。
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 
感觉这段I2C程序写的很乱,没有什么章法,编程风格不太好!建议把模拟I2C口的程序做成库函数,在这里面调用就行了,这个程序程序里面也看不出应答信号和非应答信号!还是好好学习手册,在试着编写吧!最起码应该高清时序
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

23

帖子

0

TA的资源

纯净的硅(中级)

5
 

回复 沙发 gaoxiao 的帖子

我就是不知道这个K他是怎么定义的  是存的什么数据

其他的都还好。
此帖出自单片机论坛
 
 
 

回复

23

帖子

0

TA的资源

纯净的硅(中级)

6
 

回复 板凳 wangjiafu1985 的帖子

k=(k<<1)|j;                                             //从高位到低位分别放进K里,首先把K内的数据左移
                                 //一位,再和J进行按位或运算,从而把J放进K的最
                                 //低位。


我就想要这句。谢谢你~~~

我编程底子很弱,所以。。。
此帖出自单片机论坛
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

7
 

要透过现象看本质

一个字节包含8个位,就是一个位一个位地读出来,通过移位操作来实现的.8个位,所以要移8次,每次把数据写在最低位,所以最1位数据要移7次,第2位数据6次,最后一位数据就不需要了.
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

53

帖子

0

TA的资源

纯净的硅(中级)

8
 
/********************************************************************
    MCS-51单片机模拟I2C软件包(V1.1)
    文件名:VI2C_C51.C
    相关文件:VI2C_C51.H,VI2C_C51.LIB
    功能说明:本模拟I2C软件包包含了I2C操作的底层函数,如发送数据及接收
数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的与用户程
序连接并扩展.....  
    注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的
修改....(本软件包是1us机器周期,即晶振频率要小于12MHZ)
    总线时序符合I2C标准模式,100Kbit/S。
                                          更新时间:2002.06.05
********************************************************************/

VI2C_C51.rar

2.29 KB, 下载次数: 8

此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

53

帖子

0

TA的资源

纯净的硅(中级)

9
 
K是临时变量要返回吧
return(k);
此帖出自单片机论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

10
 
原帖由 soulcoffee 于 2009-6-15 12:38 发表
K是临时变量要返回吧
return(k);




我也觉得是 啊,如果没有 return(k);这个语句是不能返回k值的吧?
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

11
 
这个程序看的不是很懂
但想琢磨琢磨
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表