java怎么拦截某个对象
429
2022-10-27
软件模拟SPI接口的实现方法过程详解
93C46存储器SPI总线的工作原理
软件模拟SPI接口的实现方法
上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。
读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。
写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。
写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。
写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。
下面介绍用C51模拟SPI的子程序。
//首先定义好I/O口
sbitSDO=P1^0;
sbitSDI=P1^1;
sbitSCK=P1^2;
sbitSCS=P1^3;
sbitACC_7=ACC^7;
{
unsignedchari;
unsignedintdatal6;
add&=0x3f;/*6位地址*/
add|=0x80;/*读操作码l0*/
SDO=1;/*发送1为起始位*/
SCK=0;
SCK=1;
for(i=0;<8;i++)/*发送操作码和地址*/
{
if(add&0x80==1)
SDO=1;
else
SDO=0;
SCK=0;/*从设备上升沿接收数据*/
SCK=1;
add<<= 1;
}
SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/
SCK=0;
datal6<<= 1;/*读16位数据*/
for(i=0;<16;i++)
{
SCK=1;
_nop_();
if(SDI==1)
datal6|=0x01;
SCK=0;
datal6< < =1;
}
returndatal6;
}
对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~