IIC通信协议--软件实现源码《可移植》

MyIIC.c

#include "stm32f10x.h"                  // Device header
#include "MyIIC.h"
#include "Delay.h"

void MyIIC_SCL_W(uint8_t Bit)
{
	GPIO_WriteBit(GPIOB,GPIO_Pin_10,(BitAction)Bit);
	Delay_us(10);
}

void MyIIC_SDA_W(uint8_t Bit)
{
	GPIO_WriteBit(GPIOB,GPIO_Pin_11,(BitAction)Bit);
	Delay_us(10);
}

uint8_t MyIIC_SDA_R(void)
{
	uint8_t Bit;
	Bit = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);
	Delay_us(10);
	return Bit;
}




void MyIIC_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
}

void MyIIC_Start(void)
{
	MyIIC_SDA_W(1);
	MyIIC_SCL_W(1);	
	MyIIC_SDA_W(0);
	MyIIC_SCL_W(0);
	
}
void MyIIC_Stop(void)
{
	MyIIC_SDA_W(0);
	MyIIC_SCL_W(1);	
	MyIIC_SDA_W(1);
	
}
void MyIIC_SendByte(uint8_t Byte)
{
	uint8_t i;
	for(i=0; i<8; i++)
	{
		MyIIC_SDA_W(Byte & (0x80>>i));
		MyIIC_SCL_W(1);	
		MyIIC_SCL_W(0);	
	}

}

uint8_t MyIIC_ReveiveByte(void)
{
	uint8_t i,Byte = 0x00;
	MyIIC_SDA_W(1);	
	for(i=0; i<8; i++)
	{
		MyIIC_SCL_W(1);
		if(MyIIC_SDA_R() == 1)
		{
			Byte |= (0X80>>i);
		}
		MyIIC_SCL_W(0);
	}
	return Byte;
	
}
void MyIIC_SendAck(uint8_t AckBit)
{
	MyIIC_SDA_W(AckBit);
	MyIIC_SCL_W(1);
	MyIIC_SCL_W(0);
}
	
uint8_t MyIIC_ReceiveAck(void)
{
	uint8_t AckBit;
	MyIIC_SDA_W(1);
	MyIIC_SCL_W(1);
	AckBit = MyIIC_SDA_R();
	MyIIC_SCL_W(0);
	return AckBit;
}



MyIIC.h

#ifndef __MYIIC_H
#define __MYIIC_H
#include "stm32f10x.h"                  // Device header


void MyIIC_Init(void);
void MyIIC_Start(void);
void MyIIC_Stop(void);
void MyIIC_SendByte(uint8_t Byte);
uint8_t MyIIC_ReveiveByte(void);
void MyIIC_SendAck(uint8_t AckBit);
uint8_t MyIIC_ReceiveAck(void);

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值