AVR单片机学习(八)SPI串行口与DS1302

发布者:Harmonious222最新更新时间:2015-02-06 来源: 51hei关键字:AVR  单片机学习  SPI 手机看文章 扫描二维码
随时随地手机看文章
  • 同步串行口SPI的基本原理
  • DS1302的接口时序图
  • DS1302的使用
  • M16的SPI的使用

      SPI基本原理

      spi 它是一种最常用的同步串行接口:同步的意思就是利用时钟线对串行数据进行同步在时钟的上升沿或下降沿极性锁存数据.所以它的线至少有时钟线和数据线.

      一、同步串行口

         利用时钟线对串行数据进行同步

         上升沿或者下降沿锁存数据

      二、4线SPI:全双工 (它的两根数据线一个是收一个是发收发是可以同时进行的,还有2根 SS SCLK SS是用来帧同步的控制线,时钟是SCLK 上升合下降 

        SS 、SCLK、MOSI、MISO 

      三、3线SPI:半双工(半双工,收和发 用同一根 DIO )

         SS、SCLK、DIO

      四、SPI时序图

      五、按照时序图编写IO程序

      一、上升沿:

      PORTB &= ~(1<<5);

      asm("NOP");

      PORTB |= (1<<5);

      二、下降沿:

      PORTB |=(1<<5);

      asm("NOP");

      PORTB &= ~(1<<5);

      下图是DS1302的时序图


      从上图可以看到它是属于3线的SPI接口

      读操作:

            单字节读的时序

            在CE它是一个帧同步在空闲的时候它是拉低的,它把CE拉高标示这一帧就要开始,然后在每一个SCLK的上升沿(S估计就是串行的意思CLK时钟)我们看到每个上升沿上标了一个小箭头然后在每个I/O 数据线上,记住前8位叫做输入地址的这样的数据,可以看到在每个时钟的上升沿讲每个数据写入这个DS1302,在这个后8位这个DS1302的I/O口就要有输入状态转变为输出可以看到变成下降沿上了,所以在读数据的时候是在SCLK的下降沿上进行输出的。
      然后单片机就可以用I/O将这8位数据一位一位的读回来,一帧2个字节16位结束之后呢?CE这根线就要拉低,表示这一帧结束了

      写操作:

           这是一个单字节写的时序

           它与单字节读非常类似的也是CE 这根线的拉高与拉低表示这一帧数据的开始和结束所不同的是这16位数据都是要输入到DS1302里面去的也就是DS1302这个I/O一直是处于输入状态这个数据呢每个数据都是在每个数据的上升沿之中锁入到DS1302之中、[page]

      这个是DS1302的时序图,下面看看ATmega16的SPI接口的时序图

       





      可以看出他有4种模式 上升 下降 有两种 共4种

      等后面操作详细讲说时序。

      解释:相对于串行数据,SCK的相位合极性有4种组合。CPHA和CPOL控制组合的方式。SPI数据传输格式见Figture 67与Figure 68,每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。这个过程在Table 56 和Table 57 有清楚的说明:sample(采样)rising(上升) setup(设置)falling(下降) 呵呵英语不好。

      Figure 67 是CPHA =0 时候的传输格式

      Figure 68 是CPHA =1 时候的传输格式

      ATmega 16 支持以上四种全部的模式 有的是上升沿锁存有的是下降沿锁存这四种模式,这四种模式我们一会在说到ATmega 16 的SPI接口的时候会详细给你们菜鸟说: 

      好了再看了SPI的时序图之后要怎样按照时序对它编程呢?

      在基本的逻辑里面同步都是靠时钟的上升沿来进行同步,也就是说我们需要掌握这个I/O口让他产生一个时钟,它上升沿或者下降沿的方法,上升沿就是低跳变到高,我们以PORTB 它的第五位作为输出口为例来进行讲解,产生上升沿首先它原先必须要是低输出一个低电平0  PORTB =~(1<<5)  拉低  然后一个延迟延迟也可以去掉要看接受方的SPI接受速度是怎么样的了,不过一般的器件它的SPI速率都是非常高的,我们没有必要考虑单片机是否过快对它有所影响因此这个asm("NOP");这条语句可以去掉不过这个是什么意思呢?asm 在C语言中插入一条汇编指令,NOP呢?NOP是汇编语言中的一条空指令表示的是CPU在接下来的一个CPU时钟里面它是什么都不干,干等着这么一个CPU时钟周期,所以就实现一个非常小的延时。然后呢再将PORTB |=(1<<5)  它的第五位拉高,这样就产生一个上升沿,同理下下降沿也是一样的。接下来咱么讲一下DS1302的时序图吧。

      DS1302的接口时序图与AVR的接线图

      • 时序图

           见DS1302的官方技术文档

      •   与AVR之间的接线图

              3线SPI与4线SPI的互联

       


      这个时序图上面已经说过了,那么这个DS1302属于3线的SPI 而ATmega 16 是4线的SPI接口那么3线合4线之间怎样进行互联呢?我们看以采用下面的这种方法。

      来看下电路图


      上图的PB5  PB6   PB7 是单片机的三个I/O口。 可以看他它的第二功能是SPI功能

      PB5可以看到MOSI   M是主  S 是从 意思就是主机输出 从机输入

      同理PB6 MISO  是主机输入从机输出 也就是AVR的SPI正常工作的时候PB6这个引脚它应该是处于一个输入的状态PB5应该是一个输出的状态。我们就将PB5 与PB6之间串上一个10K的电阻然后再将PB6直接接到I/O上,下面我们可以简单的分析一下原理图是怎样正常工作的,首先这个DS1302对它处于写的状态的时候呢,DS1302的I/O口是处于输入的,而PB6呢也是一个输入口始终是一个输入口。

       

       

       

       

    关键字:AVR  单片机学习  SPI 引用地址:AVR单片机学习(八)SPI串行口与DS1302

    上一篇:AVR单片机学习(六)中断与定时器
    下一篇:AVR 单片机学习(十)ATmega16 ADC

    推荐阅读最新更新时间:2024-03-16 13:53

    AVR单片机—(五)、ATMEGA16的USART与PC机串行通信—01(补充)
    //------------------------------------------------------------------------------ //ATMEGA16与PC机的通信实验1 //PC机发送一个字符给单片机,单片机收到后既在发光二极管进行显示,同时将其回传给PC //单片机的发送和接收都采用查询方式 #include ioavr.h #include intrinsics.h #include delayics.h //------------------------------------------------------------------------------ typedef u
    [单片机]
    <font color='red'>AVR</font><font color='red'>单片机</font>—(五)、ATMEGA16的USART与PC机串行通信—01(补充)
    SPI协议内容及STM32 SPI的操作
    SPI总线协议简介及内容 简介 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全/半双工,同步的通信总线,并且在芯片的管脚上只占用三/四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 SPI特征 3根/4根线全双工同步传输 8或16位传输帧格式选择 主从操作模式 支持多主操作模式 从模式频率(最大为fpclk/2) 可编程的时钟极性和相位 可编程的数据顺序,MSB在前或LSB在前 可触发中断的专用发送和标志 SPI总线忙状态标志 支持可靠通信的C
    [单片机]
    <font color='red'>SPI</font>协议内容及STM32 <font color='red'>SPI</font>的操作
    SPI四种工作模式时序图
    1. SPI总线 简介   SPI(serial peripheral interface,串行 外围设备 接口)总线技术是Motorola公司推出的一种同步 串行接口 。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、 低电平 有效从机选择线CS。当SPI工作时,在移位 寄存器 中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一
    [单片机]
    <font color='red'>SPI</font>四种工作模式时序图
    ESP8266与单片机之间通过SPI进行双向数据传输的一种方案
    背景: 在我的毕业设计中需要单片机将采集到的数据上传到服务器,同时需要接收来自服务器的一些天气信息,我的单片机的型号是 Stm32F407; ESP8266 刷入了 micropython 的固件,使用python进行开发; 协议是 SPI协议 ESP8266 主机 Stm32F4作为 从机 单片机侧使用的是 Stm32F407 的硬件 SPI + DMA 接收发送。 ESP8266 侧使用的也是硬件SPI1 ; 通讯速度应该可以跑满 单片机这一侧的极限速度(42MHz),但是我在测试时候发现数据在40M 就很不稳定了(逻辑分析仪测试,可能是导线有点长) 最终就选择了4MHz.。 整体的这个实现的机制就是在单片机里面设
    [单片机]
    ESP8266与<font color='red'>单片机</font>之间通过<font color='red'>SPI</font>进行双向数据传输的一种方案
    没有仿真器的情况下如何开发AVR
    在开发单片机程序时,有许多人依赖于仿真机,一旦离开了仿真机开发程序时就感觉无从下手。其实对FLASH存贮器单片机,不要仿真机也能方便快速地开发程序。具体可以从以下几方面入手:   一、尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种 单片机 的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开
    [嵌入式]
    C51单片机学习笔记之LED
    简介 LED就是一个发光二极管,没啥好说的。唯一 一点就是低电平有效! 原理图 代码部分 #include REGX52.H void delay() { unsigned int i; for(i=0;i 30000;i++); } main() { unsigned int i; unsigned char J; while(1) { /*P0=0xFE; delay(); P0=0xFD; delay(); P0=0xFB; delay(); P0=0xF7; delay(); P0=0xEF; delay(); P0=0x
    [单片机]
    C51<font color='red'>单片机</font><font color='red'>学习</font>笔记之LED
    AVR I/O使用方法
    AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A端口、B端口等) 下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态 DDRB.2 PORTB.2 读取PINB.2的结果 引脚PB2的状态 1 1 1 PB2推挽输出 1 1 0 0 PB2推挽输出 0
    [单片机]
    SPI接口总线介绍
    SPI 可以作为主、从器件工作,并可在同一总线上支持多个主、从器件。SPI 主要使用 3 个信号。 (1)主输出、从输入(MOSI) 用于主器件到从器件的串行数据传输。SPI 作为主器件,信号为输出;SPI 作为从器件, 信号为输入。当被配置为主器件时,MOSI 由移位寄存器的MSB 驱动。 (2)主输入、从输出(MISO) 用于从器件到主器件的串行数据传输。SPI 作为主器件,信号为输入;SPI 作为从器件, 信号为输出。当作为从器件工作时,MISO 由移位寄存器的MSB 驱动。 (3)串行时钟(CLK) 用于同步主器件和从器件之间在MOSI 和MISO 线上的串行数据传输。当SPI 作为主器 件时产生该信号。 SD卡总线
    [模拟电子]
    <font color='red'>SPI</font>接口总线介绍
    小广播
    添点儿料...
    无论热点新闻、行业分析、技术干货……
    设计资源 培训 开发板 精华推荐

    最新单片机文章
    何立民专栏 单片机及嵌入式宝典

    北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

    换一换 更多 相关热搜器件
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved