spi发送程序:
- # include <reg52.h>//头文件
- # include <intrins.h>//头文件
- # define uchar unsigned char
- # define uint unsigned int
- sbit SCK = P1^0;//位定义时钟
- //sbit CS = P1^1;//位定义片选(使能) 此项目可以不使用
- sbit SDI = P1^2;//位定义Input
- sbit SDO = P1^3;//位定义Output
- /*-----函数声明-----*/
- void delay5us();
- void delay();
- void SpiSend(uchar dat1);
- uchar SpiReceive();
- /*-----主函数(主机)-----*//
- void main()
- {
- unsigned char i;
- P2 = 8;
- while(1)
- {
- for(i = 0; i<10 ;i++)
- {
- P2 = i;
- SpiSend(i);
- delay();
- }
- }
- ;//空语句
- }
-
- /*-----5微秒延时函数-----*/
- void delay5us()
- {
- _nop_();
- }
- /*-----延时函数-----*/
- void delay()
- {
- uchar i=1000,j=1000;
- while(i--)
- while(j--);
- }
- /*-----CPHA=0;CPOL=1 模式2-----*/
- /*-----SPI发送函数-----*/
- /*-----上升沿发送-----*/
- void SpiSend(uchar dat1)
- {
- uchar i;
- for (i=0; i<8; ++i)//8bit,一位一位写
- {
- SCK = 0;
- if (dat1 & 0x80)//判断当前最高位为1还是0
- {
- SDO = 1;
- }
- else
- {
- SDO = 0;
- }
- SCK = 1;//上升沿发送数据
- dat1 <<= 1;
- delay5us();
- }
- }
- /*-----SPI接收函数-----*/
- /*-----下降沿接收-----*/
- uchar SpiReceive()
- {
- uchar i, dat0;
- dat0 = 0x00;//dat0初始化
- for (i=0; i<8; ++i)//8bit,一位一位读
- {
- dat0<<=1;
- while(SCK == 1);
- while(SCK == 0);//下降沿读取数据
- dat0 |= SDI;
- }
- return (dat0);//收到数据(返回值)dat0
- }
复制代码
spi接受程序:
- # include <reg52.h>//头文件
- # include <intrins.h>//头文件
- # define uchar unsigned char
- # define uint unsigned int
- sbit SCK = P1^0;//位定义时钟
- //sbit CS = P1^1;//位定义片选(使能) 此项目可以不使用
- sbit SDI = P1^2;//位定义Input
- sbit SDO = P1^3;//位定义Output
- /*-----函数声明-----*/
- void delay5us();
- void SpiSend(uchar dat1);
- uchar SpiReceive();
- /*-----主函数(从机)-----*/
- void main()
- {
- //UARTInit();
- while(1)
- {
- P2 = SpiReceive();// 循环接收数据
- }
- ;//空语句
- }
-
- /*-----5微秒延时函数-----*/
- void delay5us()
- {
- _nop_();
- }
- /*-----CPHA=0;CPOL=1 模式2-----*/
- /*-----SPI发送函数-----*/
- /*-----上升沿发送-----*/
- void SpiSend(uchar dat1)
- {
- uchar i;
- for (i=0; i<8; ++i)//8bit,一位一位写
- {
- SCK = 0;
- if (dat1 & 0x80)//判断当前最高位为1还是0
- {
- SDO = 1;
- }
- else
- {
- SDO = 0;
- }
- SCK = 1;//上升沿发送数据
- dat1 <<= 1;
- delay5us();
- }
- }
- /*-----SPI接收函数-----*/
- /*-----下降沿接收-----*/
- uchar SpiReceive()
- {
- uchar i, dat0;
- dat0 = 0x00;//dat0初始化
- for (i=0; i<8; ++i)//8bit,一位一位读
- {
- dat0<<=1;
- while(SCK == 1);
- while(SCK == 0);//下降沿读取数据
- dat0 |= SDI;
- }
- return (dat0);//收到数据(返回值)dat0
- }
复制代码
|