导航:首页 > 操作系统 > 单片机iic接口

单片机iic接口

发布时间:2023-07-16 10:38:39

❶ i2c单片机里什么意思

i2c是一种同步串行数字信号总线接口,用于实现多个器件或设备之间的通信。它包含有一根时钟线和数据线,最高通信速度可达400Kb/s.一些高档单片机带有该接口,但普通单片机可以用通用IO口模拟 i2c时序。

❷ 51单片机 iic 总线程序,用IO口模拟和用自带IIC口有什么不同

其实程序是一模一样的,唯一的区别是模拟IIC需要CPU运算,这样就增加了单片机的运算时间,而带IIC接口的单片机,程序还是需要的,但是IIC的运算通过集成在单片机里面的寄存器硬件电路来运算,就像定时器电路一样自己会运算,这样就不要cpu来运算过程了,从而节省了时间,使cpu运算的更快。当然这样就的多付出经济成本哦

❸ 单片机任意引脚都可以做IIC接口吗

可以的,51单片机使用引脚模拟iic时序,所以对引脚没限制

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

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

❺ 51单片机iic总线有哪些io口

IO口模拟其实就是数据口配合时钟口一位一位地接受或发送数据,然后存到内存里。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

运算器有两个功能:

(1)执行各种算术运算。

(2)执行各种逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。

运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。

❻ 单片机 I2C通信

I2C的时序是比较复杂的,你如果能把I2C的时序弄清,那其他器件的时序都不成问题了。
我就按照我的理解来跟你讲吧。
直接用程序来说明吧。
NOP(),一个机器周期时间的延迟,12M晶振时为1微秒
NOPS(),4个NOP()。
sbit
SDA
P2^0;
sbit
SCL
P2^1;
定义数据线和时钟线接口
首先,I2C有2个重要的线,SDA数据线SCL时钟线,当总线上没有进行信息传送时,SDA和SCL都为高电平,我们称之为释放总线。
开始传送信息时,要有一个开始信号,
开始信号
:定义为在SCL为高电平的时候,SDA从高电平拉低。
start()
{
SDA=1;
NOP();
//同你图中
SDA/SCL上升/下降所用时间
1US
SCL=1;
NOPS();
//建立开始信号(同你图中TSU起始信号建立时间一样4US)
SDA=0;
//SDA拉低
NOPS();
SCL=0;
//SCL拉低,
钳住总线,准备发送或接收数据
NOP();
}
结束信号:与开始信号相反,在SCL为高电平时,SDA从低拉高
stop()
{
SDA=0;
NOP();
SCL=1;
NOPS();
//建立信号时间
SDA=1;
//拉高
结束。
NOPS();
}
我晕,发现写了半天还有好多。。算了
帮人帮到底了
发送/接收一个数据:数据的发送和接收都是在SCL为低电平的时候发生,因为SCL为高电平时已给了开始和结束信号。发送数据时,当数据准备读入时,将SCL线暂时拉高(SCL为高时,SDA无法改变状态),保持一段时间然后拉低(同你图中的TDH,数据输出保持时间),这时数据则发送完毕到SDA上。接收则与之大同小异。当SDA线上有数据过来时,先将SCL拉高,建立好时间,然后拉低,数据则被读入。(关于如何被发出以及如何被读入则是芯片做的事,我们不用管,只需记住SCL拉低,数据发出/读入)
用程序来讲就是:
send(uchar
c)
//发送一个字节
{
uint
i;
for(i=0;i<8;i++)
//该字节8位从高往低发送
{
if((c<<i)&0x80)
SDA=1;
else
SDA=0;
NOP();
SCL=1;
//建立信号时间
NOPS();
SCL=0;
//发送完毕
}
}
recieve()
{
uchar
r;uint
i;
r=0;SDA=1;
for(i=0;i<8;i++)
//读取8位数据
{
NOP();
SCL=0;
NOPS();
SCL=1;
NOP();
r<<=1;
if(SDA==1)
r+=1;
NOP();
}
SCL=0;
NOP();
return
(r);
}
程序可能有点难懂,不过没关系,使用I2C时候,直接调用写好的程序,如我写的
start.stop.send
receive
等,这些程序应该有现成的。
发送一个字节后会有一个应答函数,应答函数定义为,当发送完一个字节也就是8位的时候,如果这是SDA为低电平,则为有应答,反之则无。如果要发送多个字节,一个字节发完后需要一个应答函数才能继续发下面一个字节。程序也就大同小异。掌握好时序就行了。
I2C用的最多的就是E2PROM了。
给你举个例子
如果我想往E2PROM的0x50单元写一个‘a’,则我这样写:
start();
//开始
send(0xa0);
//选择我要发送的器件。0xa0为E2PROM的器件地址
answer();
//应答
send(0x50);
//选择E2PROM中的0X50地址单元
answer();
//应答
send('a');
//发送数据‘a’
stop();
//停止
好累。。。。。就写这么多

阅读全文

与单片机iic接口相关的资料

热点内容
免费pdf在线转换 浏览:766
堆货算法 浏览:875
vsc编译vc程序 浏览:195
centos55命令 浏览:709
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:249
墨镜慧眼怎么下载厂商的app 浏览:61
iphone加密专线 浏览:491
aes产生加密文件 浏览:415
编程实现蓝牙通信 浏览:769
怎么恢复掉签的app 浏览:847
服务器部署ip地址 浏览:323
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:948
建行app怎么生成电子签章 浏览:510
获取当前时间javadate 浏览:75
带密码的wifi如何加密 浏览:239
服务器怎么变成阵列 浏览:720
web前端黑客技术pdf 浏览:73
育儿百科全书pdf 浏览:602