第八章 数据通信
任课教师:刘忠国 山东大学课程中心网站: http://course.sdu.edu.cn/G2S/stcmcu.cc 宏晶官方网站:http://www.stcmcu.com STC单片机编译(汇编)/编程(烧录)/仿真工具说 明书; stc15系列单片机器件手册等 keil μvision软件下载及指导手册(Help→μvision Help) http://www.keil.com/ Keil Software –Cx51 编译器用户手册: Cx51编译 器--对传统和扩展的8051微处理器的优化的C 编译器和库参考
第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口(RS232/RS485/SPI/I2C)的原 理及应用方法 掌握单片机并行接口的扩展方法
第八章 数据通信 8.1 通信的有关概念 8.1.1 串行通信的相关概念 8.1.2 并行通信的相关概念 8.2 串行接口 8.2.1 单片机的串行接口 8.2.2 RS232串行通信接口 8.2.3 RS485通信接口 8.2.4 SPI通信接口 8.2.5 I2C通信接口 8.3 并行总线接口的使用方法 8.3.1 文件管理控制芯片CH376简介 8.3.2 CH376的常用命令 8.3.3 CH376使用步骤和实例代码 1. 串行口的寄存器 2. 串行口的工作方式 3. 多处理机通信 4. 波特率的设定 5. 串行口通信应用举例
8.2.4 SPI通信接口 1、SPI接口简介 IAP15W4K58S4集成了串行外设接口(Serial Peripheral Interface, 简称SPI)。 SPI接口既可以和其他微处理器通信,也可以与具有 SPI兼容接口的器件,如存储器、A/D转换器、D/A 转换器、LED或LCD驱动器等进行同步通信。 SPI接口有两种操作模式:主模式和从模式。 在主模式中支持高达3Mbit/s的速率(工作频率为12MHz时); 从模式时速度无法太快,速度在SYSclk/8 4以内较好。 SPI接口还具有传输完成标志和写冲突标志保护功能。
图8-27 IAP15W4K58S4单片机的SPI功能方框图 :M I :SO :MO :S I SPDAT SPI允许 /SS: Slave Select SPSTAT SPCTL 图8-27 IAP15W4K58S4单片机的SPI功能方框图
IAP15W4K58S4单片机的SPI接口结构说明 SPI的核心是一个8位移位寄存器和数据缓冲器, 数据 可以同时发送和接收。在SPI数据的传输过程中, 发送 和接收的数据都存储在缓冲器中。 对于主模式, 若要发送一个字节数据, 只需将这个数据 写到SPIDAT寄存器中。主模式下/SS信号不是必须的。 在从模式下, 必须在/SS信号变为有效并接收到合适的 时钟信号后, 方可进行数据的传输。在从模式下, 如果 一个字节传输完成后, /SS信号变为高电平, 这个字节 立即被硬件逻辑标志为接收完成, SPI接口准备接收下 一个数据。 任何SPI控制寄存器的改变将复位SPI接口, 并清除相 关寄存器。
3、SPI接口的数据通信 (1)SPI接口的信号 MISO/P1.4, MOSI/P1.3, SCLK/P1.5, /SS /P1.2 共4根 信号线构成SPI接口。SPI接口的引脚可以切换。 MOSI(Master Out Slave In,主出从入) 主器件的输出和从器件的输入,用于主器件到从器件 的串行数据传输。 根据SPI规范, 多个从机共享一根MOSI信号线。在时 钟边界的前半周期, 主机将数据放在MOSI信号线上, 从机在该边界处获取该数据。 参考(6)数据格式 图8-32, 8-34 (主机输出) (从机输入) MOSI
3、SPI接口的数据通信 (1)SPI接口的信号 MISO(Master In Slave Out,主入从出) 从器件的输出和主器件的输入。用于实现从器件到 主器件的数据传输。 SPI规范中,一个主机可连接多个从机,因此,主机 的MISO信号线会连接到多个从机上,或者说,多个 从机共享一根MISO信号线。 当主机与一个从机通信时,其他从机应将其MISO 引脚驱动置为高阻状态。
3、SPI接口的数据通信 (1)SPI接口的信号 SCLK(SPI Clock,串行时钟信号) 串行时钟信号是主器件的输出和从器件的输入,用 于同步主器件和从器件之间在MOSI和MISO线上的 串行数据传输。 当主器件启动一次数据传输时,自动产生8个SCLK 时钟周期信号给从机。在SCLK的每个跳变处(上 升沿或下降沿)移出一位数据。 一次数据传输可以传输一个字节的数据。
(1)SPI接口的信号 SCLK、MOSI和MISO通常用于将两个或更多 个SPI器件连接在一起。 如果SPI接口被禁止,即特殊功能寄存器SPCTL 中的SPEN=0(复位值),这些管脚都可作为 I/O口使用。
(1)SPI接口的信号 (Slave Select,从机选择信号) 这是一个输入信号。主器件用它来选择处于从模式 的SPI模块。 在主模式下, SPI接口只能有一个主机, 不存在主机 选择问题, 在该模式下/SS不是必须的。主模式下通 常将主机的/SS引脚通过10kΩ的电阻上拉高电平。 每一个从机的/SS接主机的I/O口, 由主机控制电平高 低, 以便主机选择从机。 在从模式下,不论发送还是接收,/SS信号必须有效。 因此在一次数据传输开始之前必须将/SS拉为低电平。 SPI主机可用I/O口选择一个SPI器件作为当前从机。 可置SSIG位为1, /SS脚被忽略 SPI控制寄存器SPCTL. 7(SSIG)
(1)SPI接口的信号 SPI从器件通过其/SS脚确定是否被选择。如果满足下 面条件之一, 就被忽略: 如果SPI功能被禁止,即SPEN位为0(复位值); 如果SPI配置为主机, 即MSTR位为1, 并且P1.2/SS配置 为输出(P1M0.2=1, P1M1.2=0) ; 若/SS脚被忽略, 即SSIG位为1, 该脚用于I/O口功能。 注: 即使SPI被配置为主机(MSTR=1), 仍然可通过拉低 /SS脚配置为从机(如果P1.2配置为输入且SSIG=0), 此 时MSTR=1→0 , 要使能该特性, 应当 置位SPIF (SPSTAT.7) (自动置位,表示“模式改变”)。 SPI控制寄存器SPCTL. 6(SPEN) SPCTL. 4(MSTR)
3、SPI接口的数据通信 (2)SPI接口的数据通信方式 IAP15W4K58S4单片机SPI接口的数据通信方式有3种: 单主机-单从机方式 双器件方式(器件可互为主机和从机) 单主机-多从机方式。 1)单主机-单从机方式 连接如图所示。 图8-28 SPI接口的单主机-单从机连接方式
(2)SPI接口的数据通信方式 图中, 从机SSIG(SPCTL.7)为0,不忽略 , 用来选择从机。 SPI主机可用任何端口位(含P1.2/ )来控制从机 脚。 图8-28 SPI接口的单主机-单从机连接方式
(2)SPI接口的数据通信方式 主机SPI与从机SPI的8位移位寄存器连成一个循环16位 移位寄存器。 当主机向SPDAT写一字节时, 就启动一连续8位移位通 信过程: 主机SCLK脚向从机SCLK脚发一串脉冲, 在该 串脉冲驱动下, 主机SPI的8位移位寄存器中数据移到从 机8位移位寄存器中。同时从机 8位移位寄存器中数据 移到主机SPI的8位移位寄存器中。由此, 主机既可向从 机发送数据, 又可由从机中读取数据。
(2)SPI接口的数据通信方式 2)双器件方式 双器件方式也称互为主从方式,其连接方式如图所示。 图8-29 SPI接口的双器件连接方式
2)双器件方式 图中, 两个器件可互为主从。当没有发生SPI操作时, 两个器件都可配置为主机(MSTR=1), 将SSIG清零并 将P1.2( )配置为准双向模式或输入模式。当其中一 个器件启动传输时, 可将P1.2配置为输出并驱动为低 电平, 这样就强制另一个器件变为从机。
SSIG =1, MSTR=0, P1.2/ 配置为准双向模式且输出1 2) 双器件方式 SSIG =1, MSTR=0, P1.2/ 配置为准双向模式且输出1 双方初始化时将自己设置成忽略/SS脚的SPI从模式。 当一方要主动发送数据时, 先检测/SS脚的电平, 若/SS 脚是高电平, 就将自己设置成忽略/SS脚的主模式。 SSIG =1, MSTR=1, P1.2/ 输出0 P1.2/ 配置为准双向模式且输出1 SSIG =0, MSTR=0, P1.2/ 为1 通信双方平时将SPI置成没有被选中的从模式。在该 模式下,MISO(高阻)、MOSI、SCLK均为输入,当 多个MCU的SPI接口以此模式并联时不会发生总线冲 突。这种特性在互为主从、一主多从等应用中很有用。 注意,互为主从模式时,双方的SPI速率必须相同。 如果使用外部晶体振荡器,双方的晶体频率也要相同。
(2)SPI接口的数据通信方式 3)单主机-多从机方式 图中, 从机的SSIG (SPCTL.7)为0, 从机通过对应的/SS 信号被选中。SPI主机可使用任何端口位(包括P1.2/SS) 来控制从机的/SS。 SSIG=0 SSIG=0 图8-30 SPI接口的单主机-多从机连接方式
(2) SPI接口的数据通信方式 表8-8 主机模式的配置 主机和从机的选择 表8-8 主机模式的配置 主机和从机的选择 STC15单片机进行SPI通信时,主机和从机的选择由SPEN, SSIG, 引脚P1.2( )和MSTR联合控制; 主机和从机的选择如表所示。 SPEN SSIG /SS P1.2 MSTR 主或从 模式 MISO P1.4 MOSI P1.3 SCLK P1.5 备 注 X SPI功能禁止 SPI禁止:P1.2/P1.3/P1.4 /P1.5作为普通I/O口使用 1 从机模式 输出 输入 选择作为从机 未被选中 高阻 未被选中。MISO为高阻状态,以避免总线冲突 1→0 /SS配置为准双向口或输入模式, /SS若被驱动为低电平且SSIG=0, MSTR位自动清0。 主(空闲) 主机空闲时MOSI和SCLK为高阻态以避免总线冲突。用户须将SCLK上拉或下拉(根据CPOL取值)以避免SCLK出现悬浮状态。 主(激活) 作为主机激活时,MOSI 和SCLK 为推挽输出 从 主 SCLK上拉或下拉就不是高阻状态,矛盾, 单主机输出状态也不会总线冲突
(3)SPI接口的数据通信过程 在SPI通信中,数据传输总是由主机启动的。如果 SPI使能(SPEN=1),主机对SPI数据寄存器的写操 作将启动SPI时钟发生器和数据的传输。在数据写 入SPDAT之后的半个到一个SPI位时间后,数据 将出现在MOSI引脚。 需注意的是,主机可以通过将对应器件的/SS引脚 驱动为低电平实现与之通信。写入主机SPDAT寄 存器的数据从MOSI脚移出并发送到从机的MOSI 引脚。同时,从机SPDAT寄存器的数据从MISO 引脚移出并发送到主机的MISO引脚。
(3)SPI接口的数据通信过程 传输完一个字节后,SPI 时钟发生器停止,传输完 成标志(SPIF)置位并产生一个中断(若SPI中断使能)。 主机和从机CPU的两个移位寄存器可以看作是一个 16位循环移位寄存器。当数据从主机移位传送到从 机的同时,数据也以相反的方向移入。这意味着在 一个移位周期中,主机和从机的数据相互交换。 SPI状态寄存器(SPSTAT) 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SPIF WCOL -
3、SPI接口的数据通信 (4)SPI中断 如果允许SPI中断,发生SPI中断时,CPU就会跳 转到中断服务程序的入口地址004BH处执行中断 服务程序。 注意,在中断服务程序中,必须把SPI中断请求标 志清0。
spdata(接收发送共用同址)及8位移位寄存器 3、SPI接口的数据通信 及8位移位寄存器 (5) 写冲突 SPI在发送时为单缓冲, 接收时为双缓冲。这样在前一 次发送尚未完成之前, 不能将新数据写入移位寄存器。 当在发送过程中对数据寄存器进行写操作时, WCOL 位会置1以指示数据冲突。在这种情况下,当前发送的 数据继续发送,而新写入的数据将丢失。 spdata(接收发送共用同址)及8位移位寄存器 SPSTAT.6(WCOL) 接收数据时, 接收到的数据传送到一个并行读数据缓 冲区, 这样将释放移位寄存器以进行下一数据的接收。 但必须在下个字符完全移入之前从数据寄存器中读出 接收到的数据, 否则, 前一个接收数据将丢失。 WCOL可通过软件向其写入“1”清0。 spdata
数据格式与SPI控制寄存器SPCTL的CPHA和CPOL有关: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 时钟相位控制位CPHA用于设置采样和改变数据的时 钟SCLK的边沿。 时钟极性控制位CPOL用于设置时钟SCLK的极性。 SPI接口时钟信号线SCLK有Idle和Active两种状态: Idle: 不进行数据传输时(或数据传完后)SCLK所处状态; Active: 是与Idle相对的一种状态。 SCLK前沿 Idle状态 后沿
时钟极性控制位CPOL用于设置时钟SCLK的极性。 CPOL=0: Idle状态=低电平, Active状态=高电平。 3、SPI接口的数据通信(6)数据格式 时钟极性控制位CPOL用于设置时钟SCLK的极性。 CPOL=0: Idle状态=低电平, Active状态=高电平。 CPOL=1: Idle状态=高电平, Active状态=低电平。 从Idle状态到Active状态的转变, 称为SCLK前沿; 从Active状态到Idle状态的转变, 称为SCLK后沿。 一个SCLK前沿和后沿构成一个SCLK时钟周期, 一个 SCLK时钟周期传输一位数据。 SCLK前沿 Idle状态 后沿 主机总是在SCLK=Idle状态时, 将下一位要发送的数 据置于数据线MOSI上。
SPI时钟相位选择控制位CPHA用于设置采样和改变 数据的时钟SCLK的边沿: CPHA=1: 数据在时钟SCLK的前沿驱动到SPI口线, SPI 模块在时钟后沿采样。 CPHA=0: 数据在/SS为低 (SSIG=0) 时驱动到SPI口线, 在 时钟SCLK的后沿被改变, 并在时钟前沿被采样。 ( 注: SSIG=1时的操作未定义 ) 不同的CPHA, 主机和从机对应数据格式如下页图所示。 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0
(6)数据格式 MOSI(输入) (从机) MISO(输出) 图8-31 CPHA=0时SPI从机传输格式 Idle状态 数据:在时钟的前沿被采样, 后沿被改变 MOSI(输入) MISO(输出) (从机) 图8-31 CPHA=0时SPI从机传输格式
(6)数据格式 CPHA=1时SPI从机传输格式 MOSI(输入) (从机) MISO (输出) Idle状态 数据:在时钟的后沿被采样, 前沿驱动 MOSI(输入) MISO (输出) (从机) 图8-32 CPHA=1时SPI从机传输格式
(6)数据格式 CPHA=0时SPI主机传输格式 MOSI(输出) (主机) MISO (输入) Idle状态 数据:在时钟的前沿被采样, 后沿被改变 MOSI(输出) MISO (输入) (主机) 图8-33 CPHA=0时SPI主机传输格式
(6)数据格式 CPHA=1时SPI主机传输格式 MOSI(输出) (主机) MISO (输入) Idle状态 数据:在时钟的后沿被采样, 前沿驱动 MOSI(输出) MISO (输入) (主机) 图8-34 CPHA=1时SPI主机传输格式
3、SPI接口的数据通信 (7)SPI时钟预分频器选择 SPI时钟预分频器选择是通过SPCTL寄存器的SPR1, SPR0位实现的。 SPI控制寄存器SPCTL 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 表8-10 SPI时钟频率的选择(STC15W系列) (STC15F/L系列) SPR1 SPR0 时钟(SCLK) CPU_CLK/4 1 CPU_CLK/16 CPU_CLK/64 CPU_CLK/128 SPR1 SPR0 时钟(SCLK) CPU_CLK/4 1 CPU_CLK/8 CPU_CLK/16 CPU_CLK/32 CPU_CLK是CPU时钟
4. SPI接口的应用举例 (1)SPI相关的特殊功能寄存器 表8-9 与SPI接口有关的特殊功能寄存器 SPICTL SSIG SPEN 地址 D7 D6 D5 D4 D3 D2 D1 D0 复位值 SPICTL CEH SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 00000100B SPSTAT CDH SPIF WCOL - 00xxxxxxB SPDAT CFH 00000000B
4. SPI接口的应用举例 (1)SPI相关的特殊功能寄存器 1)SPI控制寄存器(SPCTL) SPICTL(地址为CEH,复位值为00H)各位定义如下: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 ①SSIG:引脚忽略控制位。 1:由MSTR位确定器件为主机(MSTR=1)还是从机。 0:由/SS引脚的低电平,决定从机被选中, 即使主机也 变为从机。/SS脚可作为I/O口使用, 可通过控制/SS脚 的电平高低, 使其被选中为从机与否。
D7 D6 D5 D4 D3 D2 D1 D0 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 (1)SPI相关的特殊功能寄存器 1)SPI控制寄存器(SPCTL) 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 ②SPEN: SPI使能位。 1:SPI使能。 0:SPI被禁止,所有SPI管脚都作为I/O口使用。 ③DORD:设定数据发送和接收的位顺序。 1:数据字的最低位(LSB)最先传送; 0:数据字的最高位(MSB)最先传送。
1)SPI控制寄存器(SPCTL) D7 D6 D5 D4 D3 D2 D1 D0 SSIG SPEN DORD MSTR CPOL 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 ④MSTR:SPI主/从模式选择位。 一般MSTR=1选择主机, MSTR=0选从机, 具体见表8-8. ⑤CPOL:SPI时钟极性。 1:SPI空闲时SCK=1。SCLK的前时钟沿为下降沿而 后沿为上升沿。 0:SPI空闲时SCK=0。SCLK的前时钟沿为上升沿而 后沿为下降沿。 SCLK前沿 Idle状态 后沿
1)SPI控制寄存器(SPCTL) D7 D6 D5 D4 D3 D2 D1 D0 SSIG SPEN DORD MSTR CPOL 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 ⑥CPHA:SPI时钟相位选择控制。 1:数据在SCLK的前时钟沿驱动到SPI口线,SPI模 块在后时钟沿采样。 0:数据在/SS为低 (SSIG=0) 时驱动到SPI口线,在 SCLK的后时钟沿被改变,并在前时钟沿被采样。 (注:SSIG=1时的操作未定义)
表8-10 SPI时钟频率的选择(STC15W系列) 1)SPI控制寄存器(SPCTL) 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 ⑦SPR1:与SPR0联合构成SPI时钟速率选择控制位。 ⑧SPR0:与SPR1联合构成SPI时钟速率选择控制位。 表8-10 SPI时钟频率的选择(STC15W系列) (STC15F/L系列) SPR1 SPR0 时钟(SCLK) CPU_CLK/4 1 CPU_CLK/8 CPU_CLK/16 CPU_CLK/32 SPR1 SPR0 时钟(SCLK) CPU_CLK/4 1 CPU_CLK/16 CPU_CLK/64 CPU_CLK/128 CPU_CLK是CPU时钟 44
(1)SPI相关的特殊功能寄存器 2)SPI状态寄存器(SPSTAT) SPSTAT (地址: CDH, 复位值: 00XXXXXXB)各位定义: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SPIF WCOL - ①SPIF:SPI传输完成标志。 当一次传输完成时, SPIF被置位。此时, 若SPI中断被 打开(即ESPI (IE2.1)=1, EA (IE.7)=1 ), 将产生中断。 当SPI处于主模式且SSIG=0时, 如果 为输入并被驱 动为低电平,SPIF也将置位,表示“模式改变”。 SPIF标志通过软件向其写入"1" 而清0。
2)SPI状态寄存器(SPSTAT) 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SPIF WCOL - ②WCOL:SPI写冲突标志。 当一个数据还在传输时,又向数据寄存器SPDAT写 入数据,WCOL将被置位。 WCOL 标志通过软件向其写入"1"而清0。 ③位5-位0:保留。
(1)SPI相关的特殊功能寄存器 3)SPI数据寄存器(SPDAT) SPDAT (地址为CFH, 复位值为00H)各位的定义如下: 位号 位名称 MSB LSB 位7-位0:保存SPI通信数据字节。其中,MSB为最高位, LSB为最低位。 spdata:接收、发送同址共用。
4. SPI接口的应用举例 (2)编程实例 SPI接口的使用包括SPI接口的初始化和SPI中断服 务程序的编写。 通过SPI控制寄存器SPCTL设置:/SS引脚的控制、 SPI使能、数据传送的位顺序、设置为主机或从机、 SPI时钟极性、SPI时钟相位、SPI时钟选择。 具体内容请参见SPI控制寄存器SPCTL介绍。
SPI接口的初始化包括以下几个方面: 清0寄存器SPSTAT中的标志位SPIF和WCOL (向这两个标志位写1即可清零)。 开放SPI中断(IE2中的ESPI=1,IE2寄存器不能 位寻址,可以使用“或”指令)。 开放总中断(IE中的EA=1)。 SPI中断服务程序根据实际需要进行编写。需注意 的是,在中断服务程序中首先需要将标志位SPIF和 WCOL清0。因为SPI中断标志不会自动清除。
74HC595接口及其应用 下面以单主机-单从机通信方式的应用为例说明SPI接 口使用方法。用IAP15W4K58S4单片机控制 74HC595 输出进行数码LED的信息显示。 74HC595是为Motorola的SPI总线开发的一款串行-并 行转换芯片(8位3态移位寄存器/输出锁存器)。 由于74HC595的输入输出电平兼容TTL、NMOS和 CMOS电平, 且具有较强的输出负载能力, 因此被广泛 地运用于MCU(微控制器)和MPU(微处理器)的I/O口扩 展。
8.3.2 74HC595接口及其应用 74HC595在5V供电的时候能够达到30MHz的时钟 速度,每个并行输出端口均能承受20mA的灌电流 和拉电流。这个特点保证了不用增加额外的扩流 电路即可轻松的驱动LED。 它的输入端允许500nS的上升(下降)时间,对严 重畸形的时钟脉冲仍能检测。 这样就可以容纳较大的传输线对地电容,使系统 的抗干扰能力增强。
8.3.2 74HC595接口及其应用 74HC595的逻辑电路图: 74HC595的逻辑电路图
8.3.2 74HC595接口及其应用 74HC595管脚功能描述如下: QA~QH:锁存器数据输出,三态 GND:电源地 VCC:电源正,一般接5VDC。 /G: 输出使能控制端。低电平 有效, 将锁存器的输出映射到 输出并行口(QA-QH)上。当输 入高电平时,高阻态,同时本 芯片的串行输出无效。 图8-35 74HC595的逻辑图
8.3.2 74HC595接口及其应用 RCK:存储寄存器时钟输入,上升沿时,移位寄存 器的数据进入数据存储寄存器,下降沿时存储寄存器 数据不变,通常将RCK置为低电平。 当移位结束后, 在RCK端产生一个正脉冲(5V供电时, 大于几十纳秒即可), 更新输出数据。 SI:串行数据输入,数据从这 个管脚移进内部的8位串行移位 寄存器。
8.3.2 74HC595接口及其应用 SCK: 移位寄存器时钟输入。上升沿时, 将数据寄存器 的数据移位: QA→QB →QC→... →QH; 下降沿移位寄 存器数据不变。 (脉冲宽度: 5V时, 大于几十纳秒即可.) /SCLR:移位寄存器清零输入。 低电平有效, 当此管脚上出现低电 平时, 将复位内部的移位寄存器 (清0), 但不影响8位锁存器的值。 通常可接Vcc。
74HC595真值表如表8-11所示。 表8-11 74HC595真值表 输入 输出管脚 SI SCK /SCLR RCK /G × H QA-QH输出高阻态 L QA-QH输出有效值 × L 移位寄存器清0 L ↑ H × 移位寄存器第一级(位)存储L 移位寄存器第一级(位)存储H × ↓ H 移位寄存器状态保持 × ↑ 输出存储器锁存移位寄存器中的状态值 × ↓ 输出存储器状态保持
[例8-7]编程实现在学习平台的数码LED上显示"01234567" 硬件连接如图所示 SI SI 9 QH’ 图8-36 数码LED显示电路原理图
[例8-7]编程实现在学习平台的数码LED上显示"01234567" 解: 在下面的程序代码中, 使用T0定时1ms, 每隔1ms刷新显示一次。 C语言程序如下: #include "stc15.h” //包含IAP15W4K58S4寄存器定义文件 unsigned char code t_display[]={ //标准字模库 //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F,0x6F,0x77, 0x7C, 0x39,0x5E,0x79,0x71, //black, -, H, J, K, L, N, o, P, U, t, G, Q, r, M, y 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d, 0x67,0x50,0x37,0x6e, //0. , 1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 9. , -1 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
[例8-7]编程实现在学习平台的数码LED上显示"01234567" 使用T0定时1ms, 每隔1ms刷新显示一次。 [例8-7]编程实现在学习平台的数码LED上显示"01234567" unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10, 0x20, 0x40,0x80}; //位码, 对应8个LED管的共阴极端口线输出电位~(取反) sbit HC595_RCK=P5^4; //74HC595的12号引脚RCK控制(锁存数据) unsigned char display_index; //显示位索引(指示8个LED管的其一显示) unsigned char LED8[8]; //显示缓冲区8单元, 对应8个LED管显示数值 void Timer0Init(void); //T0初始化子函数, 定时1ms void Send_595(unsigned char spidata) ; //使用SPI接口输出数据 void DisplayScan(void); //扫描显示子函数, 在1ms定时中服中调用显示一次 void main(void) { unsigned char i; display_index=0; //显示位初始值为0 Timer0Init(); //T0初始化 D7 D6 D5 D4 D3 D2 D1 D0 D0 D1 D2 D3 D4 D5 D6 D7 T_COM 用T0定时1ms,每隔1ms刷新显示一次
[例8-7]编程实现在学习平台的数码LED上显示"01234567" //------------------- 初始化SPI ----------------------- AUXR1=0x08; //将SPI切换到[P5.4/SS_3, P4.0/MOSI_3, P4.1/MISO_3, P4.3/SCLK_3] SPCTL=0xdE; //数据字的最高位先传送, 主机模式 //CPOL=1, CPHA=1, 时钟频率为CPU_CLK /6416 SPSTAT=0xC0; //写1清SPIF标志位 ET0=1; //开T0中断, 1ms定时中断1次,在中服中扫描显示一位 EA=1; //开总中断 for(i=0; i<8; i++) LED8[i] = i; //显示缓冲区LED8赋值01234567 //以便在DisplayScan函数中经SPI口送到74HC595显示, 可填其他显示信息 while(1); //主循环 } LED8中的值是t_display字模库的序号值 位号 D7 D6 D5 D4 D3 D2 D1 D0 SPCTL SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0
[例8-7]编程实现在学习平台的数码LED上显示"01234567" //---------- 显示数据发送 ---------- void Send_595(unsigned char spidata) { unsigned char spi_status=0; //存储状态寄存器SPSTAT值, 查询SPIF SPDAT=spidata; //发送数据写到SPI数据缓冲器, 开始发送 while(spi_status==0) //查询SPIF=1? 等传输完毕 spi_status=SPSTAT; //读状态寄存器SPSTAT的值 spi_status=spi_status&0x80; //保留SPIF位,屏蔽其他位 } SPSTAT=0xc0; //写1清SPIF标志位
[例8-7]编程实现在学习平台的数码LED上显示"01234567" RCK:存储寄存器时钟上升沿时, 移位 寄存器的数据进入数据存储寄存器, 下降沿时存储寄存器数据不变。 //---------- 显示扫描函数 ---------- void DisplayScan(void) { HC595_RCK=0 //存储寄存器锁存时钟初值低电平 Send_595(~T_COM[display_index]); //串行连续 输出 位码 以及 Send_595(t_display[LED8[display_index]]); //输出 段码 P_HC595_RCLK = 1; //锁存时钟上升沿时移位寄存器数据进入存储寄存器 P_HC595_RCLK = 0; //下降沿时,存储寄存器数据不变 display_index++; if(display_index >= 8) display_index = 0; //8位结束回0 }
[例8-7]编程实现在学习平台的数码LED上显示"01234567" void Timer0Init(void) //1毫秒@11.0592MHz { AUXR |= 0x80; //T0工作于1T模式 TMOD &= 0xF0; //设置T0模式0 TL0 = 0xCD; //设置定时初值 TH0 = 0xD4; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //T0开始计时 } //----------T0 1ms中断函数 ---------- void T0_ISR (void) interrupt T0_VECTOR DisplayScan(); //1ms定时中断中扫描显示一位
单主机-多从机通信方式应用 硬件连接如图8-37所示。 图8-37 单主机-多从机SPI通信实验电路图
原图中的S1应该是题目中提到的开关SW7, 如图所示。 第8章作业: 8.6, 8.7 第8章作业8.7的图 原图中的S1应该是题目中提到的开关SW7, 如图所示。 开关SW7按下: 触点2和3相连,5和6相连,串口2和串口1 连接, 可进行通信。 开关SW7弹起: 触点1和2相连,4和5相连,串口2和串口1 无关联, 无法进行通信。
8.2.5 I2C通信接口 1、I2C总线简介 I2C(Inter-Integrated Circuit)总线是由PHILIPS公 司开发的串行总线,用于连接微控制器及其外围设备。 I2C总线产生于二十世纪80年代,最初为音频和视频 设备开发,如今主要在服务器管理中使用,其中包括 单个组件状态的通信。 例如,管理员可对各个组件进行查询,以管理系统的 配置或掌握组件的功能状态,如电源和系统风扇。可 随时监控内存、硬盘、网络、系统温度等多个参数, 增加了系统的安全性,方便了管理。