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
- }
復制代碼
|