欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
自己用的1T單片機AT24C02庫 支持STC12C5A60S2等芯片
[打印本頁]
作者:
sxhwdz
時間:
2018-10-2 20:48
標題:
自己用的1T單片機AT24C02庫 支持STC12C5A60S2等芯片
自己一直使用的I2C庫,可供參考。
單片機源程序如下:
#include <INTRINS.H>
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define slaw 0xa0
#define slar 0xa1
sbit sclb = P3^0;
sbit sdab = P3^1;
/**************************************
延時5微秒(STC12C5A60S2@12M)
不同的工作環境,需要調整此函數
此延時函數是使用1T的指令周期進行計算,與傳統的12T的MCU不同
**************************************/
void Delay5us()
{
BYTE n = 4;
while (n--)
{
_nop_();
_nop_();
}
}
//-----------------------
// 發出 START 1->0
void IICstart(void)
{
sdab=1;
sclb=1; Delay5us();
sdab=0; Delay5us();
sclb=0;
Delay5us(); //延時
}
//-----------------------
// 發出 STOP 0->1
void IICstop(void)
{
sdab=0;
sclb=1; Delay5us();
sdab=1; Delay5us();
sclb=0;
Delay5us(); //延時
}
//-----------------------
// 發出 應答位 0
void mack(void)
{
sdab=0;
sclb=1; Delay5us(); sclb=0;
sdab=1;
Delay5us(); //延時
}
//-----------------------
// 發出 非應答位 1
void mnack(void)
{
sdab=1;
sclb=1; Delay5us(); sclb=0;
sdab=0;
Delay5us(); //延時
}
//-----------------------
// 向 SDA 寫一個字節
bit wrbyt(BYTE out_b)
{
BYTE data i;
bit bdata sack;
ACC=out_b;
for(i=8;i>0;i--)
{
ACC = ACC<<1; sdab=CY;
sclb=1; Delay5us(); sclb=0;
Delay5us(); //延時
}
sdab=1;
sclb=1;
Delay5us(); //延時
sack=sdab; //收應答
sclb=0;
Delay5us(); //延時
return sack; //返回應答
}
//-----------------------
// 從 SDA 讀取一個字節
sbit ACC_bit0= ACC^0;
BYTE rdbyt(void)
{
BYTE data i;
sdab=1;
ACC=0;
for(i=8;i>0;i--)
{
ACC=ACC<<1;
sclb=1; Delay5us();
ACC_bit0=sdab;
sclb=0;
Delay5us(); //延時
}
return ACC;
}
//-----------------------
// 發送 numbyt 字節
void wrnbyt(BYTE iic_add, BYTE numbyt, BYTE xdata *data_add) reentrant
{
BYTE i;
for(i=100;i>0;i--)
{
IICstart();
if(!wrbyt(slaw)) // 發送 SLAW 字節
break;
} // return 0;
wrbyt(iic_add); // 發送 地址
for( ; numbyt>0; numbyt--)
{
wrbyt(*data_add++); // 發送
}
IICstop();
}
//-----------------------
// 讀取 numbyt 字節
void rdnbyt(BYTE iic_add, BYTE numbyt, BYTE idata *data_add) reentrant
{
BYTE i;
for(i=100;i>0;i--)
{
IICstart();
if(!wrbyt(slaw)) // 發送 SLAW 字節
break;
} // return 0;
wrbyt(iic_add); // 發送 地址
IICstart();
wrbyt(slar); // 發送 SLAr 字節
for(; numbyt>0; numbyt--)
{
*data_add++=rdbyt();
if(numbyt>0)
mack();
}
mnack();
IICstop();
}
復制代碼
所有資料51hei提供下載:
AT24C02.rar
(972 Bytes, 下載次數: 37)
2018-10-2 20:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
路LGY
時間:
2020-5-17 11:17
想問一下最后兩個函數的參數該怎么寫呢
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1