当前位置: 技术问答>linux和unix
基于SPI串行通信的程序设计:
来源: 互联网 发布时间:2016-06-01
本文导语: ****************************************************************************************************** 基于SPI串行通信的程序设计: 主机的数据从主机的MOSI输出,从从机的MOSI输入;从机的数据从从机的MISO输出,从主机的MISO输入。 *******...
******************************************************************************************************
基于SPI串行通信的程序设计:
主机的数据从主机的MOSI输出,从从机的MOSI输入;从机的数据从从机的MISO输出,从主机的MISO输入。
******************************************************************************************************
SPI_Send_data:
SETB SCK ;使能时钟输出为1
CLR CS ;选择为从机
MOV R1,#08H ;设置循环次数
MOV A,R0 ;8位数据送累加器ACC
Send _next:
CLR SCK ;使能时钟输出为0
NOP ;延时
NOP ;延时
MOV C,MISO ;从机的数据送主机的MISO输入
RLC A ;左移ACC最高位至C
MOV MOSI,C ;主机的数据送从机的MOSI输入
SETB SCK ;使能时钟输出为1
DJNZ R1, Send _next ;判断是否循环8次(8 位数据)
SETB CS
RET
******************************************************************************************************
* 将以上的汇编程序,改写为以下的C语言程序:请问改写成C语言的程序正确否?
******************************************************************************************************
#include
unsigned char bitcount;
unsigned char spi_data;
void spi_send_data (void )
{
bitcount = 0;
spi_data = 0;
spi_sck = 1; //使能时钟输出为1
spi_ssn = 0; //选择为从机
spi_miso =1;
for (; bitcount
基于SPI串行通信的程序设计:
主机的数据从主机的MOSI输出,从从机的MOSI输入;从机的数据从从机的MISO输出,从主机的MISO输入。
******************************************************************************************************
SPI_Send_data:
SETB SCK ;使能时钟输出为1
CLR CS ;选择为从机
MOV R1,#08H ;设置循环次数
MOV A,R0 ;8位数据送累加器ACC
Send _next:
CLR SCK ;使能时钟输出为0
NOP ;延时
NOP ;延时
MOV C,MISO ;从机的数据送主机的MISO输入
RLC A ;左移ACC最高位至C
MOV MOSI,C ;主机的数据送从机的MOSI输入
SETB SCK ;使能时钟输出为1
DJNZ R1, Send _next ;判断是否循环8次(8 位数据)
SETB CS
RET
******************************************************************************************************
* 将以上的汇编程序,改写为以下的C语言程序:请问改写成C语言的程序正确否?
******************************************************************************************************
#include
unsigned char bitcount;
unsigned char spi_data;
void spi_send_data (void )
{
bitcount = 0;
spi_data = 0;
spi_sck = 1; //使能时钟输出为1
spi_ssn = 0; //选择为从机
spi_miso =1;
for (; bitcount