×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-28 发布时间:
|

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

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

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

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

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430F5529 上手小例程2