|
Slave :
include <iom16v.h>
#include <macros.h>
#include <stdio.h>
void SPI_Init(void)
{
/* MISO 配置為輸出 */
DDRB = 1 << PORTB6;
PORTB = 0x01;
/* SPI 倍速 */
SPSR |= 1 << SPI2X;
/* 使能 SPI、MSB、從機模式、時鐘極性、8 分頻 */
SPCR = 1 << SPE | 1 << SPR0;
}
unsigned char SPI_Recv(void)
{
/* 等待接收標志 */
while (!(SPSR & (1 << SPIF)));
return SPDR;
}
void delay(int cnt)
{
while (--cnt);
}
void main(void)
{
unsigned char dat = 0;
SPI_Init();
DDRC = 0xFF;
while (1)
{
dat = SPI_Recv();
SPSR &= ~(1 << SPIF);
PORTC = 1 << dat;
}
}
Master :
#include <iom16v.h>
#include <macros.h>
#include <stdio.h>
void SPI_Init(void)
{
/* SCK、MOSI、SS 配置為輸出 */
DDRB = 1 << PORTB7 | 1 << PORTB5 | 1 << PORTB4;
PORTB = 0x00;
/* SPI 倍速 */
SPSR |= 1 << SPI2X;
/* 使能 SPI、MSB、主機模式、時鐘極性、8 分頻 */
SPCR = 1 << SPE | 1 << MSTR | 1<< SPR0;
}
void SPI_Send(unsigned char dat)
{
SPDR = dat;
/* 等待發送結束 */
while (!(SPSR & (1 << SPIF)));
}
void delay(int cnt)
{
int i;
for ( ; cnt > 0; cnt--)
{
for ( i = 0; i < 1000; i++ );
}
}
void main(void)
{
unsigned char i = 0;
SPI_Init();
while (1)
{
for ( i = 0; i < 8; i++ )
{
SPI_Send(i);
delay(400);
}
}
}
|
評分
-
查看全部評分
|