C51求援

[复制链接]
3385|7
 楼主| tyw 发表于 2007-2-1 14:49 | 显示全部楼层 |阅读模式
这是北京金木雨给的一段13.5M读写模块的通讯程序(89C52CPU),有二句看不懂<br />望各位指点一下(<font color=#FF0080>红字部分</font>),谢谢<br /><br /><br />#include&nbsp;&ltreg52.h&gt&nbsp;&nbsp;&nbsp;//&nbsp;包含52寄存器函数reg52.h<br />#include&nbsp;&ltintrins.h&gt&nbsp;//&nbsp;包含内部函数intrins.h<br />sbit&nbsp;SDA&nbsp;=&nbsp;P1^0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义SDA为P1.0口<br />sbit&nbsp;SCL&nbsp;=&nbsp;P1^1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义SCL为P1.1口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;对于11.0592MHz用这一行<br />#define&nbsp;NOPS&nbsp;_nop_();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义NOPS=nop,等待1个时钟周期,在intrins.h中<br /><br /><br />/*****************************************************************************<br />*&nbsp;宣告发送一个字节函数:&nbsp;send&nbsp;a&nbsp;byte&nbsp;over&nbsp;IIC&nbsp;bus<br />*&nbsp;发送一个字节<br />*****************************************************************************/<br />void&nbsp;I2CSendByte(unsigned&nbsp;char&nbsp;cSendByte)&nbsp;&nbsp;//&nbsp;cSendByte为待发送字节<br />{<br />unsigned&nbsp;char&nbsp;data&nbsp;i&nbsp;=&nbsp;8;&nbsp;//&nbsp;定义i为直接寻址内部RAM,并赋值i=8<br />while&nbsp;(i--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;计数器&nbsp;i减1,≠&quot;0&quot;时,做下面循环<br />{<br />&nbsp;&nbsp;SCL&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;时钟脚 ̄_<br />&nbsp;&nbsp;<font color=#FF0040>SDA&nbsp;=&nbsp;(bit)(cSendByte&nbsp;&&nbsp;0x80);//&nbsp;屏蔽出待发送字节的D7位<br />&nbsp;&nbsp;cSendByte&nbsp;+=&nbsp;cSendByte;&nbsp;//&nbsp;<br /></font>&nbsp;&nbsp;NOPS<br />&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />}<br />SCL&nbsp;=&nbsp;0;<br />}
szzhengjin 发表于 2007-2-1 15:37 | 显示全部楼层

-这就是I2C高位发起的写法

SDA&nbsp;=&nbsp;(bit)(cSendByte&nbsp;&&nbsp;0x80)<br />就是当cSendByte最高位为1时SDA=1,否则SDA=0<br />
 楼主| tyw 发表于 2007-2-1 15:46 | 显示全部楼层

楼上能否对语句作个详细解答,谢谢

(bit)是什么意思,()()这是什么运算?<br />下面一句是自身相加再送到自身,不知在做什么动作<br />按汇编写法应该是环移一位的动作
sprawn 发表于 2007-2-1 15:50 | 显示全部楼层

我的看法

第一句是取出字节的第7位<br />第二句不明白<br />我觉得应该是cSendByte&nbsp;〈〈=&nbsp;cSendByte;&nbsp;
xwj 发表于 2007-2-1 16:03 | 显示全部楼层

重复发贴,拉出去打PP

!!!
szzhengjin 发表于 2007-2-1 16:49 | 显示全部楼层

早就应该打了,在另一处我看了别人回答得清楚得很

  
 楼主| tyw 发表于 2007-2-1 18:49 | 显示全部楼层

投降了投降了,投了降不打pp

下午有点急,翻书竟找不到SDA&nbsp;=&nbsp;(bit)(cSendByte&nbsp;&&nbsp;0x80)句型的语法说明<br />前一个括号里是强制转换的意思,<br />后一个括号里是屏蔽出最高位<br />但两个括号相连是什么关系,书上没找着,哈哈<br />正在做感应卡门锁系统,买了金木雨的模块正在啃C51的通讯程序,投了两枚炸*换来一吨pp,值!<br /><img src="https://bbs.21ic.com/upfiles/img/20072/200721184816423.gif"><img src="https://bbs.21ic.com/upfiles/img/20072/200721184816423.gif"><img src="https://bbs.21ic.com/upfiles/img/20072/200721184816423.gif"><img src="https://bbs.21ic.com/upfiles/img/20072/200721184816423.gif">
awey 发表于 2007-2-1 19:39 | 显示全部楼层

哈哈。。。。

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

本版积分规则

tyw

1295

主题

30538

帖子

1478

粉丝
快速回复 在线客服 返回列表 返回顶部