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

AVR单片机SPI简单应用

发布时间:2020-06-02 发布时间:
|
主机程序

#include "iom16v.h"

#include "macros.h"

#define uchar unsigned char

#define uint unsigned int

/*-----------------------------------------

函数名称: void delay(uchar Data)

函数功能: 延时函数

参    数:

返 回 值: 无

-----------------------------------------*/

void delay(uchar Data)

{

 uchar i;

 while(Data--)

 for(i=125;i>0;i--);

}

/*-----------------------------------------

函数名称: void SPI_MasterInit()

函数功能: 主机初始化函数

参    数:

返 回 值: 无

-----------------------------------------*/

void SPI_MasterInit()

{

 

 DDRB|=BIT(5);

 DDRB|=BIT(7);

 

 SPCR|=BIT(SPE);

 SPCR|=BIT(MSTR);

}

/*-----------------------------------------

函数名称: void SPI_MasterTransmit(uchar Data)

函数功能: 主机发送数据

参    数:

返 回 值: 无

-----------------------------------------*/

void SPI_MasterTransmit(uchar Data)

{

 SPDR=Data;

 while(!(SPSR&BIT(SPIF)));

}

void main()

{

 uchar i,d;

 SPI_MasterInit();

 while(1)

 {

  d=0xfe;

  for(i=0;i<8;i++)

  {

   SPI_MasterTransmit(d);

   d=d<<1;

   delay(100);

  }

 }

}

 

从机程序

#include "iom16v.h"

#include "macros.h"

#define uchar unsigned char

#define uint unsigned int

void delay(uchar Data)

{

 uchar i;

 while(Data--)

 for(i=125;i>0;i--);

}

void SPI_SlaveInit()

{

 DDRB&=~BIT(5);

 DDRB&=~BIT(7);

 

 SPCR|=BIT(SPE);

}

uchar SPI_SlaveTransmit()

{

 while(!(SPSR&BIT(SPIF)));

 return SPDR;

}

void main()

{

 DDRC=0XFF;

 PORTC=0XFF;

 SPI_SlaveInit();

 while(1)

 {

  PORTC=SPI_SlaveTransmit();

  delay(50);

 }

}

关键字:avr单片机  SPI 

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

热门文章 更多
浅谈AVR中定时器几种工作模式