AVR单片机SPI简单应用
扫描二维码
随时随地手机看文章
主机程序
#include "iom16v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------------------
函数名称: void delay(uchar Da
函数功能: 延时函数
参 数:
返 回 值: 无
-----------------------------------------*/
void delay(uchar Da
{
uchar i;
while(Da
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 Da
函数功能: 主机发送数据
参 数:
返 回 值: 无
-----------------------------------------*/
void SPI_MasterTransmit(uchar Da
{
SPDR=Da
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 Da
{
uchar i;
while(Da
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);
}
}