AVR單片機(jī)SPI簡(jiǎn)單應(yīng)用
主機(jī)程序
#include "iom16v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------------------
函數(shù)名稱: void delay(uchar Da
函數(shù)功能: 延時(shí)函數(shù)
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------*/
void delay(uchar Da
{
uchar i;
while(Da
for(i=125;i>0;i--);
}
/*-----------------------------------------
函數(shù)名稱: void SPI_MasterInit()
函數(shù)功能: 主機(jī)初始化函數(shù)
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------*/
void SPI_MasterInit()
{
DDRB|=BIT(5);
DDRB|=BIT(7);
SPCR|=BIT(SPE);
SPCR|=BIT(MSTR);
}
/*-----------------------------------------
函數(shù)名稱: void SPI_MasterTransmit(uchar Da
函數(shù)功能: 主機(jī)發(fā)送數(shù)據(jù)
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------*/
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);
}
}
}
從機(jī)程序
#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);
}
}