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

📄 spi.c

📁 IAR 环境下MEGA16的SPI驱动程序
💻 C
字号:
/* INCLUDE参数  */

#include"spi.h"
#if hardwarespi
/************************************
*          SPI初始化
************************************/
void spi_init(void)
{
    DDRB|=(1<<PB4);                               /* SS端设置为输出 */
    DDRB|=(1<<PB5);                               /* MOSI端口设置为输出 */
    DDRB&=~(1<<PB6);                              /* MISO端口设置为输入 */
    DDRB|=(1<<PB7);                               /* SCK端口设置为输出 */
    SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); /* SPI ENABLE,MASTER MODE,Fsoc/16 */
    PORTB|=(1<<PB4);                              /* SS=1 */
}
void spi_write(unsigned char data)
{
unsigned char temp;
SPDR = data;
while(!(SPSR & (1<<SPIF)));
temp = SPDR;
temp+=1;
}
unsigned char spi_read(void)
{
SPDR = 0XFF;
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
/************************************
*        SPI转入高速模式
************************************/
void SPIHiSPD(void)
{
SPCR|=(0<<SPR1)|(0<<SPR0);                    /* SPI ENABLE,MASTER MODE,Fsoc/16 */
SPSR|=(1<<SPI2X); 
}
#else 
void spi_init(void)
{
SOFT_SPI_CS_DDR=1;
SOFT_SPI_CLK_DDR=1; 
SOFT_SPI_DI_DDR=1;

SOFT_SPI_CS=1; 
SOFT_SPI_CLK=1;
SOFT_SPI_DI=1; 
}
void spi_write(unsigned char data)
{
unsigned char i;
//SOFT_SPI_CS = 0;
SOFT_SPI_CLK = 0;
for ( i = 0 ; i < 8 ; i++){  
SOFT_SPI_CLK = 0;
SOFT_SPI_DI  = (data&0x80)>>7;; 
data = data<<1;
SOFT_SPI_CLK = 1;
}
}
unsigned char spi_read(void)
{
unsigned char i;
unsigned char _byte_ = 0x00;
//SOFT_SPI_CS = 0;
SOFT_SPI_CLK = 0;
for ( i = 0; i < 8; i++)
{
_byte_ = _byte_<<1; 
SOFT_SPI_CLK = 0;
_byte_ = _byte_|(SOFT_SPI_DO_PING&0x01);
SOFT_SPI_CLK = 1;
}
return(_byte_);
}



#endif

⌨️ 快捷键说明

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