
STC89C52RC
单片机是没有硬件SPI功能的,是需要模拟的。普通的I/O即可模拟的。给你一个参考程序:\x0d\x0a//-----------------------函数声明,变量定义-------------------------------------------------------- \x0d\x0a#include \x0d\x0a#include \x0d\x0asbit SCK=P1^0// 将p1.0口模拟时钟输出 \x0d\x0asbit MOSI=P1^1// 将p1.1口模拟主机输出 \x0d\x0asbit MISO=P1^2// 将p1.1口模拟主机输入 \x0d\x0asbit SS1=P1^3// 将p1.1口模拟片选 \x0d\x0a#define delayNOP(){_nop_()_nop_()_nop_()_nop_()}\x0d\x0a//-------------------------------------------------------------------------------------------------- \x0d\x0a// 函数名称: SPISendByte \x0d\x0a// 入口参数: ch \x0d\x0a// 函数功能: 发送一个
字节 \x0d\x0a//-------------------------------------------------------------------------------------------------- \x0d\x0avoid SPISendByte(unsigned char ch) \x0d\x0a{ \x0d\x0aunsigned char idata n=8// 向SDA上发送一位
数据字节,共八位 \x0d\x0aSCK = 1 //时钟置高 \x0d\x0aSS1 = 0 //选择从机 \x0d\x0awhile(n--) \x0d\x0a{ \x0d\x0adelayNOP()\x0d\x0aSCK = 0 //时钟置低 \x0d\x0aif((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1 \x0d\x0a{ \x0d\x0aMOSI = 1// 传送位1 \x0d\x0a} \x0d\x0aelse\x0d\x0a{ \x0d\x0aMOSI = 0// 否则传送位0 \x0d\x0a} \x0d\x0adelayNOP()\x0d\x0ach = ch
回答于 2022-11-171.定义三个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.还需要加入起始停止同步协议,可根据需要进行完善
评论列表(0条)