PIC单片机模拟SPI的问题;我用PIC16F873模拟SPI。硬件仿真数据已经传输成功,但是在硬件里自己跑就有问题了
unsignedchari;RC2=1;//CSRC3=0;//SCKnop();nop();RC2=0;//拉低开始读/////————————这是程序的一小段。我在网...
unsigned char i;
RC2=1; //CS
RC3=0; //SCK
nop();
nop();
RC2=0;//拉低开始读 /////————————这是程序的一小段。我在网上看资料说PIC如果连续的运用按位输出的话就会导致错误。所以我怀疑我这个模拟SPI在仿真上好使 自己跑却不好使 跟这个有关 。有模拟过SPI的么用PIC 求指点。另外 我知道PIC有SPI通信 用自带的通信程序就不用了 展开
RC2=1; //CS
RC3=0; //SCK
nop();
nop();
RC2=0;//拉低开始读 /////————————这是程序的一小段。我在网上看资料说PIC如果连续的运用按位输出的话就会导致错误。所以我怀疑我这个模拟SPI在仿真上好使 自己跑却不好使 跟这个有关 。有模拟过SPI的么用PIC 求指点。另外 我知道PIC有SPI通信 用自带的通信程序就不用了 展开
2个回答
展开全部
完全可以用IO口模拟SPI、IIC和异步串行通信。
你的程序中:
RC2=1; //CS
C3=0; //SCK要改为: RC2=1; //CS
NOP();
RC3=0; //SCK
这是因为PIC单片机对端口操作时是按“读-修改-写”的顺序,这个说来有点复杂,可参阅参考资料。
还有,要根据通信对象的最大SPI速率来确定每一位的延时时间,即每位间用几个NOP()语句。
你的程序中:
RC2=1; //CS
C3=0; //SCK要改为: RC2=1; //CS
NOP();
RC3=0; //SCK
这是因为PIC单片机对端口操作时是按“读-修改-写”的顺序,这个说来有点复杂,可参阅参考资料。
还有,要根据通信对象的最大SPI速率来确定每一位的延时时间,即每位间用几个NOP()语句。
参考资料: 北航《PIC16系列单片机C程序设计与PROTEUS仿真》
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询