×
单片机 > 单片机程序设计 > 详情

51模拟SPI

发布时间:2020-05-28 发布时间:
|

/********************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);       //           返回寄存器的状态值

}

/*********************************多个字节****************************************/



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430F5529 上手小例程2