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

控制/MCU

1814人已加入

描述

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

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

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

C51程序

#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地址开始的语音

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分