資源簡介
只要定義SCL,SDA兩個端口,可以從指定地址讀寫少于256個字節的內容,長期應用驗證,方便使用。
代碼片段和文件信息
#include?“config.h“
#ifdef?C51
#define?I2CWAIT?_nop_();_nop_();_nop_();_nop_();_nop_()
void?Start_I2c()
{
SDA=1;_nop_();
?? SCL=1;I2CWAIT;????
?? SDA=0;I2CWAIT;?????
?? SCL=0;
}
bit?Stop_I2c()
{
SDA=0;I2CWAIT;
?? SCL=1;I2CWAIT;
?? SDA=1;_nop_();
return?SDA;
}
bit?SendByte(unsigned?char?c)
{
unsigned?char?i?=?9;
bit?rr;
?
do
{
SCL?=?0;
SDA?=?(bit)(c?&?0x80);
c?=?(c?<1)?+?1;
I2CWAIT;
SCL?=?1;
I2CWAIT;
}?while(--i);
rr?=?SDA;
SCL?=?0;
return?rr;
}
unsigned?char?RcvByte(bit?ack)
{
?? unsigned?char?ci?=?8;
??
SDA?=?1;
do
{
I2CWAIT;
SCL?=?1;
I2CWAIT;
c?<<=?1;
if?(SDA)?c++;
SCL?=?0;
}?while(--i);
SDA?=?ack;
I2CWAIT;
SCL?=?1;
I2CWAIT;
SCL?=?0;
I2CWAIT;
return?c;
}
bit?SetAddr(unsigned?char?slaunsigned?char?subabit?rw)
{
sla?&=?0x07;
sla?<<=?1;
if?(rw)
sla?|=?0xa1;
else
sla?|=?0xa0;
Start_I2c();
if?(SendByte(sla))?return?
- 上一篇:2020全國大學生數學建模競賽評閱要點:A題
- 下一篇:電子密碼鎖設計 數字邏輯
評論
共有 條評論