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