pic主机 cmt2300a从机 spi 读回错误

2019-03-25 18:48发布

/****串行通信初始化***/
void spi_init()
{
    TRISC2=0;//SDO设置为输出
    TRISC5=0;//CSB设置为输出
    TRISC3=0;//FCSB设置为输出
    TRISC0=0;//SCK设置为输出
    TRISC1=1;//gpio设置为输入
    TRISA2=1;//gpio设置为输入
    SSPCON1=0B00100010;//使能串口  f/64 串口时钟  SPI主控模式 周期16uS
    SSPCON3bits.BOEN=1;
    SSPSTAT=0B01000000;//在输出数据中间采样输入数据 下降沿发送数据
    RC3=1;//拉高
    RC5=1;
}
/****串口数据交换***/
void transmit_spi(unsigned char byte)
{
    SSP1BUF=byte;//装入待发送数据
    while(!PIR1bits.SSP1IF);//判断数据是否发送完
    PIR1bits.SSP1IF=0;
    TEMP=SSP1BUF;//读回收到的数据

}                                                            
void delay(unsigned int t)//延时1ms
{
unsigned x,y;  
for(x=t;x>0;x--)
for(y=100;y>0;y--);
}
/****写寄存器***/
void write_rf(unsigned char ADD,unsigned char DATA)//写寄存器
{
  TRISC2=0;//SDO设置为输出
  RC5=0;//CSB 拉低片选至少半个SCLK 周期
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  transmit_spi(ADD&0x7F); //写一个地址
  transmit_spi(DATA); //写一个数据  
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  RC5=1;
}
/****读寄存器***/
void read_rf(unsigned char ADD)//读寄存器
{
  TRISC2=0;//SDO设置为输出
  RC5=0;//CSB 拉低片选至少半个SCLK 周期
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  transmit_spi(0X80|ADD); //写一个地址
  TRISC2=1;//SDO设置为输入
  transmit_spi(0X11); // 写一个空数据
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  NOP(); NOP(); NOP();
  RC5=1;
  READTEMP=TEMP;

}

此帖出自小平头技术问答
0条回答

一周热门 更多>