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

📄 spi.c

📁 本代码为SPI/I2C转双串口驱动程序。开发环境为Keil c51.
💻 C
字号:
#include "reg51.h"

sbit CS=P1^0;			//Define SPI I/O port
sbit SI=P1^1;
sbit SO=P1^2;
sbit SCLK=P1^3;

//-----------------------------------------
//SPI send data
//-----------------------------------------
void SPI_Send(char temp)
{
	int i;

	CS=0;
	for(i=0x00;i<0x08;i++)
	{

		if(temp&0x80)			//send data to SI
		{
			SI=1;
		}
		else
		{
			SI=0;
		}
		temp=temp<<1;

		SCLK=0;
		SCLK=1;				//generate a posedge
	}

	CS=1;

}


//-----------------------------------------
//SPI read data
//-----------------------------------------
char SPI_Read()
{
	char temp;
	int i;

	CS=0;

	for(i=0x00;i<0x08;i++)
	{
		temp=temp<<1;

		SCLK=0;				//generate a posedge
		SCLK=1;

		if(SO==1)			//read data from SO
		{
			temp=temp|0x01;
		}
		else
		{
			temp=temp&0xFE;
		}
	}

	CS=1;
	return temp;
}


//-----------------------------------------
//ReadRegister
//-----------------------------------------
char ReadRegister(char Reg,char channel)
{
	char RegValue;

	Reg=Reg<<3;
	Reg=Reg+channel;
	Reg=Reg|0x80;				//set reading mode

	SPI_Send(Reg);
	RegValue=SPI_Read();

	return RegValue;
}	


//-----------------------------------------
//WriteRegister
//-----------------------------------------
void WriteRegister(char Reg,char channel,char RegValue)
{
	Reg=Reg<<3;
	Reg=Reg+channel;
	Reg=Reg&0x7F;				//set writting mode

	SPI_Send(Reg);
	SPI_Send(RegValue);
}


//-----------------------------------------
//ReadData
//-----------------------------------------
void ReadData(char Reg,char channel,char *Value,unsigned char num)
{
	Reg=Reg<<3;
	Reg=Reg+channel;
	Reg=Reg|0x80;				//set reading mode

	SPI_Send(Reg);
	while(num>0)
	{
		*Value=SPI_Read();
		Value++;
		num--;
	}
}

//-----------------------------------------
//WriteData
//-----------------------------------------
void WriteData(unsigned char Reg,unsigned char channel,unsigned char *Value,unsigned char num)
{
	Reg=Reg<<3;
	Reg=Reg+channel;			//set writting mode

	SPI_Send(Reg);
	while(num>0)
	{
		SPI_Send(*Value);
		Value++;
		num--;	
	}
}	

⌨️ 快捷键说明

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