打印
[AVR单片机]

大神们求助!SPI怎么配置呀?为什么这样配置不行

[复制链接]
572|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


要求单片机A的按钮控制单片机B的LED亮灭


发送端
/*
* RX.c
*
* Created: 2016/3/19 15:24:34
* Author: Jon.Wei
*/

#include <io.h>
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char
uchar key;


void SPI_MasterInit(void)
{
/* 设置 MOSI 和 SCK 为输出,其他为输入 */
DDRB = (1<<5)|(1<<7);
/* 使能 SPI 主机模式,设置时钟速率为 fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

void SPI_MasterTransmit(uchar cData)
{
/* 启动数据传输 */
SPDR = cData;
/* 等待传输结束 */
while(!(SPSR & (1<<SPIF)))
;
}


void main(void)
{
   DDRA=0x00;
   PORTA=0xff;
   SPI_MasterInit();



while (1)
    {
      key=PINA.0;
      SPI_MasterTransmit(key);
      delay_ms(200);
    }
}




接收端

/*
* tx.c
*
* Created: 2016/3/19 15:38:06
* Author: Jon.Wei
*/


#include <io.h>
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char

void SPI_SlaveInit(void)
{
/* 设置 MISO 为输出,其他为输入 */
DDRB = (1<<6);
/* 使能 SPI */
SPCR = (1<<SPE);
}



uchar SPI_SlaveReceive(void)
{
/* 等待接收结束 */
while(!(SPSR & (1<<SPIF)))
;
/* 返回数据 */
return SPDR;
}



void main(void)
{
  DDRC=0xff;
  PORTC=0xff;
  SPI_SlaveInit();
while (1)
    {  

       PORTC.0=SPI_SlaveReceive();
       delay_ms(100);

    }
}












相关帖子

沙发
xyz549040622| | 2016-3-19 19:14 | 只看该作者
你的SPI总线的SCLK就没连上,怎么进行SPI通讯呢?一定要用SPI通讯么,太浪费了吧?

使用特权

评论回复
板凳
wzz709229225|  楼主 | 2016-3-20 12:28 | 只看该作者
谢谢你了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝