单片机/MCU论坛
登录
直播中
土老冒
11年用户
92经验值
擅长:可编程逻辑 电源/新能源 测量仪表 控制/MCU
私信
关注
[问答]
对SPI的疑惑
开启该帖子的消息推送
51单片机C语言
打算用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改成下面的条件语句就不能显示了。
这是啥原因啊,还请个位大侠指点一二,小的不胜感谢
更多回帖
rotate(-90deg);
回复
相关问答
51单片机C语言
如何在MCUXPRESSO中更改
SPI
的MODE?
2023-03-20
207
TMS570LS1227 MibSPI5和
SPI
5管脚配置问题
2021-08-17
1137
ESP32-DevKitC有多少
spi
硬件端口?
2023-04-11
169
请问为什么am335x uboot中
spi
flash识别不到?如何解决?
2018-06-21
4051
学习matlab基础视频的一个
疑惑
2016-03-05
3036
对美光内存使用的
疑惑
2013-06-22
2765
GATT的notify方式配置语句
疑惑
?
2016-04-01
3627
请问stm32
SPI
DMA传输过程该如何操作?
2018-09-05
7901
使用AD9914进行相位纠正功能的
疑惑
求解答
2023-12-05
380
新手求大神指点
2016-04-04
2836
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分