完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1:分配所需的传送BD和接收BD中的BD是什么意思?
2、/*****************************************************************************/ /*函 数 名:I2C_Word_Write */ /*功能描述:I2C按WORD写操作 */ /*函数说明: */ /*调用函数:I2C_Start()、I2C_Senddata()、I2C_Ack()、I2C_Stop() */ /*全局变量:无 */ /*输 入:uchar device_address, uchar reg_add, uint writeword */ /*返 回:无 */ /*设 计 者: 时间: */ /*修 改 者: 时间: */ /*版 本: */ /*****************************************************************************/ void I2C_Word_Write(UINT8 device_address, UINT8 reg_add, UINT16 writeword) { UINT8 writeword_high,writeword_low; writeword_low = writeword; writeword_high = writeword>>8; I2C_Start() I2C_Senddata(device_address & 0xFE);//为什么要&0xfe? I2C_Ack(); if (Ack_Flag == 0) { I2C_Senddata(reg_add); I2C_Ack(); if (Ack_Flag == 0) { I2C_Senddata(writeword_high); I2C_Ack(); if (Ack_Flag == 0) { I2C_Senddata(writeword_low); I2C_Ack(); } else SCL = 0; } else SCL = 0; } else SCL = 0; I2C_Stop(); } /*****************************************************************************/ /*函 数 名:I2C_Word_Read */ /*功能描述:I2C按Word读操作 */ /*函数说明: */ /*调用函数:I2C_Start()、I2C_Senddata()、I2C_Ack()、 */ /* I2C_Receivedata()、I2C_Stop() */ /*全局变量:无 */ /*输 入:uchar device_address,uchar reg_add */ /*返 回:正确:uchar readdata 错误:0x0000 */ /*设 计 者: 时间: */ /*修 改 者: 时间: */ /*版 本: */ /*****************************************************************************/ UINT16 I2C_Word_Read(UINT8 device_address, UINT8 reg_add) { UINT8 readdata_low; UINT16 readdata,readdata_high,temp=0; I2C_Start(); I2C_Senddata(device_address & 0xFE);//为什么要&0xfe? I2C_Ack(); if (Ack_Flag == 0) { I2C_Senddata(reg_add); I2C_Ack(); if (Ack_Flag == 0) { I2C_Start(); I2C_Senddata(device_address | 0x01);//这句话是什么意思 I2C_Ack(); if (Ack_Flag == 0) { // SDA = 1;//SDA 设为输入,读引脚 readdata_high = I2C_Receivedata(); SDA = 0; I2C_Delay();I2C_Delay(); SCL = 1; I2C_Delay();I2C_Delay(); SCL = 0; I2C_Delay();I2C_Delay(); SDA = 1; if (Ack_Flag == 0) { readdata_low = I2C_Receivedata(); I2C_Ack(); I2C_Stop(); temp = readdata_high << 8; readdata = temp | readdata_low; return(readdata); } else { I2C_Stop(); return(0x0000); } } else { I2C_Stop(); return(0x0000); } } else { I2C_Stop(); return(0x0000); } } else { I2C_Stop(); return(0x0000); } } void I2C_Senddata(UINT8 senddata) { UINT8 i; for (i=0;i<8;i++) { I2C_Delay(); if ((senddata & 0x80) != 0x80) //这句话什么意思? SDA = 0; else SDA = 1; senddata = senddata << 1; I2C_Delay(); SCL = 1; I2C_Delay(); SCL = 0; } I2C_Delay(); } |
|
相关推荐
2个回答
|
|
其实与或非这个我知道,涉及到IIC的操作,正确答案是最低位表示读写标志,读为1,写为0
|
|
|
|
看你问的都是按位&。|。你该先熟悉一下C。。&根据它的特性,一般可以用来位清零。|一般用来位置1
|
|
|
|
只有小组成员才能发言,加入小组>>
3208 浏览 9 评论
2894 浏览 16 评论
3401 浏览 1 评论
8840 浏览 16 评论
3994 浏览 18 评论
9625浏览 3评论
998浏览 3评论
518浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
521浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2244浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 01:35 , Processed in 0.936218 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号