資源簡介
STM8S 模擬I2C程序 源碼
使用IO口驅(qū)動I2C,絕對可用,沒有問題,請放心下載!
代碼片段和文件信息
STM8S?模擬I2C程序
xu52rd?Post?at?2012-7-13?23:38:00
STM8S的硬件I2C還是存在問題不敢貿(mào)然使用.
于是決定用模擬I2C.
寫于?2011-03-27?11:
?
#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)
//?Cal
- 上一篇:Altera提供的FIFO說明書
- 下一篇:祖沖之密碼算法
評論
共有 條評論