⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 单片机PIC控制GSM发送SMS,然后控制汽车和提供地图
💻 C
字号:
#include "spi.h"




void init_SPI(void)//SPI  Master mode
{ 
	SSPCON1bits.SSPM3=0; 
	SSPCON1bits.SSPM2=0; 
	SSPCON1bits.SSPM1=0; 
	SSPCON1bits.SSPM0=0;//Master mode, clock = FOSC/4--->1MHZ 
	SSPCON1bits.CKP=0;// 1 = Idle state for clock is a high level   /    0 = Idle state for clock is a low level
	SSPSTATbits.SMP=1;//Sample bit-->1 = Input data sampled at end of data output time
	SSPSTATbits.CKE=1;// 1 = Output data at rise edge
	TRISCbits.TRISC5=0;//SDO-output
	TRISCbits.TRISC3=0;//SCK-output
	//TRISCbits.TRISC4=1;//SDI-input
	SSPCON1bits.SSPEN=1;//Synchronous Serial Port Enable bit
	PIR1bits.SSPIF=0;//The transmission/reception is complete (must be cleared by software)
} 


uchar SPI_read ( uchar addr)
{
    uchar data;
	SSPBUF = addr;
	if(SSPCON1bits.WCOL==1) // Write Collision Detect bit (Transmit mode only)
			{ 
			SSPCON1bits.WCOL=0; 
			/*
			Any write to the
			SSPBUF register during transmission/reception of data
			will be ignored and the write collision detect bit WCOL
			of the SSPCON1 register, will be set.
			*/
			//while(PIR1bits.SSPIF==0);
			//PIR1bits.SSPIF=0;
			} 
	//SSPBUF = addr;
	do 
	{;} 	
	while(PIR1bits.SSPIF==0);
	PIR1bits.SSPIF=0;
	if(SSPSTATbits.BF==1) 
			{ //uselessdata
			data=SSPBUF; //just do clear BF. the data is useless data
			}
	SSPBUF = 0xff;//00;//just put a any data in sspbuf
	
	if(SSPCON1bits.WCOL==1) //写冲突检测 
			{ 
			SSPCON1bits.WCOL=0; 
			} 
	do 
	{;} 
	while(PIR1bits.SSPIF==0); 
	PIR1bits.SSPIF=0; 
	if(SSPSTATbits.BF==1) 
			{ 
			data=SSPBUF; 
			} 
       return data;
}
void SPI_write(uchar data) 
{ 
     uchar uselessdata;
	SSPBUF=data; 
	do 
	{;} 
	while(PIR1bits.SSPIF==0); 
	PIR1bits.SSPIF=0; 
	if(SSPSTATbits.BF==1) 
		{ 
		uselessdata=SSPBUF; 
		} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -