永发信息网

我想用mega168做一个spi通信 要是用软件模拟程序要怎么写呢 单片机为主机

答案:1  悬赏:0  手机版
解决时间 2021-01-09 03:35
  • 提问者网友:杀手的诗
  • 2021-01-08 12:07
我想用mega168做一个spi通信 要是用软件模拟程序要怎么写呢 单片机为主机
最佳答案
  • 五星知识达人网友:梦中风几里
  • 2021-01-08 13:23
注意 spi_delay根据你从设备的速度,你可以从5开始慢慢减小,直到为0.

void SPI1_Init()
{
SPI1_Port|=((1< SPI1_DDR|=(((1< SPI1_CS_H;
SPI1_CLK_L;
spi_delay=5
}


void SPI1_Send(unsigned char data)
{
unsigned char i;
SPI1_CS_L; //拉低片选信号
SPI1_CLK_L; //时钟空闲时为低电平
SPI1_MOSI_L;
_delay_us(spi_delay);
for(i=0;i<8;i++)
{
if(data&(0x80>>i))//高位在前,低位在前改为(0x01< SPI1_MOSI_H;
else
SPI1_MOSI_L;
_delay_us(spi_delay);
SPI1_CLK_H; //在上升沿更新数据
_delay_us(spi_delay);
SPI1_CLK_L;
}
_delay_us(spi_delay);
SPI1_CS_H; //拉高片选,完成一次数据传输
}

unsigned char SPI1_Get()
{
unsigned char i;
unsigned char data=0x00;
SPI1_CS_L; //拉低片选信号
SPI1_CLK_L; //时钟空闲时为低电平
SPI1_MOSI_L;
_delay_us(spi_delay);
for(i=0;i<8;i++)
{
if(SPI1_GetMISO)
data|=(0x80>>i);
_delay_us(spi_delay);
SPI1_CLK_H; //在上升沿更新数据
_delay_us(spi_delay);
SPI1_CLK_L;
}
_delay_us(spi_delay);
SPI1_CS_H; //拉高片选,完成一次数据传输
return data;
}追问我想的是发送大约40多个16位进制数 tx[0]-- tx[44] 通过spi发送 要怎么写呢追答已经给你底层函数(SPI1_Send ,SPI1_Get)了啊 .
你只要确定是先发你16进制高位还是低位(大端或小端),这个可以从你"从设备"的datasheet里得知.
如果是高位在前,这样写->
SPI1_Send ( ( tx[0]>>8) &0xff ) );
SPI1_Send ( tx[0] &0xff );
如果是低位在前,这样写->
SPI1_Send ( tx[0] &0xff );
SPI1_Send ( ( tx[0]>>8) &0xff ) );
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯