打印

C51求援

[复制链接]
2159|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tyw|  楼主 | 2007-2-1 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是北京金木雨给的一段13.5M读写模块的通讯程序(89C52CPU),有二句看不懂
望各位指点一下(红字部分),谢谢


#include <reg52.h>   // 包含52寄存器函数reg52.h
#include <intrins.h> // 包含内部函数intrins.h
sbit SDA = P1^0;     // 定义SDA为P1.0口
sbit SCL = P1^1;     // 定义SCL为P1.1口
                           // 对于11.0592MHz用这一行
#define NOPS _nop_();      // 定义NOPS=nop,等待1个时钟周期,在intrins.h中


/*****************************************************************************
* 宣告发送一个字节函数: send a byte over IIC bus
* 发送一个字节
*****************************************************************************/
void I2CSendByte(unsigned char cSendByte)  // cSendByte为待发送字节
{
unsigned char data i = 8; // 定义i为直接寻址内部RAM,并赋值i=8
while (i--)         // 计数器 i减1,≠"0"时,做下面循环
{
  SCL = 0;          // 时钟脚 ̄_
  SDA = (bit)(cSendByte & 0x80);// 屏蔽出待发送字节的D7位
  cSendByte += cSendByte; // 
  NOPS
  SCL = 1;
}
SCL = 0;
}

相关帖子

沙发
szzhengjin| | 2007-2-1 15:37 | 只看该作者

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

SDA = (bit)(cSendByte & 0x80)
就是当cSendByte最高位为1时SDA=1,否则SDA=0

使用特权

评论回复
板凳
tyw|  楼主 | 2007-2-1 15:46 | 只看该作者

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

(bit)是什么意思,()()这是什么运算?
下面一句是自身相加再送到自身,不知在做什么动作
按汇编写法应该是环移一位的动作

使用特权

评论回复
地板
sprawn| | 2007-2-1 15:50 | 只看该作者

我的看法

第一句是取出字节的第7位
第二句不明白
我觉得应该是cSendByte 〈〈= cSendByte; 

使用特权

评论回复
5
xwj| | 2007-2-1 16:03 | 只看该作者

重复发贴,拉出去打PP

!!!

使用特权

评论回复
6
szzhengjin| | 2007-2-1 16:49 | 只看该作者

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

使用特权

评论回复
7
tyw|  楼主 | 2007-2-1 18:49 | 只看该作者

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

下午有点急,翻书竟找不到SDA = (bit)(cSendByte & 0x80)句型的语法说明
前一个括号里是强制转换的意思,
后一个括号里是屏蔽出最高位
但两个括号相连是什么关系,书上没找着,哈哈
正在做感应卡门锁系统,买了金木雨的模块正在啃C51的通讯程序,投了两枚炸*换来一吨pp,值!

使用特权

评论回复
8
awey| | 2007-2-1 19:39 | 只看该作者

哈哈。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

tyw

1294

主题

30097

帖子

1467

粉丝