单片机spi通信的通用程序分享

单片机spi通信的通用程序分享,第1张

以下是单片机spi通信的通用程序,在不同晶振情况下可能需调整延时。这里单片机晶振为11.0592MHz。

_nop_();语句指延迟一个机器周期,约1us左右。写1bit约10us,spi传输率约100kbit/s。

程序中只用了MOSI,/SS,SCLK信号,没有用MISO信号。#include

单片机spi通信的通用程序分享,单片机spi通信的通用程序分享,第2张

#include

#include

#include

#include

sbitss=P1^0;

sbitmosi=P1^1;

sbitsclk=P1^4;

voiddelay_ms(unsignedintms)

{

unsignedchari;

while(ms--)

{

i=112;

while(i--);

}

}

voidspi_mosi(unsignedcharspi_data)

{//发送一个字节数据

unsignedcharBitCnt;

mosi=0;

sclk=0;

for(BitCnt=0;BitCnt《8;BitCnt++)

{

sclk=0;

_nop_();

if((spi_data》》BitCnt)&0x01)

mosi=1;

else

mosi=0;

_nop_();

_nop_();

_nop_();

sclk=1;

_nop_();

_nop_();

_nop_();

}

_nop_();

_nop_();

_nop_();

}

voidplay_isd4002(unsignedintaddr)

{

unsignedcharaddr_l,addr_h;

addr_l=addr;

addr_h=addr》》8;

addr_h=addr_h|0xe0;

ss=0;

spi_mosi(0x20);

ss=1;

delay_ms(50);

ss=0;

spi_mosi(addr_l);//传低位

spi_mosi(addr_h);//传高位

ss=1;

delay_ms(10);

ss=0;

spi_mosi(0xf0);

ss=1;

}

voidstop_isd4002()

{

ss=0;

spi_mosi(0x70);//停止命令

ss=1;

delay_ms(50);

}

voidmain()

{

play_isd4002(0x86);//播放86地址开始的语音

}

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

原文地址: https://outofmemory.cn/dianzi/2585467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-08
下一篇 2022-08-08

发表评论

登录后才能评论

评论列表(0条)

保存