⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.#2

📁 用c8051f320单片机,任选两个IO口进行模拟IIC操做,用软件IIC对加速度芯片MXC6020进行读写操作(IIC接口)
💻 #2
字号:
#include "MEMSIC.h"


bit	Ack;
uint8 xdata Temp0;
uint8 xdata Temp1;
uint8 xdata Temp2;
uint8 xdata Temp3;
int8  xdata Ax;
int8  xdata Ay;


void IIC_Start (void)
{
	Sda=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Sda=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
}

void IIC_Stop (void)
{
	Sda=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Sda=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
}

void IIC_Read_Ack (void)
{
	Scl=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	if(Sda==1)
	{
		Ack=0;
	}
	else
	{
		Ack=1;
	}
	Scl=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
}


void IIC_Write_Ack (void)
{
	Sda=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
}

void IIC_Write_NoAck (void)
{
	Sda=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=1;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	Scl=0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
}

unsigned char IIC_Read_Byte (void)
{
    uint8 bitCount;
    uint8 Temp;

	Sda=1;
	for(bitCount=0x00;bitCount<0x08;bitCount++)
	{
		Scl=1;
		_nop_ ();
		_nop_ ();
		_nop_ ();
		_nop_ ();
		Temp=Temp<<1;
		if(Sda==1)
		{
			Temp+=0x01;
		}
		Scl=0;
		_nop_ ();
		_nop_ ();
		_nop_ ();
		_nop_ ();
	}
	return(Temp);
}

void IIC_Write_Byte (unsigned char a)
{
    uint8 bitCount;
    uint8 Temp;
	
	for(bitCount=0x00;bitCount<0x08;bitCount++)
	{
		Temp=a;
		if((Temp<<bitCount)&0x80)
		{
			Sda=1;
		}
		else
		{
			Sda=0;
		}
		Scl=1;
		_nop_ ();
		_nop_ ();
		_nop_ ();
		_nop_ ();
		Scl=0;
	}
}

void Read_Acc (void)					//read acceleration
{
    IIC_Start ();
	IIC_Write_Byte (0x20);
	IIC_Read_Ack ();
	IIC_Write_Byte (0x01);
	IIC_Read_Ack ();
	IIC_Stop ();

	IIC_Start ();
	IIC_Write_Byte (0x21);
	IIC_Read_Ack ();
	*(&Temp0)=IIC_Read_Byte ();
	IIC_Write_Ack ();
	*(&Temp1)=IIC_Read_Byte ();
	IIC_Write_Ack ();
	*(&Temp2)=IIC_Read_Byte ();
	IIC_Write_Ack ();
	*(&Temp3)=IIC_Read_Byte ();
	IIC_Write_NoAck ();
	IIC_Stop ();

	Ax=Temp0;
	Ax=Ax<<8;
	Ax+=Temp1;
	Ay=Temp2;
	Ay=Ay<<8;
	Ay+=Temp3;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -