找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3027|回复: 6
打印 上一主题 下一主题
收起左侧

请问下SPI总线通信时,为什么先要给MISO高电平?

[复制链接]
跳转到指定楼层
楼主
ID:702129 发表于 2020-3-5 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void write(uchar a)
{
        uchar i=0;
        SI=1;  ####请教下各位大神,为什么这个位置要置1,我试了下,写0是不行的。
        for(i=0;i<8;i++)                  //8位数据串行输出
        {
                SCK=0;                          //时钟 低电平
                SO=(a&0x80);         //口首先输出高位
                a=a<<1;                          //a左移一位,为下一次输出做准备
                SCK=1;                          //时钟上升沿 , 存储器读电平
                delay(5);                  //延时一小会
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:699855 发表于 2020-3-5 23:01 来自手机 | 只看该作者
si是输入?为什么写呢
回复

使用道具 举报

板凳
ID:487821 发表于 2020-3-6 00:58 | 只看该作者
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你可以看一下SPI原则,还有文中左移一位也不是你理解的为下一次输出做准备,而是最低位为0表示发送完成,最高位为识别位
回复

使用道具 举报

地板
ID:702129 发表于 2020-3-6 11:47 | 只看该作者
eastjack 发表于 2020-3-5 23:01
si是输入?为什么写呢

SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序。奇怪的是,这个SI我写1就正常可以读出数据,只要写0,就读不出任何数据。
回复

使用道具 举报

5#
ID:702129 发表于 2020-3-6 11:49 | 只看该作者
faguiq 发表于 2020-3-6 00:58
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你 ...

SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序。奇怪的是,这个SI我写1就正常可以读出数据,只要写0,就读不出任何数据。
回复

使用道具 举报

6#
ID:487821 发表于 2020-3-6 13:35 | 只看该作者
yuwei51 发表于 2020-3-6 11:49
SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序 ...

接收数据不用写SI,直接发送指令就行,还有接收数据要再发送一次,等于要接收一次数据,主机要发送两次
回复

使用道具 举报

7#
ID:702129 发表于 2020-3-6 15:02 | 只看该作者
faguiq 发表于 2020-3-6 00:58
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你 ...

确实,测试了下,这个MISO什么都不写就可以,写1也可以,就是不能写0.多谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表