顶,帮你将内容贴出:
SPI主机.C
//**********主机程序*****************//
#include"STC_NEW_8051.h"
#define SPIF (SPSTAT&0X80) //查询SPIF是否置位,SPIF不能进行位操作
//通信端口设置
sbit SCLK = P1^7;
sbit MISO = P1^6; //主器件输入
sbit MOSI = P1^5; //主器件输出
sbit SS = P1^4; //从机选择信号
unsigned char UART_SendData=0;
unsigned char UART_RecData=0;
unsigned char SPI_RecData=0;
void Init_System(); //系统初始化
void Init_UART(); //串口初始化
void Init_SPI(); //SPI初始化
unsigned char SPI_SendByte(unsigned char SPI_SendData); //SPI发送一个字节数据
void UART_SendByte(unsigned char UART_Send); //串口发送一个字节数据
void main()
{
Init_System();
while(1)
{
while(!RI);
RI=0;
UART_RecData=SBUF;
SPI_SendByte(UART_RecData);
UART_SendData=SPI_SendByte(UART_RecData);
UART_SendByte(UART_SendData);
}
}
void Init_System()
{
Init_UART(); //串口初始化
Init_SPI(); //SPI初始化
}
void Init_UART()
{
TMOD=0X20; //定时器1作为波特率发生器
AUXR=0x00; //定时器1进行12分频
TH1=0XFD;
TL1=0XFD; //9600bps
SCON=0X50;
PCON=0X00;
TR1=1;
}
void Init_SPI()
{
SPCTL=0XFD; //忽略SS,设置为主机模式
SPSTAT=0XC0; //清除状态寄存器
SPDAT=0; //初始化数据寄存器
}
unsigned char SPI_SendByte(unsigned char SPI_SendData)
{
SPDAT=SPI_SendData;
while(!SPIF);
SPSTAT=0XC0;
SPI_RecData=SPDAT;
return SPI_RecData;
}
void UART_SendByte(unsigned char UART_Send)
{
SBUF=UART_Send;
while(!TI);
TI=0;
}
SPI从机.C
#include"STC_NEW_8051.h"
#define SPIF (SPSTAT&0X80)
sbit SCLK = P1^7;
sbit MISO = P1^6;
sbit MOSI = P1^5;
sbit SS = P1^4;
unsigned char SPI_Buffer=0;
void Init_SPI();
void main()
{
Init_SPI();
while(1);
}
void Init_SPI()
{
SPCTL=0XED;//忽略SS,设置为从机模式
SPSTAT=0XC0; //清除状态寄存器
SPDAT=0; //初始化数据寄存器
IE2=0X20; //打开SPI中断
EA=1;
}
void SPI_Rec() interrupt 9
{
SPSTAT=0XC0;
SPI_Buffer=SPDAT;
SPDAT=SPI_Buffer;
}
|