求两个51单片机模拟SPI通信程序,主机和从机的程序!!

求两个51单片机模拟SPI通信程序,主机和从机的程序!!,第1张

1.定义三个gpio: p0-sclk, p1-sdi, p2-sdo;p0用于模拟spi的clock,p1用于接收数据,p2用于f发送数据;硬件上单片机A的p0接悉轮单片机B的p0,A的p1接B的p2,A的p2接B的p12.发送程序:clock拉低,sdo输出0或1(数据),延时一定时间,clock拉高,延时一定时间,薯陆禅这样A就发送一位数据到B,循环8次就发送一个字节数据3.接收程序:检测clock状态,如果为低,就读取sdi,直到clock拉高,结束该次输入,重复8次,读取数尘一个字节注意:1。clock空闲状态为高,发送数据就拉低;2.还需要加入起始停止同步协议,可根据需要进行完善

这个扰猛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

}

SPI总线为四根线,为MISO,MOSI,SCK,NSS,但在实际应用中可减少。就比御前信如你的情况,但是最少需要两个镇轮线悔宴,SCK是必须的,另一根为MOSI其为主机输出,从机输入。


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

原文地址: http://outofmemory.cn/yw/12340716.html

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

发表评论

登录后才能评论

评论列表(0条)

保存