1. STC单片机模拟的I2C总线上数据传送速率能达到12M吗
困难,就以12c5a系列为例,最高频率最高频率35MHz。
你一个时钟做一个下降沿,至少要两个指令周期,一高一低。还要写数据线,加一个指令周期,写数据前要判断,判断前要移位。你写一个程序即可以算算要多少指令周期。这还不考虑,上升沿与下降沿的延时。stc单片机IO口由0变1会有两个周期的强推,这就说,在最高频率下可能需要两个周期才能确保低电平变高,也就是你写数据线后可能要等待一下,才能赋予时钟线下降沿。
你为什么需要这么高的速度,很多芯片都不支持这么高的速度,一般400k。
而且你还要看走线长短,和使用环境。
2. stc12c5a60s2单片机自带i2c总线吗
没有I2C总线。要在外部配I2C芯片,就得用软件来模拟了。
如果是配I2C存储器,如24CXX系列存储器的话,就不必了,因stc12c5a60s2单片机内部有EEPROM存储器,比外配的I2C存储器更方便。
3. STC单片机 有没有 集成I2C功能的(不是模拟)
有啊,STC12C5410AD就集成了EEPROM的功能。你可以去宏晶公司去查下,他们公司有很多事例测试程序。你可以参考,基本上不用修改什么就可以用了。祝你成功哦!!!http://www.mcu-memory.com/
4. 如何用IO口模拟I2C来实现两个STC单片机之间的
两个单片机之间通信用串口啊,距离较近,可用TTL连接。距离远点就用RS232连接,程序好写。I2C的协议和时序太复杂,要是用I2C存储器芯片,那没办法,只能用IO口模拟,单片机是主器件,芯片是从器件,还好办。
但是,两个单片机,还用l2C通信,你真是没事找事,一个是主器件,程序网络里可以找到,可另一个是从器件,这程序可从来没人写过,那两个单片机就不能通信。用宋丹丹一句话送你:你是没事找事,找抽型的。
5. STC单片机怎样外接存储器
把RAM的数据线D0-D7接到P0口上,P0口同时也接到74HC373上,373的CLK接单片机的ALE。地址线低8位由74HC373锁存P0得到,地址线高8位A8-A16接到P2口上,然后使用下面程序即可实现存储器读写。
u8 xdata *point;
u8 i;
point=0x4000;
*point=i; //写入数据
i=*point; //读入数据
point++;
6. 如何用IO口模拟I2C来实现两个STC单片机之间的通讯,求C语言写法
这是我写的模拟程序,只有一个发送函数和一个接收函数,EP为接收标志位,发送没有标志位,通过外部中断来发送起始信号,无应答与非应答,无结束信号,实测可以正常收发数据
#ifndef _IOPORTSEND_H__
#define _IOPORTSEND_H__
#include<reg52.h>
unsigned char DAT,EP=0;//可以把DAT当作串口中的SBUF,主机发送完后接收机从DAT提取数据
sbit flag = P3^3;//外部中断口
sbit ok = P2^7;//起始信号发送口
sbit PCL = P2^6;//时钟线
sbit PDA = P2^5;//数据线
void delay() //延时函数控制波特率
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=13;a>0;a--);
}
void PortInit()//中断配置
{
EA=1;
EX1=1;
IT1=1;
}
void SendPort(unsigned char dat)//发送函数
{
unsigned char i;
PCL=0;
ok=1;//通过ok来启动接收机的中断
ok=0;
for(i=0;i<8;i++)//开始发送数据
{
PCL=0;
delay();
if(dat&0x80)
PDA=1;
else
PDA=0;
PCL=1;
delay();
dat<<=1;
}
PCL=0;
delay();
ok=1;//ok置1以便下次发送时启动中断
PCL=1;//发送完毕释放时钟线与数据线
PDA=1;
}
void ReadPort()interrupt 2//接收函数,在中断函数中接收数据
{
unsigned char i;
static unsigned int b;
PCL=1;
PDA=1;//防止接收机的PCL口和PDA口影响数据的接收
for(i=0;i<8;i++)//开始接收数据
{
DAT<<=1;
while(PCL==0);
b=0;
while(PCL==1)
{
b++;
if(b==1)
if(PDA)
DAT|=0x01;
}
}
EP=1;//接收完毕后置EP为1,需要在其他函数中清零
}
#endif