📄 spi.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 + -