avr单片机模拟spi程序 主机给从机传数据,求教下主机和从机的程序

avr单片机模拟spi程序 主机给从机传数据,求教下主机和从机的程序,第1张

这个spi不用模拟,avr带这个接口,直接用它提供的代码。手册上有。

void SPI_MasterInit(void)

{

/ 设置MOSI 和SCK 为输出,其他为输入 /

DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);

/ 使能SPI 主机模式,设置时钟速率为fck/16 /

SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

}

void SPI_MasterTransmit(char cData)

{

/ 启动数据传输 /

SPDR = cData;

/ 等待传输结束 /

while(!(SPSR & (1<<SPIF)))

;

}

void SPI_SlaveInit(void)

{

/ 设置MISO 为输出,其他为输入 /

DDR_SPI = (1<<DD_MISO);

/ 使能 SPI /

SPCR = (1<<SPE);

}

char SPI_SlaveReceive(void)

{

/ 等待接收结束 /

while(!(SPSR & (1<<SPIF)))

;

/ 返回数据 /

return SPDR;

}

用传统的51单片机实现SPI通讯,需要用I/O脚来模拟SPI协议,这比较麻烦。

选用STC8系列单片机,就具有了SPI接口了 ,只需要对寄存器 *** 作就行了。方便了很多了。如下图,这是STC8系列中的4个子系列,还有其它的子系列,就不再列举了。

你读写的东西是只传一个字节就可以了吗?若是命令或寄存器地址一般都是不只两个字节,CS应该持续为低,知道写完命令或寄存器地址。不知道是不是这个问题。还有这read函数我是没看懂啊,连个MISO都没有啊

这要看你用的是硬件SPI还是软件模拟SPI,如果是硬件SPI,也就是单片机自带SPI模块,只要写相应的寄存器就可以,单片机应该有确定的SPI口,与从机(或主机)一一相连就可以了。如果是软件模拟SPI,也就是通过IO口模拟SPI时序,随便四个可以输入输出的IO口就可以。

以下的设置,有没有毛病? 是不是 0xEC 才对?

void spi_comm_init()

{

SPCTL = 0xFC; // SSIG,SPEN,DORD,MSTR,CPOL,CPHA,SPR1,SPR0。 1110,1100

以上就是关于avr单片机模拟spi程序 主机给从机传数据,求教下主机和从机的程序全部的内容,包括:avr单片机模拟spi程序 主机给从机传数据,求教下主机和从机的程序、51单片机怎样实现SPI通讯、51单片机 模拟4线SPI读写问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9328803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存