单片机/MCU论坛
直播中

土老冒

11年用户 92经验值
擅长:可编程逻辑 电源/新能源 测量仪表 控制/MCU
私信 关注
[问答]

对SPI的疑惑

打算用STC12C5A60S2的SPI驱动2个支持spi通讯的MAX7221,虽然根据手册2片可以通过连极来达到向两片写入数据,因为电路板2块芯片离开的位置比较远就打算通过其他两个端口模拟SS片选信号,结果在驱动部分如果写了其他的判断类的就死活不能正常显示,只有强制对某个片选控制才能正常显示,也就是说只能控制一片芯片。用时序测试器测试端口的时序进行比较,没发现有太大的差别,但是就是不显示。下面我把程序附上(初始化部分我就不贴出来了,只是贴出向MAX7221写显示数据的部分)
/************************************************************************
*        函数功能        :SPI写入一个字节                                                                                *
*        函数名称        :SPI_Write(uchar addr.uchar dat)                                                *
*        输入                :写入地址,写入数据                                                                        *
*        输出                :无                                                                                                        *
*************************************************************************/
//*======================只针对具有内置SPI类芯片==========================
void SPI_Write(uchar addr,uchar dat)
{
       
        SPI_SS = 0;                                        //拉低SS端口
//        if(MAX7221_Select==0){
//                SPI_SS=0;
//        }
/*        switch (MAX7221_Select){
                case 0:
                        SPI_SS =0;                        //选择板载MAX7221
                        break;
                case 1:
                        SPI_CS1 =0;                        //选择MAX7221_No1
                        break;
                case 2:
                        SPI_CS2 =0;                        //选择MAX7221_No2
                        break;
                default:
                        break;
        }*/
        SPSTAT = 0xC0;                                //清零SPI中断标志
        SPDAT = addr;                                //地址写入SPI发送缓冲器
        while(!(SPSTAT & 0x80));        //查询数据是否发送完毕
        SPSTAT = 0xC0;                                //清除SPI中断标志
        SPDAT = dat;                                //数据写入SPI发送缓冲器
        while(!(SPSTAT & 0x80));        //判断数据是否发送完毕
        SPI_SS = 1;                                        //拉高SS端口
//        SPI_CS1 =1;
//        SPI_CS2 =1;
}
红色字体部分是可以正常显示,如果将SPI_SS改成下面的条件语句就不能显示了。
这是啥原因啊,还请个位大侠指点一二,小的不胜感谢

  • 判断后SS
  • Snap2.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分