对51系列单片机SPI总线的认识
来源:互联网 发布:李杰灵的淘宝店 编辑:程序博客网 时间:2024/06/09 20:19
* UART、 I2C 和 SPI 是单片机系统中最常用的三种通信协议。*
1、SPI简介:
SPI 是一种高速的、全双工、同步通信总线,标准的 SPI 也仅仅使用 4 个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。 SPI 通信原理比 I2C要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是 4 根线,分别是 SSEL( 片选,也写作 SCS)、 SCLK( 时钟,也写作 SCK)、 MOSI( 主机输出从机输入Master Output/Slave Input) 和 MISO( 主机输入从机输出 Master Input/Slave Output)。 SSEL:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。 SCLK:时钟信号,由主机产生,和 I2C通信的 SCL 有点类似。 MOSI:主机给从机发送指令或者数据的通道。 MISO:主机读取从机的状态或者数据的通道。
2、程序设计
- 发送一个字节
void SPISendByte(unsigned char ch){ unsigned char idata n = 8; //向SDA上发送一位数据字节,共八位 SCLK = 1 ; //时钟置高 SSEL = 0 ; //选择从机 while(n--) { delayNOP(); SCLK = 0 ; //时钟置低 if((ch & 0x80) == 0x80) //若要发送的数据最高位为1则发送位1 { MOSI = 1; //传送位1 } else { MOSI = 0; //否则传送位0 } delayNOP(); ch = ch << 1; //数据左移一位 SCLK = 1 ; //时钟置高 }}
- 接收一个字节
unsigned char SPIreceiveByte(){ unsigned char idata n = 8; // 从MISO线上读取一上数据字节,共八位 unsigned char tdata; SCLK = 1; //时钟为高 SSEL = 0; //选择从机 while(n--) { delayNOP(); SCLK = 0; //时钟为低 delayNOP(); tdata = tdata << 1; // 左移一位,或_crol_(temp,1) if(MISO == 1) { tdata = tdata | 0x01; }// 若接收到的位为1,则数据的最后一位置1 else { tdata = tdata & 0xfe; }// 否则数据的最后一位置0 SCLK = 1; } return(tdata);}
每次开始,时钟线SCLK都为高电平,MISO是数据接收位,先接受最高位,通过左移8次,得到数据,MOSI是数据发送位,先发送数据最高位。
数据的发送和接收都是在SCLK=0;与SCLK=1;语句之间执行,即:
SCLK = 0;数据的收发与移位SCLK = 1;
即数据的收发都是以SCLK的下降沿开始,上升沿结束。
阅读全文
0 0
- 对51系列单片机SPI总线的认识
- MCS-51系列单片机模拟SPI总线的方法
- 基于51单片机的SPI总线
- SPI总线在51系列单片机系统中的实现
- SPI总线的初步认识
- SPI总线的基础认识
- SPI总线的初步认识
- 单片机spi总线
- 对总线的一些认识
- 对8086的总线的一些认识
- 51单片机的IIC总线
- STC单片机SPI总线控制器解析
- 对C51单片机的初步认识
- SPI通信总线-51
- 51 单片机内存的认识
- 51单片机的时钟及总线时序和总线扩展
- 51单片机利用IIC总线对LM75A温度进行读取
- 数字接口系列文章:SPI 总线
- CSS3动画效果加上简单@media响应式布局 week6学习
- luogu P1044 栈
- Android -- Vold机制简要分析
- 1.docker简单介绍/centOS安装
- oracle视图view
- 对51系列单片机SPI总线的认识
- Android 自定义View简单归纳
- 长春大学软件工程数据结构第五次实验
- Apache日志管理
- 382. Linked List Random Node
- SpringMVC学习第二章:注解
- R语言绘图边框的单位
- 最小二乘法理论、推导、算法
- 程序中断方式的接口电路以及处理过程