📄 spi.c
字号:
#include <SM89516.h>
#include <intrins.h>
#include <absacc.h>
#define nop _nop_()
sbit spi_di=P1^4; //SPI总线进
sbit spi_do=P1^5; //SPI总线出
sbit spi_clk=P1^6; //SPI总线时钟
sbit spi_cs=P3^7;
void writ_addr(char);
//******************SPI()读取子程序************//BEGIN
unsigned char READ_SPI_DATA (unsigned long int addr)
{unsigned char rdata;
unsigned char a,b,c;
//unsigned long int r;
spi_cs=0;
spi_di=0;
rdata=0x03; //送出读数据命令
writ_addr(rdata);
c=addr&0xff; addr>>=8;
b=addr&0xff; addr>>=8;
a=addr&0xff; //关出24个地址中的高8位
writ_addr(a);
writ_addr(b);
writ_addr(c);
for (a=0; a<8; a++) //读取在总线上的数据
{ spi_clk=0;
rdata = rdata << 1;
//_nop_();//delay(1);
spi_do=1;
if(spi_do==1) {rdata++;}
spi_clk=1;
// _nop_();//delay(1);
}
spi_cs=1;
return rdata; //返回输出结果
}
/*
void WRITE_SPI_DATA (unsigned long int addr,unsigned char wdata)
{
unsigned char a,b,c;
//unsigned long int r;
spi_cs=0;
spi_di=0; //送出写数据命令
writ_addr(0x06);
writ_addr(0x02);
c=addr&0xff; addr>>=8;
b=addr&0xff; addr>>=8;
a=addr&0xff; //关出24个地址中的高8位
writ_addr(a);
writ_addr(b);
writ_addr(c);
writ_addr(wdata);
spi_cs=1; //返回输出结果
}
void wren(void)
{spi_cs=0; _nop_();_nop_();_nop_();_nop_();
spi_di=0; //送出写数据命令
writ_addr(0x01); _nop_();_nop_();_nop_();_nop_();
writ_addr(0x02);
spi_cs=1;
}
*/
void writ_addr(char m)
{unsigned char a;
for (a=0; a<8; a++)
{ spi_clk=0;
if (m & 0x80)
{spi_di=1;}
else {spi_di=0;}
_nop_();//delay(1);//
spi_clk=1;
m=m<<1;
//_nop_();//delay(1);
}
}
//*********************************************//END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -