C语言程序>>SPI
来源:互联网 发布:双端面磨床 知乎 编辑:程序博客网 时间:2024/05/29 19:08
#define _V_SPI_
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SPI_PIN PINB
#define DS1302_MOSI 5 //PB5 MOSI要串10K电阻到MISO,然后把MISO跟DS1302_IO脚短接在一起的
#define DS1302_MISO 6 //PB6 MISO跟DS1302_IO脚短接在一起的---DS1302 pin6
#define DS1302_SCK 7 //PB7 SCK----DS1302 pin7
//初始化SPI接口
void init_SPI(void)
{
SPI_PORT |= (1<<PB4);
SPI_PORT &= ~(1<<DS1302_SCK)&~(1<<DS1302_MOSI)&~(1<<DS1302_MISO);
SPI_DDR |=(1<<PB4)|(1<<DS1302_SCK)|(1<<DS1302_MOSI);
SPI_DDR &=~(1<<DS1302_MISO);
#ifndef _V_SPI_
SPCR = (1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR1)|(1<<SPR0);
// 使能SPI接口,主机模式,LSB低位在先,模式0,16分频,SPI时钟约1MHz
#endif
}
void un_init_SPI(void)
{
SPI_DDR |=(1<<DS1302_MISO);
}
char spi_rw(char wdata)
{
#ifndef _V_SPI_
SPDR = wdata;// 传送数据到SPI寄存器
loop_until_bit_is_set(SPSR,SPIF);// 等待数据传送完?
return(SPDR);// 读取数据
#else
char rdata = 0;
char i = 0;
for(i = 0;i < 8;i ++)
{
SPI_PORT &= ~(1 << DS1302_SCK);//时钟拉低
if(wdata & 0x01)
{
SPI_PORT |= (1 << DS1302_MOSI);
}
else
{
SPI_PORT &= ~(1 << DS1302_MOSI);
}
wdata >>= 1;//右移一位
rdata >>= 1;//右移一位
if(SPI_PIN & (1 << DS1302_MISO))
{
rdata |= 0x80;
}
SPI_PORT |= (1 << DS1302_SCK);//时钟拉高,产生上升沿
}
SPI_PORT &= ~(1 << DS1302_SCK);//时钟拉低
return(rdata);// 读取数据
#endif
}
#ifndef _SPI_
#define _SPI_
void init_SPI(void);
char spi_rw(char wdata);
void un_init_SPI(void);
#endif
- C语言程序>>SPI
- 同步串口spi的c语言编程
- spi.c
- 单片机:C语言实验SPI通信-读写操作
- 用于MAX7456随屏显示器SPI接口的C程序
- c语言图形程序
- C语言-预处理程序
- C语言-预处理程序
- C语言-预处理程序
- C语言-预处理程序
- C语言小程序
- C语言实例程序
- C语言-预处理程序
- 一个c语言程序
- c语言程序改错
- C语言倒计时程序
- C语言程序基础
- 时钟C语言程序
- s3c2440 与LCD的浅析
- C语言程序>>USART
- try catch finally与return的执行顺序
- Arrays Question
- pkg-config的使用
- C语言程序>>SPI
- android 文件
- 12.20
- Android应用程序消息处理机制(Looper、Handler)分析
- python装饰器学习总结
- C语言程序>>LCD1602
- Lenix固定长度内存分配源代码分析(草稿)
- 链表 链栈 链队列的建立
- [Java Path Finder][JPF学习笔记][7]JPF输出详细程度设置