I2Ci2s总线读取数据如何直接搭载数据写数据读数据

怎么从I2C总线读数据_百度知道
怎么从I2C总线读数据
怎么从I2C总线读数据
我有更好的答案
i2c有其协议的,我当时从不会到掌握其协议用了一阵子,就是狂读协议和例程我把当时用非斯卡尔单片机读i2c mems传感器的历程写在下面#include &hidef.h& #include &derivative.h&#define IIC_SDA_CTL PTCDD_PTCDD1#define IIC_SDA_DAT PTCD_PTCD1#define IIC_SCL_CTL PTCDD_PTCDD0#define IIC_SCL_DAT PTCD_PTCD0#define IIC_MST_HI 0#define IIC_MST_LO 1void IIC_Start(void);void IIC_Restart(void);void IIC_Stop(void);byte IIC_SendByte(byte);byte IIC_Read(byte *, byte);byte IIC_Write(byte *, byte);void IIC_Delay(void);void IIC_Delay(void){for (i=0;i&8;i++) {}}//==============================================================// Master generates a START condition on IIC bus//==============================================================void IIC_Start(void){IIC_SDA_CTL = IIC_MST_HI;IIC_SCL_CTL = IIC_MST_HI;IIC_Delay();IIC_SDA_CTL = IIC_MST_LO;IIC_SDA_DAT = 0;IIC_Delay();IIC_SCL_CTL = IIC_MST_LO;IIC_SCL_DAT = 0;IIC_Delay();}//==============================================================// Master generates a RESTART condition on IIC bus//==============================================================void IIC_Restart(void){IIC_SDA_CTL = IIC_MST_HI; //SDA back to high while SCL remain in lowIIC_Delay();IIC_SCL_CTL = IIC_MST_HI; //SCL back to high, bus idle nowIIC_Delay();IIC_SDA_CTL = IIC_MST_LO; //RESTART condition occurIIC_Delay();IIC_SCL_CTL = IIC_MST_LO; //SCL to low for standbyIIC_Delay();}//==============================================================// Master generates a STOP condition on IIC bus//==============================================================void IIC_Stop(void){IIC_SDA_CTL = IIC_MST_LO; //make sure SDA is lowIIC_Delay();IIC_SCL_CTL = IIC_MST_HI; //I2C_SCL_CTL go to high firstIIC_Delay();IIC_SDA_CTL = IIC_MST_HI; //I2C_SDA_CTL have low-high transition while SCL is highIIC_Delay();}//==============================================================// Master send out a byte of data and return with ACK/NACK// return with 0x00 if ACK received// return with 0xff if NACK received//==============================================================byte IIC_SendByte(byte outDat){//send out 8-bit datafor (bit=0;bit&8;bit++) {if (outDat&0x80)IIC_SDA_CTL = IIC_MST_HI;elseIIC_SDA_CTL = IIC_MST_LO;IIC_Delay();IIC_SCL_CTL = IIC_MST_HI;IIC_Delay();IIC_SCL_CTL = IIC_MST_LO;outDat &&= 1;}//check for the ACK/NACKIIC_SDA_CTL = IIC_MST_HI; //master release SDAIIC_Delay();IIC_SCL_CTL = IIC_MST_HI; //master send a clockIIC_Delay();if (IIC_SDA_DAT) bit = 0 //NACKelse bit = 0; //ACKIIC_SCL_CTL = IIC_MST_LO;IIC_Delay();return(bit);}//==============================================================// Master write a string of bytes through IIC us// Return with 0x00 if successful// Return with 0xff if failed//==============================================================byte IIC_Write(byte *buff, byte total){while (total) {if (IIC_SendByte(*buff++)) //get NACK after data byte outreturn(0xff); //aborttotal--;//__RESET_WATCHDOG(); //needed only for EEPROM byte-program}return(0);}//==============================================================// Master read a byte of data and set ACK/NACK// return with data read//==============================================================byte IIC_ReadByte(byte ackFlag){byte bit,IIC_SDA_CTL = IIC_MST_HI; //make sure master release SDA//read 8 bits sof datafor (bit=0;bit&8;bit++) {dat &&= 1;IIC_SCL_CTL = IIC_MST_HI;IIC_Delay();if (IIC_SDA_DAT) //read back datadat |= 0x01;IIC_SCL_CTL = IIC_MST_LO;IIC_Delay();}//echo with ACK/NACKif (ackFlag==0) IIC_SDA_CTL = IIC_MST_LO; //echo back ACKelseIIC_SDA_CTL = IIC_MST_HI; //echo back NACKIIC_Delay();IIC_SCL_CTL = IIC_MST_HI;IIC_Delay();IIC_SCL_CTL = IIC_MST_LO;IIC_Delay();return(dat);}//==============================================================// Master read a string of data bytes through IIC us//==============================================================byte IIC_Read(byte *buff, byte total){if (total==0) return(0);if (total==1) { //read one byte onlybuff[0] = IIC_ReadByte(1); //NACK after readreturn(1);}else { //read more than one bytescount = 0;while(total&1) {IIC_Delay();buff[count++] = IIC_ReadByte(0); //ACK after readtotal--;__RESET_WATCHDOG();}IIC_Delay();buff[count++] = IIC_ReadByte(1);return(count);}}然后你去网上搜索iic总线协议,把协议多读几遍慢慢就会了~~要不你把邮箱给我我发给你.总之很简单的
不用害怕,学学就会了
采纳率:64%
为您推荐:
其他类似问题
您可能关注的内容
i2c总线的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。I2C总线读写程序通用_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
I2C总线读写程序通用
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!I2C总线中文讲解,详尽通俗_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
I2C总线中文讲解,详尽通俗
&&I2C总线中文讲解,详尽通俗
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩5页未读,
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 i2s总线读取数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信