標(biāo)題:
STM8s 用GPIO模擬IIC通信源程序
[打印本頁(yè)]
作者:
王杰
時(shí)間:
2019-7-29 09:08
標(biāo)題:
STM8s 用GPIO模擬IIC通信源程序
實(shí)測(cè)有效,供大家一起學(xué)習(xí)
0.png
(5.03 KB, 下載次數(shù): 50)
下載附件
2019-7-29 16:14 上傳
單片機(jī)源程序如下:
/**
********************************** STM8S ***********************************
* @文件名 : soft_iic.c
* @作者 : gaoxiao
* @文件版本 : V1.0.0
* @日期 : 2019年06月29日
* @摘要 : 軟件模擬IIC源文件
******************************************************************************/
/*----------------------------------------------------------------------------
更新日志:
2019-06-29 V1.0.0:初始版本
----------------------------------------------------------------------------*/
/* 包含的頭文件 --------------------------------------------------------------*/
#include "soft_iic.h"
/************************************************
函數(shù)名稱 : IIC_init
功 能 : iic初始化函數(shù)
參 數(shù) : 無(wú)
返 回 值 : 無(wú)
作 者 : gaoxiao
*************************************************/
void IIC_init(void)
{
iic_scl_out();
iic_sda_out();
}
/************************************************
函數(shù)名稱 : IIC_Start
功 能 : iic起始函數(shù)
參 數(shù) : 無(wú)
返 回 值 : 無(wú)
作 者 : gaoxiao
*************************************************/
void IIC_Start(void)
{
iic_sda_out();
iic_sda_1();
iic_scl_1();
system_delay_100us(1);
iic_sda_0();
system_delay_100us(1);
iic_scl_0();
}
/************************************************
函數(shù)名稱 : IIC_Stop
功 能 : iic結(jié)束函數(shù)
參 數(shù) : 無(wú)
返 回 值 : 無(wú)
作 者 : gaoxiao
*************************************************/
void IIC_Stop(void)
{
iic_sda_out();
iic_sda_0();
iic_scl_0();
system_delay_100us(1);
iic_sda_1();
iic_scl_1();
system_delay_100us(1);
}
/************************************************
函數(shù)名稱 : IIC_Wait_Ack
功 能 : 等待應(yīng)答信號(hào)到來(lái)
參 數(shù) : 無(wú)
返 回 值 : 1,接收應(yīng)答失敗 0,接收應(yīng)答成功
作 者 : gaoxiao
*************************************************/
uint8_t IIC_Wait_Ack(void)
{
uint8_t ucErrTime = 0;
iic_sda_in();
system_delay_100us(1);
iic_scl_1();
system_delay_100us(1);
while(iic_sda_read())
{
ucErrTime++;
if(ucErrTime > 50)
{
IIC_Stop();
return 1;
}
system_delay_100us(1);
}
iic_scl_0();
return 0;
}
/************************************************
函數(shù)名稱 : IIC_Ack
功 能 : 產(chǎn)生ACK應(yīng)答信號(hào)
參 數(shù) : cak 1:應(yīng)答 2:無(wú)應(yīng)答
返 回 值 : 無(wú)
作 者 : gaoxiao
*************************************************/
void IIC_Ack(uint8_t ack)
{
iic_scl_0();
iic_sda_out();
if(1 == ack) iic_sda_0();
else iic_sda_1();
system_delay_100us(1);
iic_scl_1();
system_delay_100us(1);
iic_scl_0();
}
/************************************************
函數(shù)名稱 : IIC_SendByte
功 能 : 寫(xiě)一個(gè)字節(jié),from MSB to LSB
參 數(shù) : data 數(shù)據(jù)
返 回 值 : 無(wú)
作 者 : gaoxiao
*************************************************/
uint8_t IIC_WriteByte(uint8_t data)
{
uint8_t bits;
iic_sda_out();
for(uint8_t Loop_i = 0;Loop_i < 8;Loop_i ++)
{
bits = data&0x80;
if(0x80 == bits)
{
iic_sda_1();
}
else
{
iic_sda_0();
}
system_delay_100us(1);
iic_scl_1();
system_delay_100us(1);
iic_scl_0();
data = data << 1;
}
iic_sda_1();
return IIC_Wait_Ack();//等待應(yīng)答
}
/************************************************
函數(shù)名稱 : IIC_ReadByte
功 能 : 讀一個(gè)字節(jié)
參 數(shù) : 無(wú)
返 回 值 : 數(shù)據(jù)
作 者 : gaoxiao
*************************************************/
uint8_t IIC_ReadByte(void)
{
uint8_t data = 0;
iic_sda_1();
iic_sda_in();
system_delay_100us(1);
for(uint8_t Loop_i = 0;Loop_i < 8;Loop_i ++)
{
iic_scl_1();
system_delay_100us(1);
if(iic_sda_read())
{
data = (1 << 1)|data;
}
else
{
data = (0 << 1)|data;
}
system_delay_100us(1);
iic_scl_0();
system_delay_100us(1);
}
IIC_Ack(1);
return data;
}
復(fù)制代碼
所有資料51hei提供下載:
soft_iic.7z
(1.36 KB, 下載次數(shù): 52)
2019-7-29 09:07 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
果州物聯(lián)
時(shí)間:
2019-8-29 15:37
謝謝LZ分享,學(xué)習(xí)了
作者:
wpppmlah
時(shí)間:
2019-8-30 16:23
感謝樓主的分享,學(xué)習(xí)受教了.
作者:
maoyongyi
時(shí)間:
2022-3-10 22:22
能用,不完整
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1