woshigeshuai 发表于 2023-3-31 20:17:28

STC8H8K64 SPI从机 接收一个字节时间超长





SPI 当作从机   接收数据
SS_2 平时低电平,接收到一个字节 ,变高字节。 然后再低电平准备接收下一个。


void SPI_INIT(void)
{

//    P_SW1 = 0x00;                               //SS/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
P_SW1 = 0x04;                               //SS_2/P2.2, MOSI_2/P2.3, MISO_2/P2.4, SCLK_2/P2.5
//P_SW1 = 0x08;                               //SS_3/P5.4, MOSI_3/P4.0, MISO_3/P4.1, SCLK_3/P4.3
//P_SW1 = 0x0c;                               //SS_4/P3.5, MOSI_4/P3.4, MISO_4/P3.3, SCLK_4/P3.2

       
        SPCTL = 0x40;                               //使能SPI从机模式
        SPSTAT = 0xc0;                              //清中断标志

}


u8 SPI_receive(void)
{
        while (!(SPSTAT & 0x80));               //查询完成标志
        SPSTAT = 0xc0;                        //清中断标志
        //SPDAT = SPDAT;                        //将接收到的数据回传
        return SPDAT;
}





        while(1)
        {
                //test_display();
                RE2_BUSY_L;                                                                // SS_2=0;
                RevData1=SPI_receive();         // 接收一个字节
                DisplayHex(RevData1);
                RE2_BUSY_H;                                                                // SS_2=1
               
                LED=1;                                                                                // LED
                P34=1;                                                                                // 逻辑分析仪查看
                //RE2_BUSY_L;
                delay_ms(200);
               
                LED=0;
                P34=0;
                //RE2_BUSY_H;
                delay_ms(200);                       
        }


这是逻辑分析抓 的数据,接收一个字节,P34应该马上就有信号
逻辑分析仪看到100多毫秒才有信号

woshigeshuai 发表于 2023-3-31 20:27:26

      是我自己弄错了,发现问题了。
        while(1)
        {
                //test_display();
                RE2_BUSY_L;                                                                // SS_2=0;
                RevData1=SPI_receive();         // 接收一个字节
                //DisplayHex(RevData1);                // 这个函数 占了大量时间
                RE2_BUSY_H;                                                                // SS_2=1
               
                LED=1;                                                                                // LED
                P34=1;                                                                                // 逻辑分析仪查看
                //RE2_BUSY_L;
                delay_ms(200);
               
                LED=0;
                P34=0;
                //RE2_BUSY_H;
                delay_ms(200);                       
        }

神农鼎 发表于 2023-3-31 20:28:44

:handshake
页: [1]
查看完整版本: STC8H8K64 SPI从机 接收一个字节时间超长