📄 spi.c
字号:
#include "stc51reg.h"
#include <intrins.h>
//************************************************************
void config()
{
WDT_CONTR = 0x00; // Watchdog Timer Control Register
}
//初始化单片机,
//***********************************************************
//***********************************************************
unsigned char send(unsigned char _data1,unsigned char _data2)
{ unsigned char i;
clk=0;
ness=0;
i=0;
if(_data1&0x80)
mosi=1;
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x80;
clk=0;
if(_data1&0x40)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x40;
clk=0;
if(_data1&0x20)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x20;
clk=0;
if(_data1&0x10)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x10;
clk=0;
if(_data1&0x08)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x08;
clk=0;
if(_data1 & 0x04)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x04;
clk=0;
if(_data1&0x02)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x02;
clk=0;
if(_data1&0x01)
{
mosi=1;
}
else mosi=0;
clk=1;
// if(miso==1)
// i[0]=i[0]+0x01;
clk=0;
if(_data2&0x80)
{
mosi=1;
}
else mosi=0;
clk=1;
if(miso)
i=i+128;
clk=0;
if(_data2&0x40)
{
mosi=1;
}
else mosi=0;
clk=1;
if(miso)
i=i+64;
clk=0;
if(_data2&0x20)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+32;
clk=0;
if(_data2&0x10)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+16;
clk=0;
if(_data2&0x08)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+8;
clk=0;
if(_data2&0x04)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+4;
clk=0;
if(_data2&0x02)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+2;
clk=0;
if(_data2&0x01)
mosi=1;
else mosi=0;
clk=1;
if(miso)
i=i+1;
clk=0;
mosi=0;
ness=1;
return i;
}
//模拟SPI时序,data1,data2是写入的两个数据,这里仅返回第二个数据
//*************************************************************************
//*************************************************************************
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
send(0x60+port*32+reg*2,dat);
}
//写寄存器,port为子串口的路数,reg为寄存器的地址,dat为写入寄存器的数据
//*************************************************************************
//*************************************************************************
unsigned char read_reg(unsigned char port,unsigned char reg)
{
return send(((port-1)<<5)+(reg<<1),0x00);
}
//读寄存器,琾ort为子串口的路数,reg为寄存器的地址,返回寄存器的值
//***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -