第八章 数据通信
任课教师:刘忠国 山东大学课程中心网站: 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 8255A接口及其应用 8.3.2 74HC595接口及其应用 1. 串行口的寄存器 2. 串行口的工作方式 3. 多处理机通信 4. 波特率的设定 5. 串行口通信应用举例
8.2.5 I2C通信接口 1、I2C总线简介 I2C(Inter-Integrated Circuit)总线是由PHILIPS 公司开发的串行总线,用于连接微控制器及其外围 设备。 I2C总线产生于二十世纪80年代,最初为音频和视 频设备开发,如今主要在服务器管理中使用,其中 包括单个组件状态的通信。 例如,管理员可对各个组件进行查询,以管理系统 的配置或掌握组件的功能状态,如电源和系统风扇。 可随时监控内存、硬盘、网络、系统温度等多个参 数,增加了系统的安全性,方便了管理。
8.2.5 I2C通信接口 2、I2C总线特点 I2C总线最主要的优点是其简单性和有效 性。由于接口直接在组件之上,因此I2C总 线占用的空间非常小,减少了电路板的空间 和芯片管脚的数量,降低了互联成本。 总线长度可高达25英尺, 并且能够以10Kbps 的最大传输速率支持40个组件。
2、I2C总线特点 I2C总线的另一个优点是,它支持多个主器件 (Multimastering),主器件也称为主机,其中任 何能够进行发送和接收的设备都可以成为主机。 一个主机能够控制信号的传输和时钟频率。当然, 在任何时间点上只能有一个主机。 I2C总线有3种模式:标准模式(100Kbits/s),快 速模式(400Kbits/s)和高速模式(3.4Mbits/s), 寻址方式有7位和10位方式。
3、I2C术语 表8-7 I2C术语 Transmitter 发送者:向总线发送数据的电路 Receiver 接收者:从总线上接收数据的电路 名称 描述 Transmitter 发送者:向总线发送数据的电路 Receiver 接收者:从总线上接收数据的电路 Master 主机:启动数据传输、产生时钟信号和结束数据传输的电路 Slave 从机:被主机寻址的电路 Multi-master 多主机结构:在不破坏信息的情况下,同一时刻有多个主机试图控制总线 Arbitration 仲裁:在有多个主机试图同时控制总线时,为了不破坏信息,在某一时刻确保只有一个主机控制总线的过程 Synchronization 同步:同步两个或更多电路时钟信号的过程
8.2.5 I2C通信接口 4、I2C总线工作原理 I2C是一种串行总线的外设接口,采用同步方式串 行发送或接收信息,两设备在同一个时钟下工作。 I2C总线只用两根线:串行数据SDA (Serial Data)、 串行时钟SCL (Serial Clock)。 由于I2C只有一根数据线,因此其发送信息和接收 信息不能同时进行。信息的发送和接收只能分时 进行。
4、I2C总线工作原理 I2C总线上的所有器件的SDA线并接在一起,所有 器件的SCL线并接在一起; I2C总线数据传输协议比SPI总线复杂, 因I2C总线器 件没有片选控制线, 所以I2C总线数据传输开始必须 由主器件产生通信的开始条件(START条件); 通信结束时, 由主器件产生通信的停止条件 (STOP 条件)。
4、I2C总线工作原理 当SCL为高时, 使用SDA的变化标识开始条件和停止 条件。 如果SDA由1变到0,则产生START条件; 如果SDA由0变到1,则产生STOP条件。 图8-37 START条件和STOP条件时序
4、I2C总线工作原理 SDA线上的数据在SCL高电平期间必须保持稳定, 否 则会被误认为开始条件或结束条件, 只有在SCL低电 平期间才能改变SDA线上的数据。 …… 图8-38 I2C总线的数据传输波形图
4、I2C总线工作原理 数据传输的时序如图所示。 图8-39 数据传输的时序
4、I2C总线工作原理 I2C的确认位时序如图所示。 图8-40 I2C的确认位时序
4、I2C总线工作原理 目前,有很多半导体集成电路上都集成了I2C接口。 带有I2C接口的单片机有:CYGNAL的C8051F0XX 系列,PHILIPSP87LPC7XX系列,MICROCHIP的 PIC16C6XX系列等。 很多外围器件如存储器、监控芯片等也提供I2C接口。 如ATmel的串行EEPROM AT24CXX系列。
8.2.5 I2C通信接口 5、总线基本操作 I2C规程运用主/从双向通讯。器件发送数据到总线 上,则定义为发送器,器件接收数据则定义为接 收器。主器件和从器件都可以工作于接收和发送 状态。 总线必须由主器件(通常为微控制器)控制,主 器件产生串行时钟(SCL)控制总线的传输方向, 并产生起始和停止条件。
5、总线基本操作 (1)控制字节 在起始条件之后,必须是器件的控制字节,其中高四 位为器件类型识别符(不同的芯片类型有不同的定义, EEPROM一般应为1010),接着三位为片选,最后一 位为读写位,当为1时为读操作,为0时为写操作。如 图所示。 图8-41 控制字节配置
5、总线基本操作 每次只能向芯片中的一个地址写入一个字节的数据。 (2)写操作 (2)写操作 写操作分为字节写和页面写两种操作,对于页面写根 据芯片的一次装载的字节不同有所不同。 字节写指令 首先发送开始位来通知芯片开始进行指令传输; 然后传送设置好的器件地址字节,R/W位应置0; 接着是分开传送十六位地址的高低字节,再传送要 写入的数据; 最后发送停止位表示本次指令结束。 每次只能向芯片中的一个地址写入一个字节的数据。
5、总线基本操作 写入单个字节的时序图如图所示。 图8-42 写入单个字节的时序图
5、总线基本操作 页面写模式 需要发送第一个字节的地址 然后一次性发送多个字节的写入数据后 再发送停止位。 写入过程中其余的地址增量自己由芯片内部完成。 图8-43 页写入的时序图
5、总线基本操作 注意 无论那种写入方式,指令发送完成后,芯片内部开 始写入,这时SDA会被芯片拉高,直到写入完成后 SDA才会重新变的有效,在编写用户程序时可以在 写入的时候不停发送伪指令并查询是否有ACK返回, 如果有ACK返回则可以进行下一步操作 。
5、总线基本操作 (3)读操作 三种基本操作:读当前地址、读任意地址和连续读取。 1)读当前地址 (3)读操作 三种基本操作:读当前地址、读任意地址和连续读取。 1)读当前地址 这种读取模式是读取当前芯片内部的地址指针指向的 数据。 每次读写操作后,芯片会把最后一次操作过的地址作 为当前的地址。 注意:在CPU接收完芯片传送的数据后不必发送低电 平的ACK给芯片,直接拉高SDA等待一个时钟后发送 停止位。
5、总线基本操作 读当前地址时序图如图所示。 图8-44 读当前地址时序图
5、总线基本操作 2)读任意地址 “读当前地址” 可以说是读的基本指令。 读任意地址时是在这个基本指令之前加一“伪操作” , 这个伪操作传送一个写指令,但这个写指令在地址传 送完成后就要结束,这时芯片内部的地址指针指到这 个地址上,再用读当前地址指令就可以读出该地址的 数据。
5、总线基本操作 读任意地址的时序图如图所示。 图8-45 读任意地址的时序图
5、总线基本操作 3)连续读取 连续读取操作时只要在上面二种读取方式中芯片 传送完读取数据后,CPU回应给芯片一个低电平的 ACK应答,那么芯片地址指针自动加一并传送数 据,直到CPU不回应(NOACK)并停止操作。 图8-46 连续读取的时序图
8.2.5 I2C通信接口 6、实例 以单片机对X24C04的操作为例说明I2C接口的应用。 X24C04是XICOR公司的CMOS 4096位串行EEPROM, 内部组织成512×8位, 16字节页面写。与单片机的接 口如图所示。 图8-47 X24C04与单片机的接口
5、总线基本操作 下面通过I2C接口对 X24C04进行单字节 写操作的流程图如图 所示。
6、I2C接口实例: 单片机对X24C04的操作 源程序如下:;子名称:BYTE-WR ;功能描述:写一个字节。;输入参数:累加器A。;输出参数:无 SCL EQU P3.2 SDA EQU P3.3 BYTE-WR: MOV R2, #08H ;1字节8位 SENDA: CLR SCL RLC A ;左移一位 MOV SDA, C ;写一位 SETB SCL DJNZ R2, SENDA ;写完8个字节? CLR SCL ;应答信号 SETB SDA RET
6、I2C接口实例: 单片机对X24C04的操作 使用I2C总线时应注意以下几点: 严格按照时序图的时序要求进行操作; 若与口线上带内部上拉电阻的单片机接口连接,可 以不外加上拉电阻; 为了配合相应的传输速率,在对口线操作的指令后 可用NOP指令加一定的延时; 为了减少意外的干扰信号将EEPROM内的数据改写 可用外部写保护引脚(如果有), 或在EEPROM内部没 有用的空间写入标志字,每次上电时或复位时做一 次检测,判断EEPROM是否被意外改写。
§8.3 并行接口的扩展方法 在需要检测或者控制较多的开关量时,单片机的 I/O口可能无法满足数量上的要求。在这种情况下, 应该考虑I/O接口的扩展。 常见的扩展方法有使用8255进行并行口的扩展, 以及使用串行输入并行输出接口芯片(例如74HC595 接口)扩展输出控制I/O等方法。 下面分别加以介绍。
8.3.1 8255A接口及其应用 1、8255A简介 8255A是Intel公司生产的可编程并行I/O接口芯片, 有3个8位并行I/O接口,用+5V单电源供电,能在 以下三种方式下工作: 方式 0—基本输入/出方式; 方式 1—选通输入/出方式; 方式 2—双向选通工作方式。 8255A 8255A内部结构分为3个部分:与CPU连接 部分、与外设连接部分和控制部分。
8255A的引脚图和内部结构如图所示 8255A的引脚图和内部结构如图所示。 A组控制 B组控制 缓冲器 数据总线 DB o RD WR RESET CS 读/写 控制逻辑 A口 上C口 下C口 B口 PA7~PA0 PC7~PC4 PC3~PC0 PB7~PB0 I/O 外设接口 CPU接口 内部逻辑 内 部 总 线 图8-49 8255A的引脚图和内部结构
8255A的引脚图和内部结构如图所示 8255A的引脚图
1、8255A简介 (1)A口、B口和C口 A口、B口和C口均为8位I/O数据口,但结构上略有 差别。 各个端口用于输入和输出时,均具有锁存功能;用 于输出时,均具有缓冲(暂存或驱动)功能。
1、8255A简介 PA口的各个口线通过编程可以分别设置成单 向输出、单向输入或者分时输入输出(方式2)。 PB口的各个口线通过编程可以分别设置成单 向输出和单向输入。 PC端口可以分为高4位PC7~4和低4位PC3~0 两个独立部分。PC端口可否独立控制取决于 PA端口和PB端口的工作方式。
图8-50 PA口某个口线的 输出锁存和缓冲, 输入锁存结构 图8-51 PB口某个口线的输出锁存和缓冲, 输入缓冲结构
1、8255A简介 (2)I/O口线(24条) PA0~PA7、PB0~PB7、PC0~PC7为24条双向 三态I/O总线,分别与A、B、C口相对应,用 于8255A和外设之间传送数据。 (3)A、B组控制电路 这是两组根据CPU的命令字控制8255A工作方式的电 路。A组控制A口及C口的高4位,B组控制B口及C口 的低4位。
1、8255A简介 (4)数据缓冲器 这是一个双向三态8位的驱动口,用于和单片机的数 据总线相连,传送数据或控制信息(控制字)。 (5)数据线(8条) D0~D7为数据总线, 用于传送CPU和8255A之间的数 据、命令和状态字。 (6)读/写控制逻辑 这部分电路接收单片机送来的读/写命令和选口地 址,用于控制对8255A的读/写。
1、8255A简介 (7)控制线和寻址线(6条) RESET: 复位信号, 输入, 高电平有效。一般和单片机 的复位相连, 复位后, 8255A所有内部寄存器 清0控制寄存器为9Bh, 所有口都为输入方式。 和 :读/写信号线,输入,低电平有效。 : 片选线,输入,低电平有效。 A0, A1: 地址输入线。芯片被选中 ( = 0 )时, 其4种 组合00, 01, 10, 11分别选择A,B,C口和控制寄存器。 (8)电源线(2条) VCC为+5 V,GND为地线。
1、8255A简介 表8-8 对8255A操作的真值表 对8255A操作的真值表如表所示 对8255A而言是输出, 则对CPU是输入
2、8255A控制字 8255A的三个端口具体工作在什么方式下,是通过 CPU对控制口的写入控制字来决定的 用户通过程序把这两个控制字送到8255A的控制寄存 器(A0A1=11)中; 这两个控制字以D7来作为区别标志。
图8-52 8255A方式选择控制字和C口按位置位/复位控制字 复位后为9Bh 方式选择控制字和C口置/复位控制字分别如图a 和b所示。 复位后 1 0 0 1 1 0 1 1 图8-52 8255A方式选择控制字和C口按位置位/复位控制字
2、8255A控制字 C口置/复位控制字 分别如图b所示。 C口具有位操作功能 图8-52 8255A控制字和C口按位置位/复位控制字
2、8255A控制字 注意 C口具有位操作功能,把一个置/复位控制字送入 8255A的控制寄存器,就能将C口的某一位置1或 清0而不影响其它位的状态。 三个端口的数据传送模式 PA端口具有3种传送模式可供选用。 PB端口具有2种传送模式可供选用。 PC端口的传送模式取决于PA端口和PB端口的传送 模式。
(1)传送模式0 —基本输入/出方式 模式0的功能特点: 是直接控制输入或输出传送。不需要查询和中断控制。 PA、PB和PC端口都可以编程设置为模式0传送。 PA、PB、PC7~PC4、PC3~PC0这4个端口最多有 16种输入输出组合。 模式0传送在计算机系统中很多有实际应用的例子。 例如在个人计算机系统中,8255A并行接口电路的PA 端口被设置成模式0输入,接收键盘输入的按键扫描码。 又如,在半导体数码管显示控制电路中,通常设置 8255A并行接口电路的PA和PB端口为模式0输出,分 别进行位控制和段控制。
2、8255A控制字 (2)传送模式1 —选通输入/出方式 模式1的功能特点: 采用查询或者中断的方式控制输入或输出传送。 PA端口编程为模式1传送后,要占用PC端口的部分 资源。 PB端口编程为模式1传送后,也要占用PC端口的部 分资源。 PC端口的剩余资源仍然可以独立操作。
PA端口模式1输入传送的逻辑结构, 如图所示。 中断允许位 由PC4控制置位复位 GO PC口输出、输入缓冲器各自独立 图8-53 PA端口模式1输入传送的逻辑结构
2、8255A控制字 功能说明: ① 是选通输入信号, 来自外设电路, 低有效, 表示数据已经打入PA端口锁存器。 ① 是选通输入信号, 来自外设电路, 低有效, 表示数据已经打入PA端口锁存器。 ②IBF是输入缓冲器满信号, 由8255A输出, 高有效, 表 示PA端口数据尚未被CPU读取, 不能再接收新数据。 当IBF为低电平时, 表示输入缓冲器空, 可以接收新 数据。 IBF信号由 选通信号 激活,随CPU的读控制信 号 的撤消而失效。
2、8255A控制字 端口模式1输入传送的时序图:
2、8255A控制字 ③INTR是中断请求信号,输出到主机电路,要求CPU 读取PA端口数据。INTR信号也可以作为查询信号使 用。 ④INTR信号能否激活,受8255A内部的中断允许触发 器INTE的控制。INTE=1,允许激活INTR信号。 INTE=0,禁止激活INTR信号。 INTEA由PC4控制置位复位, INTEB由PC2控制置位复位。
2、8255A控制字 单片机扩展的I/O口寻址方法与外部数据存储器相同, 所有扩展I/O口, 及通过扩展I/O口连接的外设都与外 部RAM统一编址。 对片外I/O口的输入/输出指令就是访问外部RAM指令。 可用下面代码对中断允许触发器INTE置位(设命令端 口地址为0E003H) : MOV DPTR,#0E003H ;指向8255命令端口 MOV A,#00001001B ;PC4置1,允许激活PA端口的INTRA信号 MOVX @DPTR,A ;写入PC端口操作字 MOV A,#00000101B ;PC2置1,允许激活PB端口的INTRB信号 MOVX @DPTR,A ;写入PC端口操作字
2、8255A控制字 ⑤PB端口设置为模式1输入时,分别占用PC0(INTR)、 PC1(IBF) 和PC2( ) 。 ⑥PC端口剩余的PC7和PC6,可编程为两位输入或输出, 也可单独进行位操作。 由PC2控制置位复位 PA端口模式1输入传送控制字 PB端口模式1输入传送的逻辑结构
2、8255A控制字 PA端口模式1输出传送的逻辑结构如图所示。 中断允许位 由PC6控制置位复位
2、8255A控制字 功能说明: ① 是输出缓冲器满信号, 由8255A输出, 低有效, 表示PA端口数据已经准备就绪, 可供外设电路读取。 信号由 信号激活。当 信号生效后, 信号返回高电平, 撤销输出缓冲器满的状态。 当CPU又把数据写入PA端口后, 随着写控制信号 的撤销, 信号再次自动激活(低电平)。
2、8255A控制字 端口模式1输出传送的时序图:
2、8255A控制字 ③INTR是中断请求信号, 输出到主机, 表示PA口已空闲, CPU可再次写入数据。INTR也可作为查询信号用。 ④INTR信号能否激活,受8255A内部的中断允许触发 器INTE的控制。用PC6来控制是否激活INTR信号。 由PC6控制置位复位 PA端口模式1输出传送的逻辑结构
2、8255A控制字 中断允许触发器INTE的置位控制代码如下 (假设命令 端口地址为0E003H): MOV DPTR,#0E003H ;指向8255命令端口 MOV A,#00001101B ;PC6置1,激活PA端口的INTR信号 MOVX @DPTR,A ;写入PC端口操作字 MOV A,#00000101B ;PC2置1, 激活PB端口的INTR信号 MOVX @DPTR,A ;写入PC端口操作字。
2、8255A控制字 ⑤PB端口设置为模式1输出时,分别占用PC0(INTR) 、 PC1( ) 和PC2( ) 。 ⑥PC端口剩余的PC5和PC4,可以编程为两位输入或 者输出,也可以单独进行位操作。 由PC6控制置位复位
2、8255A控制字 (3)传送模式2 —双向选通工作方式 只有PA端口可编程设置为模式2传送。这是采用中断 或者查询方式控制的分时输入和输出的双向传送方 式。模式2的逻辑结构如图所示。
3、单片机与8255A的接口设计 若STC15F2K60S2单片机系统以总线扩展方式构 成,则P0口用于数据总线D7~D0和地址总线低8位 A7~A0, P2口用作地址总线的高8位A15~A8, 其他口也具有第 二功能,常被使用,真正能提供给用户使用的并行 口并不多。 可以使用8255A进行并行I/O口的扩展。 8255A和单片机连接时,可以为外设提供三个8位的 I/O端口:A口、B口和C口,三个端口的功能完全由 编程来决定。
设8255A的命令口地址为7FF3H, PA口地址为7FCF0H, PB口地址为7FDF1H, PC口地址为7FEFF2H。(非唯一) 8255A与STC15F2K60S2单片机的接口电路。 设8255A的命令口地址为7FF3H, PA口地址为7FCF0H, PB口地址为7FDF1H, PC口地址为7FEFF2H。(非唯一) 153页8255A口地址对应图 P2口是高8位地址 P0口低8位地址任意 设没用到地址线为1 P2.0, P2.1选口(含命令口) 图8-56 8255A与STC15F2K60S2单片机的接口电路
4、8255A并行接口的编程操作 8255A并行接口的编程操作分为: 写入8255A命令字, 设置8255A工作模式与传送方向。 写入PC端口操作字, 设置PC端口位输入或输出状 态。 8255A接口电路编程操作示例代码如下: MOV DPTR, #7FF3H ;指向8255命令端口 MOV A, #80H ;命令字:PA、PB和PC端口直接输出 MOVX @DPTR, A ;写命令到命令口 MOV DPTR, #7CF0H ;指向PA端口 MOVX @DPTR, A ;数据写入PA端口 MOV DPTR, #7FF3H ;指向8255命令端口 MOV A, #9H ;PC端口操作字: 0 000 100 1 MOVX @DPTR, A ;PC4输出高电平 (C口) (PC4) (置位)
8.3.2 74HC595接口及其应用 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-57 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-9所示。 表8-9 74HC595真值表 输入 输出管脚 SI SCK /SCLR RCK /G × H QA-QH输出高阻态 L QA-QH输出有效值 × L 移位寄存器清0 L ↑ H × 移位寄存器第一级(位)存储L 移位寄存器第一级(位)存储H × ↓ H 移位寄存器状态保持 × ↑ 输出存储器锁存移位寄存器中的状态值 × ↓ 输出存储器状态保持
8.3.2 74HC595接口及其应用 74HC595与STC15F2K60S2单片机的接口电路如图所示。
8.3.2 74HC595接口及其应用——应用演示程序: ;==========输出锁存器输出数据子程序 ============= SDATA_595 EQU P1.0 ;串行数据输入 SCLK_595 EQU P1.1 ;移位时钟脉冲 RCK_595 EQU P1.2 ;输出锁存器控制脉冲 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP, #60H MOV R0, #0FEH ; R0存显示的数据, 位值0使灯亮 MAIN1: LCALL OUT_595 LCALL DELAY MOV A, R0 RL A ; R0显示数据循环左移 MOV R0, A LJMP MAIN1
8.3.2 74HC595接口及其应用 ;---------------- 输出锁存器输出数据子程序 ---------------- OUT_595:LCALL WR_595 CLR RCK_595 NOP SETB RCK_595 ;上升沿将数据送到输出锁存器 RET
8.3.2 74HC595接口及其应用 ;----------------- 移位寄存器接收数据子程序 ------------------ WR_595: MOV R4, #08H ;移位位数(一个字节)→R4 MOV A, R0 ; R0存显示的数据, 位值0使灯 WR_LOOP:RLC A ; 显示数据带进位C循环左移 MOV SDATA_595, C ; 数据经进位C串行输出 SETB SCLK_595 ;上升沿发生移位 NOP CLR SCLK_595 DJNZ R4, WR_LOOP RET ; 循环8次, 依次将8位数据串行输出
8.3.2 74HC595接口及其应用 ;------------------------ 延时子程序--------------------- DELAY:MOV R5, #03H DEL0:MOV R6, #0FFH DEL1:MOV R7, #0FFH DJNZ R7, $ DJNZ R6, DEL1 DJNZ R5, DEL0 RET ;================================== END
对应的C语言程序如下: /*******74HC595 走马灯演示程序 *********/ #include “reg51.h” //51芯片管脚定义头文件 #include “intrins.h” //内部包含延时函数 _nop_() #define uchar unsigned char #define uint unsigned int uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; sbit SDATA_595=P1^0; //串行数据输入 sbit SCLK_595 =P1^1; //移位时钟脉冲 sbit RCK_595 =P1^2; //输出锁存器控制脉冲 uchar bdata temp; sbit mybit=temp^7;
8.3.2 74HC595接口及其应用 /***********延时子程序**************/ void delay(int ms) { int k; while(ms--) { for(k=0; k<250; k++) _nop_(); }
8.3.2 74HC595接口及其应用 /***将显示数据送入74HC595内部移位寄存器***/ void WR_595(void) { uchar j; for(j=0; j<8; j++) { temp=temp<<1; SDATA_595=mybit; SCLK_595=1; //上升沿发生移位 _nop_(); SCLK_595=0; }
8.3.2 74HC595接口及其应用 /**将移位寄存器内的数据锁存到输出寄存器并显示**/ void OUT_595(void) { RCK_595=0; _nop_(); RCK_595=1; //上升沿将数据送到输出锁存器 RCK_595=0; }