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

SPI总线单片机发送数据的C51程序

发布时间:2020-06-02 发布时间:
|


关于spi协议见:http://hi.baidu.com/gilbertjuly/blog/item/0be222eeac9abae5cf1b3e38.html
ISD4002芯片资料参考:http://download.csdn.net/source/1208805
以下是单片机spi通信的通用程序,在不同晶振情况下可能需调整延时。这里单片机晶振为11.0592MHz。
_nop_();语句指延迟一个机器周期,约1us左右。写1bit约10us,spi传输率约100kbit/s。
程序中只用了MOSI,/SS,SCLK信号,没有用MISO信号。
#include
#include
#include
#include
#include

sbit ss=P1^0;
sbit mosi=P1^1;
sbit sclk=P1^4;

void delay_ms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
i=112;
while(i--);
}
}

void spi_mosi(unsigned char spi_data)
{//发送一个字节数据
unsigned char BitCnt;
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_();
}

void play_isd4002(unsigned int addr)
{
unsigned char addr_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;    
}

void stop_isd4002()
{
ss=0;
spi_mosi(0x70);//停止命令
ss=1;
delay_ms(50);
}

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

关键字:SPI总线  单片机  发送数据  C51程序 

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

热门文章 更多
STM32中断向量表的位置.重定向