/********************SPI通信模拟***********************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit CS=P1^6;
sbit SCK=P1^5;
sbit MOSI=P1^4;
sbit MISO=P1^3;
sbit RST=P1^2;
void delay_ns(unsigned int data ns)
{
unsigned int xdata i;
for(i=0;i
{
_nop_();
_nop_();
_nop_();
}
}
/*************************************单个字节***********************************/
uint SPI_RW(uint dat) //SPI读写函数
{
uint i;
for(i=0;i<8;i++)
{
MOSI = (dat & 0x80); //第一个上升沿有效
dat = (dat << 1);
SCK = 1;
dat |= MISO;
SCK = 0; //SCK初始化是低电平 //所以是00模式
}
return(dat);
}
uchar SPI_RW_Reg (uchar reg, uchar value) // 向寄存器REG写一个字节,同时返回该寄存器状态字节
{
uchar status;
CSN = 0;
status = SPI_RW(reg); //写寄存器的同时读出的是寄存器的状态
SPI_RW(value); //写寄存器的值
CSN = 1;
return(status); //返回该寄存器的状态值
}
uchar SPI_Read(uchar reg ) //读寄存器的值 读一个字节
{
uchar reg_val;
CSN = 0;
SPI_RW(reg);
reg_val = SPI_RW(0); //向寄存器写值的时候读出的是寄存器的值
CSN = 1;
return(reg_val); // 返回寄存器的状态值
}
/*********************************多个字节****************************************/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』