导航:首页 > 操作系统 > i2c51单片机

i2c51单片机

发布时间:2022-09-01 10:05:29

A. 51单片机i2c总线读写操作问题

带有 I2C 功能的设备之间通信很方便,51单片机没有 I2C 接口,只能在编程时遵守 I2C 协议,下面的资料很详细。
http://wenku..com/link?url=_J0cu6a-W8yDznvCJWE9_6axIlyNpbV-_R-x2s8R4x5o-qIJ9m-tfMjANr4St5GeZi
你必须懂硬件,会看时序图,才能用 51单片机完成 I2C 通信。在这里三言两语说不清楚的。

B. 51单片机如何模拟I2C总线中从机接收ID,发送数据的程序

希望能给你解答:
1、时钟信号都是主机产生的,从机只有一种情况下才能控制时钟线,即在忙的时候,主机还在发送数据,从机会主动把时钟拉低,表示我正在忙,不能收数据。
2、两个主机的话,在发送的时候一定会有一个从属关系,这个需要自己设置。
3、响应:i2c上每传输一个字节,都必须要有响应,方向是从机到主机。

C. 51单片机之间能用i2c协议通信吗

可以,两个51单片机之间可以用I2C通信,有同步和异步两种,郭天祥的51书里有具体的讲解,你可以去看看

D. 两个51单片机如何通过i2c通讯

一般情况下,要进行I2C通讯,你最起码其中有一个芯片要本身就带有I2C通讯接口,用这个带有I2C接口的芯片来作从器件,这样就相对好处理一点。你要是两个都不带这个接口,来模拟的话,很有难度。除非你对I2C协议很清楚,不过从楼主的提问来看,估计就不怎么熟悉这种协议。
所以建议还是用别的通讯方式吧,比如用SPI,相对会好处理一点,用其中一个芯片的INTx来模拟CS接口,作为从器件在中断中来处理,另外一个就模拟主器件来控制从器件,这样或许会好弄点。如果楼主确实需要通讯,还是赶快换个思路吧,要是卡在一个地方动不了,会耽误你的进程的,祝你好运!

E. 51单片机I2C通讯的地址是怎么回事

一个I2C总线上可以挂多个器件,为区分不同的器件,所以有器件地址的概念
有些器件的地址是固定的,有些器件的地址是可变的

F. 有关于I2C 51单片机的问题,实在搞不懂,请大家帮帮忙,先谢谢了

uchar 肯定不能大于255,大于255,有可能丢弃高8位或丢失低8位,分大端模式或小端模式如果想把数据写入到第2000个字节地址时候,不可以把address直接写为2000,要分高8位和低8位
低8位就是 addresswrite_I2C_byte(address);
高8位就是你的下面语句的a0或a1
write_I2C_byte(0xa0);
但真正高8位=器件地址(1010占高4位)十 要写入的地址高8位(3位有效,占D3D2D1 )+读写命令位(D0位)

高8位低8位分离如下:
uint address;
uchar addressL,addressH
addressL=address%256; 有时可省去这一步,高8位自动丢弃
addressH=0XA0|(address>>8)|com读命令com=1写命令 com=0

我试验过的子程序,有点拖沓
////////从24c16的地址address中读取一个字节数据/////
unsigned char x24c16_read(uint address)
{
uchar i;
uchar addr_h,addr_h1,addr_l;
addr_h=address/256;
addr_h1=addr_h*2;
addr_l=address%256;
start();
writex(0xa0+addr_h1);
clock(); writex(addr_l);
clock(); start();
writex((0xa1+addr_h1)); clock();
i=readx(); stop();
delay1(10);
return(i);
}

G. 51单片机I2C通信如何读一字节

当串行数据线上数据为1时,一个8位二进制变量dat和0x01求或,则最低位被置1,如果数据线上为0电平,则不进行这个或操作,最低位保持原状0,因此即读得一位串行数据保存在dat的最低位,然后把dat这个数据左移一次,最低位被推向次低位,空出最低位(变为0),下一个时钟里,再进行第二次这样的读操作,得两位二进制数,经过8次即读得到串囗发送的一个字节,最先发的那位数据移到了最高位 注意是读8次,左移7次
如果发送时先发送低位(spI串口发数据有时高位在前,有时低位在前)就要将其读入最高位(和0x80进行"或"操作),然后右移,同样是8次可以读得一个字节数据

H. 51单片机通过I2C总线操作EEPROM

把Display();用大括号括住试一试
另外要确定从EEPROM读取的数值dat是否在0-16范围内,因表格内只有17个代码,超过此范围是显示不出来的
还有LSD=LEDDATA[DisplayData[i]];//发送段码
你获得的数据只有DisplayData[0],那么DisplayData[i]其它数据从何而来,是0吗?也许只是想先试一试能否点亮一个数码管

I. 51单片机的I2C通讯问题.w

这个讲的是I2C协议的具体SDA与SCL高低电平时序,就假如你用51单片机两个I/O口 一个I/O模拟SDA 一个I/O模拟SCL时 你可以按照以上图片里面的时序来编辑两个I/O高低电平时序。假如你有I2C通讯硬件模块的话 你就不需要以上图片直接用模块就行。上面图片讲的东西 大部分在I/O口模拟I2C 传输数据时才会用到,比较底层。不知道我的回答你能理解么。

阅读全文

与i2c51单片机相关的资料

热点内容
电脑编程属于it吗 浏览:353
如何分辨文件夹 浏览:714
哪里能学懂通达信每个源码的含义 浏览:833
命令式过去式形式 浏览:450
车铣复合铣六角编程实例 浏览:743
android通知的呼吸灯 浏览:907
单片机排针的功能 浏览:849
华为的服务器现在被什么公司收购 浏览:285
服务器粘包怎么处理 浏览:726
怎么进创意工坊的服务器 浏览:786
空调压缩机加变频器 浏览:968
加密货币有哪些可以玩 浏览:993
腾讯云服务器如何生成备案授权码 浏览:950
计算机学算法好还是人工智能 浏览:500
java命令运行eclipse 浏览:979
u盘加密其他办法 浏览:808
zm螺纹算法 浏览:778
excel与数据分析pdf 浏览:153
特斯拉的智能算法 浏览:204
单片机开发费用 浏览:937