关于SPI接口

lbkbox 2006-05-19 08:19:03
大家好,有谁能具体谈谈SPI接口吗?

是不是一般的单片机IO口都可以扩展成SPI接口???

实现SPI接口通讯,主机和从机各要具备什么条件??

先谢谢了
...全文
6381 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
seedundersnow 2006-06-14
  • 打赏
  • 举报
回复
就是移位寄存器
zhk1124 2006-06-10
  • 打赏
  • 举报
回复

char i;
//if(片选==0)//可以用中断模式
if(时钟线==0)//SPHA=0 主要适应未知主机传送方式
for(i=0,i<=8,i++)
{if(时钟线==0)//可能效率不高请你另想方法,可以用DO—while结构比较好
数据位送到输出线;......................//根据时序图,也可放在检测以后但有可
//能时间来不极所以放在这操作比较安全
if(时钟线==1)
从输入线读取数据位.......................
}
else //SPHA=1

for(i=0,i<=8,i++)
{if(时钟线==1)//可能效率不高请你另想方法,可以用DO—while结构比较好
数据位送到输出线;..............
if(时钟线==0)
从输入线读取数据位;..............
}

lbkbox 2006-06-05
  • 打赏
  • 举报
回复
其实我要的就是从机的程序
zhk1124 2006-06-04
  • 打赏
  • 举报
回复
你看一下SPI的时序图,从机是被选中后再根时钟线电平来决定如何对输入输出线的操作,那么主机方更应该知道如何操作了,以上只是主机方的4个基本子程序,再写几个从机的子程序就完全可以实现你想要的功能。如果时间允许,只要你想要的不管什么样的端口控制功能,在计算机上都能实现,如果你需要还可以实现两个51主从转换,不过作为一个开发人员难的不是功能的实现而是如何制定一个好的方案。也许你实现了以上的功能,可能这是一个最不好的方案。
zhk1124 2006-05-28
  • 打赏
  • 举报
回复
SPI是莫托罗拉公司串行外围设备通迅接口,是一种同步串行接口

;从SPISO线上接收8位数据并放入寄存器R0中
SPIIN: SETB P1.1 ;使P1.1(时钟)输出为1
CLR P1.2 ;选择从机,(此线不在三线标准内)
MOV R1, #08H ;置循环次数
SPIIN1:CLR P1.1 ;使P1.1(时钟)输出为0
NOP ;延时
NOP
MOV C, P1.3 ;从机输出SPISO送进位C
RLC A ;左移至累加器ACC
STEB P1.1 ;使P1.0输出为1
DJNZ R1, SPIIN1 ;是8次吗?
MOV R0, A ;8位送入R0
RET

;将MCS51寄存器R0中的数据传送至SPISI线上
SPIOUT: SETB P1.1 ;使P1.1(时钟)输出为1
CLR P1.2 ;选择从机,(此线不在三线标准内)
MOV A, R0 ;8位数据送入累加器ACC
SPIOUT1:CLR P1.1 ;使P1.1(时钟)输出为0
NOP ;延时
NOP
RLC A ;左移累加器ACC最高位至C
MOV P1.0, C ;进位C送从机输入SPISI线上
STEB P1.1 ;使P1.1(时钟)输出为1
DJNZ R1, SPIOUT1 ;是8次吗?
RET



;将MCS51寄存器R0中的数据传送至SPISI线上,同是从SPISO线上接收8位数据

SPIIO: SETB P1.1 ;使P1.1(时钟)输出为1
CLR P1.2 ;选择从机,(此线不在三线标准内)
MOV R1, #08H ;置循环次数
MOV A, R0 ;8位数据送入累加器ACC
SPIIO1: CLR P1.1 ;使P1.1(时钟)输出为0
NOP ;延时
NOP
MOV C, P1.3 ;从机输出SPISO送进位C
RLC A ;左移累加器ACC最高位至C
MOV P1.0, C ;进位C送从机输入SPISI线上
STEB P1.1 ;使P1.1(时钟)输出为1
DJNZ R1, SPIIO1
RET



ObjLinking 2006-05-28
  • 打赏
  • 举报
回复
可以用GPIO模拟SPI的,不过我没有试过
我只见过GPIO模拟I2C总线的例子
lbkbox 2006-05-28
  • 打赏
  • 举报
回复
谢谢:zhk1124(连锁闪电)
对于你的这个例子,如果主机和从机只要有一个硬件SPI功能的话是可行的可以正确性接收和发送数据,但如果是两个CPU都没有硬件SPI功能的话比如两个51单片机,你的例子好象不一定会很好传输数据,因为传输时钟根本没有起到作用,数据发送一方,它只管发送出去,每一位数据对方是不是接收到了,这是不知道的。。不知我说错了没有。
我看到的网上的所谓模拟SPI都是主机和从机有一方是有硬件SPI功能,只要有一方的硬年有SPI功能,模拟SPI是简单的。
我想说的就是两个都没有SPI硬件功能的单片机用普通的三根或四个或五要也行,进行模拟SPI。
chenzhiwei021 2006-05-26
  • 打赏
  • 举报
回复
应该不是,SPI是一个协议吧!至于要具有什么条件吗?主机要能够控制三根线就行了,从机要有ISP接口。具体见Datasheet
integrity9 2006-05-20
  • 打赏
  • 举报
回复
看看datasheet,看看是否有MISO,MOSI,SCK,SS
ObjLinking 2006-05-20
  • 打赏
  • 举报
回复
就是一般的3wire,clk,din,dout

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧