亚洲中文字幕网站-亚洲中文字幕婷婷在线-亚洲中文字幕丝祙制服片-亚洲中文字幕三区二区-亚洲中文字幕三级电影-亚洲中文字幕日韩欧美

您好,歡迎訪問上海現易電子元器件有限公司網站!

021-51870898
021-51870898   18019251567
4新聞資訊
您的位置: 首頁 ->  新聞資訊 -> 單片機

?STM8S 模擬I2C程序

文章出處:單片機 責任編輯:上?,F易電子元器件有限公司 發表時間:2018-05-20

STM8S的硬件I2C還是存在問題,不敢貿然使用.

#define SCL PE_ODR_ODR1
#define SDA PE_ODR_ODR2
#define SDAM PE_IDR_IDR2
#define SET_SCL_OUT() {PE_DDR_DDR1=1; PE_CR1_C11 = 1; PE_CR2_C21 = 0;}
#define SET_SDA_OUT() {PE_DDR_DDR2=1; PE_CR1_C12 = 1; PE_CR2_C22 = 0;}
#define SET_SDA_IN() {PE_DDR_DDR2=0; PE_CR1_C12 = 0; PE_CR2_C22 = 0;}
//--------------------------------------------------------------
// Prototype : void I2C_Start(void)
// Calls : Delay_5us()
// Description : Start Singnal
//--------------------------------------------------------------
void I2C_Init(void)
{
I2C_CR1 &= 0xFE; // PE=0, disable I2C module 
SET_SCL_OUT();
SET_SDA_OUT(); 
}

//--------------------------------------------------------------
// Prototype : void Delay_5us(void)
// Description : 大約延時5us
//--------------------------------------------------------------
void Delay_5us(void)
{
uchar i; //fcpu 8MHz 時
for (i=50; i>0; i--);
}

//--------------------------------------------------------------
// Prototype : void I2C_Start(void)
// Calls : Delay_5us()
// Description : Start Singnal
//--------------------------------------------------------------
void I2C_Start(void)
{
// SDA 1->0 while SCL High
SDA = 1; 
SCL = 1; 
Delay_5us(); 
SDA = 0; 
Delay_5us(); 
SCL = 0; 
}

//--------------------------------------------------------------
// Prototype : void I2C_Stop(void)
// Calls : Delay_5us()
// Description : Stop Singnal
//-------------------------------------------------------------- 
void I2C_Stop(void)
{
// SDA 0->1 while SCL High
SDA = 0; 
SCL = 1; 
Delay_5us(); 
SDA = 1; 
Delay_5us(); 
}
//--------------------------------------------------------------
// Prototype : void I2C_SendACK(uchar ack);
// Calls : Delay_5us()
// Parameters : bit ack:1-noack, 0-ack
// Description : Master device send ACK to slave device.
//--------------------------------------------------------------
void I2C_SendACK(uchar ack)
{
if(ack == 0)
{
SDA = 0; 

else
{
SDA = 1; 
}

SCL = 1; 
Delay_5us(); 

SCL = 0; 
Delay_5us(); 
}
//--------------------------------------------------------------
// Prototype : uchar I2C_SendByte(uchar sendDAT)
// Calls : Delay_5us()
// Parameters : uchar sendDAT---data to be send
// Return Value : CY--slave ack (1---noack,0---ack)
// Description : Send one byte to I2C
//--------------------------------------------------------------
uchar I2C_SendByte(uchar sendDAT)
{
uchar i,revack;
for (i= 0 ; i< 8; i++) 
{
SCL = 0; 
Delay_5us(); 
if (sendDAT & 0x80) // write data
{
SDA = 1;
}
else 
{
SDA = 0;
}
sendDAT <<= 1;
SCL = 1; 
Delay_5us(); 


SCL = 0; 
Delay_5us(); 

SET_SDA_IN();

SCL = 1; 
asm("nop");
asm("nop");

revack = (uchar)SDAM;

Delay_5us(); 
SCL = 0; 

SET_SDA_OUT();

Delay_5us(); 
return revack;
}

//--------------------------------------------------------------
// Prototype : uchar I2C_RecvByte()
// Calls : Delay_5us()
// Parameters : none
// Return Value : revDAT- received data
// Description : Receive one byte from I2C
//--------------------------------------------------------------
uchar I2C_RecvByte()
{
uchar i;
uchar revDAT = 0;

SDA = 1; // latch the Data port befor reading

SET_SDA_IN();

for (i=0; i<8; i++) 

revDAT <<= 1;

SCL = 1; 

asm("nop");
asm("nop");

if (SDAM)
{
revDAT |= 0x01;
}
else
{
revDAT &= 0xfe;
}
Delay_5us(); 
SCL = 0; 
Delay_5us(); 
}

SET_SDA_OUT();

return revDAT;
}

//--------------------------------------------------------------
// Prototype : void Write_PT2314(uchar wdata)
// Calls : I2C_Start(), I2C_Stop(),I2C_SendByte()
// Parameters : RegAddr-- target memory address, 
// wrdata--- data to be writing
// Description : Write one byte to target memory
//--------------------------------------------------------------
void Write_24c02(uchar regadd,uchar wdata)
{
I2C_Start(); 
I2C_SendByte(0xA0); // Device Addr + Write (operation) 
I2C_SendByte(regadd); 
I2C_SendByte(wdata); 
I2C_Stop(); 
}
uchar Read_24c02(uchar regadd)
{
uchar revdata;

I2C_Start(); 
I2C_SendByte(0xA0); // Device Addr + Write (operation) 
I2C_SendByte(regadd); 

I2C_Start(); 
I2C_SendByte(0xA1); // Device Addr + Write (operation) 

revdata = I2C_RecvByte(); 
I2C_SendACK(1);

I2C_Stop(); 

return revdata;
}


上?,F易電子元器件有限公司 版權所有 未經授權禁止復制或鏡像

CopyRight 2020-2025 m.mpniao.cn All rights reserved   滬ICP備2020031792號

友情鏈接:

電話

易經理

18019251567

微信

易經理

易經理

頂部

咨詢
主站蜘蛛池模板: 日本大片高清免费视频 | 日本无码专区亚洲麻豆 | 欧美视频一区二区三区四区 | 亚洲人视频免费在线观看 | 国内自拍小视频 | 国产第一草草影院 | 国产肥臀熟女极品国产馆 | 久久精品屋 | 国产日本一线在线观看免费 | 制服丝袜自拍 | 国产二区亚洲三区 | 国产最新亚洲精品 | 亚洲国产精品无码久久久 | 久久国产综合精品五月天 | 亚洲中文字幕无码乱线久久视 | 久久精品爱| 日韩一区二区精品久久高清 | 日本jizz在线播放 | 91免费公开视频 | 精品国产香蕉伊思人在线在线亚洲一区二区 | 成人爽免费视频在线观看 | 91精品国产高清久久久久 | 国产91av在线免费观看 | 男人都懂www深夜免费网站 | 国产成人免费福利a片 | 69国产成人精品视频软件 | 国产亚洲精品精华液 | 真人作爱视频免费视频大全 | 蜜臀久久97精品久久久久久 | 亚洲伊人成综合网色777 | a天堂亚洲无码在线 | 国产好大好爽久久久久久久 | 国产成人18黄禁网站免费观看 | 日韩AV一区二区在线 | 国产一区二区三区美女在线观看 | 久在线播放| 无码精品国产一区二区免费 | 国产精华一线二线三线区别在哪 | 无码国产偷倩在线播放老年人 | av天堂影音先锋av色资源网站 | 福利天堂|