http://www.wenyuan.com.cn/webnew/
第 9章 串行扩展技术
(课时,6学时)
http://www.wenyuan.com.cn/webnew/
教学目的
了解串行扩展的分类和特点。
了解 Microware,1-wire,USB和 CAN总线。
掌握 I2C总线的原理。
掌握 SPI总线的原理。
学习重点和难点
I2C总线的软件模拟。
SPI总线的软件模拟。
http://www.wenyuan.com.cn/webnew/
第 9章 串行扩展技术
9.1 串行扩展概述
9.2 UART串行扩展接口
9.3 I2C串行扩展总线
9.4 SPI串行扩展接口
本章小结
习题
http://www.wenyuan.com.cn/webnew/
9.1 串行扩展概述
9.1.1 串行扩展的种类
9.1.2 串行扩展的特点
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类新一代单片机技术的显著特点之一就是串行扩展总线和接口的推出。常用的串行扩展总线和接口有 I2C总线,SPI总线、
Microware总线,1-wire总线和 CAN总线等。
( 1) UART串行扩展接口
( Universal Asynchronous Receiver/Transmitter)
UART通用异步收发器,既能同步又能异步通信的硬件电路称为 UART。 UART是用于控制计算机与串行设备的芯片,它提供了 RS- 232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用 RS- 232C接口的串行设备通信了。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 2) I2C( Inter Integrated Circuit)串行扩展总线
I2C总线是 Philip公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。
( 3) SPI(Serial Peripheral Interface) 串行扩展接口
SPI总线是 Motorola公司提出的一种同步串行外设接口。允许 MCU与各种外围设备以同步串行方式进行通信。其外围设备种类繁多,从最简单的 TTL移位寄存器到复杂的 LCD显示驱动器、网络控制器等,可谓应有尽有。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 4) Microware串行扩展接口
Microware总线是 NS公司提出的串行同步双工通信接口,用于 8位 COP800系列单片机和 16位 HPC系列单片机。
( 5)单总线( 1-wire)串行扩展总线
1-wire总线是 Dallas公司研制开发的一种协议,用于便携式仪表和现场监控系统。
( 6) USB( Universal Serial BUS)串行扩展总线
USB总线是 Compaq,Intel,Microsoft,NEC等公司联合制定的一种计算机串行通信协议。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 7) CAN( Controller Area Network)串行扩展总线
CAN总线是德国 Bosch公司最先提出的多主机局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通信,在车载各电子控制装置 ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、
变速箱控制器、仪表装备。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点串行扩展总线技术是新一代单片机技术发展的一个显著特点。
与并行扩展总线相比,串行扩展总线有电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等优点。
常用串行扩展总线和接口的特点简要说明如下:
( 1) UART串行扩展接口
UART接口是二线制,8051单片机的 UART既能作通用异步接收和发送器,又能作同步移位寄存器。它可以实现 8051单片机系统之间点对点的单机通信或多机通信,也可以实现扩展
I/O口。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 2) I2C总线
I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。 I2C总线简单,结构紧凑,易于实现模块化和标准化。
( 3) SPI串行扩展接口
SPI总线是三线制,可直接与多种标准外围器件直接接口,
在 SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。即使在有总线扩展能力的系统中采用 SPI设备也可以简化电路设计,省掉很多常规电路中的接口器件,从而提高了设计的可靠性。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 4) Microware串行扩展接口
Microware总线是三线制,由一根数据输出( SO)线、一根数据输入( SI)线和一根时钟( SK)线组成。所有从器件的时钟线连接到同一根 SK线上,主器件向 SK线发送时钟脉冲信号,从器件在时钟信号的同步沿输出 /输入数据。主器件的数据输出线 SO和所有从器件的数据输入线相接,从器件的数据输出线都接到主器件的数据输入线 SI上。
( 5) 1-wire总线
1-wire总线是利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合 1-wire协议的从芯片都有一个唯一的地址,包括 8位分类码,48位的序列号和 8位 CRC代码。
主芯片对各个从芯片的寻找依据这 64位的不同来进行。单总线节省 I/O引脚资源、结构简单、成本低廉、便于总线扩展和维护。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 6) USB串行扩展接口
USB比较于其他传统接口的一个优势是即插即用的实现,即插即用( Plug-and-Play)也称为热插拔( Hot Plugging)。
数据传输速度快,USB1.1接口的最高传输率可达 12 Mb/s;
USB2.0接口的最高传输率可达 480 Mb/s。扩展方便,使用
USB Hub扩展,可以连接 127个 USB设备,连接的方式十分灵活。
( 7) CAN总线在由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。
CAN 可提供高达 1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了 CAN的抗电磁干扰能力。当信号传输距离达到 10km时,CAN 仍可提供高达 50Kbit/s的数据传输速率。
http://www.wenyuan.com.cn/webnew/
9.2 UART串行扩展接口
9.2.1 串行口工作方式
9.2.2 UART串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
串行口有四种工作方式,每一种工作方式都有自己的特点。
其中方式 0是 8位同步通信方式,用于串 /并或并 /串转换中,
常用的串 /并转换芯片有 74LS164和并 /串转换芯片 74LS165
等。
74LS164 是一个双列直插式 8位串入 /并出移位寄存器,其引脚如下图所示。 其引脚定义如下:
A:同步串行数据输入端
B:同步串行数据输入端
Q0~ Q7,8位并行数据输出端
CK:时钟脉冲输入端
CLR:数据清除端 (清除输出数据,通常用在移位完成时 )
GND:接地端
VCC:电源端
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
74LS165 是一个双列直插式 8位并入 /串出移位寄存器,其引脚如下图所示。
其引脚定义如下:
LD:重新装载数据端 (通常用在数据完全移出后 )
CK:内部数据移位时钟脉冲输入端
D0~ D7:并行数据输入端
Q11:取反串行输出端
GND:接地端
Q11:串行输出端
SE:用于填充数据移出后的空位的逻辑电平信号
COK:和 CK联合控制数据移动
VCC:电源端
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
1
2
3
4
5
6
7
10
9
8
11
12
13
14 A
B
Q
7
G N D CK
C L R
V
CC
Q
6
Q
5
Q
4
Q
3
Q
2
Q
1
Q
0
12
13
14
15
16
SE
D
7
V
CC
D
6
D
5
D
4
CO K
Q
11
1
2
3
4
5
6
7
LD
CK
D
3
Q
11
D
2
D
1
D
0
G N D
9
11
10
8
74LS164引脚图 74LS165引脚图
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
【 例 1】 利用 74LS164串行输入并行输出芯片作一个简单的电子钟,要求四个数码管显示时钟;其中 LED1显示小时的十位,
LED2显示小时的个位,LED3显示分钟的十位,LED4显示分钟的个位。
解,原理图如下图,采用单片机的串行口输出字形码,用
74LS164和 74LS138作为扩展芯片。
74LS164的功能是将 AT89C2051串行通信口输出的串行数据译码并在其并口线上输出,从而驱动 LED数码管。
74LS138是一个 3线 -8线译码器,它将单片机输出的地址信号译码后动态驱动相应的 LED。因 74LS138电流驱动能力较小,故用末级驱动三极管 9013作为地址驱动。将 4只 LED的字段位都连在一起,它们的公共端则由 74LS138分时选通,
这样任何一个时刻,都只有一位 LED在点亮,也即动态扫描显示方式,其优点使用串行口进行 LED通信程序编写相当简单,用户只需将需显示的数据直接送串口发送缓冲器,等待串行中断即可。
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例串行动态 LED扫描电路
P3.2
P3.3
TX
RX
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
ORG 0000H
LJMP MAIN
ORG 0040H
MAIN,MOV SCON,#00H ;初始化串口为方式 0
MOV R3,#00H
LOOP,MOV R4,#0E8H
DELAY,LCALL DISPLAY ;动态扫描显示
DJNZ R4,DELAY
INC R3 ;显示数字增 1
CJNE R3,#0AH,LOOP ;不等于 10转移
LJMP MAIN
下面是一个简单的动态扫描程序,如果再利用上第六章的定时器就可做成一个完整的电子钟,四个数码管显示为 00,00这种形式。在本例中冒号就不显示出来了,分别用 20H,21H,22H,23H地址存放时间的时钟的十位、时钟的个位、分钟的十位、分钟的个位。用中断方式做一个不带时钟芯片的电子钟,请读者自己完成。
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
DISPLAY,CLR P3.2 ;显示 LED1
CLR P3.3
LCALL DISP
LCALL DELAY1
SETB P3.3 ;显示 LED2
LCALL DISP
LCALL DELAY1
SETB P3.3 ;显示 LED3
CLR P3.2
LCALL DISP
LCALL DELAY1
SETB P3.2 ;显示 LED4
SETB P3.3
LCALL DISP
LCALL DELAY1
RET
参考程序,
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
DISP,MOV A,R3 ;将字形码送串口
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV SBUF,A
WAIT,JNB TI,WAIT ;等待串口传送
CLR TI
RET
DELAY1,MOV R6,#10H ;动态扫描的时间
LOOP1,MOV R7,#38H ;间隔
DJNZ R7,$
DJNZ R6,LOOP1
RET
TABLE,DB 3FH,06H,,5BH ; 0~9的字形码
DB 4FH,66H,6DH
DB 7DH,07H,,7FH,,6FH
参考程序,
http://www.wenyuan.com.cn/webnew/
9.3 I2C串行扩展总线
9.3.1 I2C总线的结构原理
9.3.2 I2C总线的软件模拟
9.3.3 I2C串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线是 芯片间串行传输总线 。它用 数据线 SDA和 时钟线
SCL两根线实现 全双工 同步数据传送,可方便地构成多机系统和外围器件扩展系统。
I2C总线采用了 器件地址的硬件设置 方法,通过 软件寻址 完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。
按照 I2C总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的 主机能够依照这些状态码自动地进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成 I2C总线的初始化,启动 I2C总线,就能自动完成规定的数据传送操作。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
#1 #2 #3 #4
V DD
S DA
S CL
R P R P
S DA S DA S DA S DA S CL S CL S CL S CL
I2C总线接口电路结构
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线接口为 开漏 或 开集电极输出,需 加上拉电阻 。
系统中所有的单片机、外围器件都将 数据线 SDA和时钟线
SCL的同名端相连在一起,总线上的所有节点都由器件和管脚给定地址。
系统中可以 直接连接 具有 I2C总线接口的单片机,也可以通过 总线扩展芯片 或 I/O口的软件仿真 与 I2C总线相连。
在 I2C总线上可以挂接各种类型的外围器件,如 RAM/EEPROM、
日历 /时钟芯片,A/D转换器,D/A转换器、以及由 I/O口、
显示驱动器构成的各种模块。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
SDA 和 SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压;当总线空闲时,这两条线路都是高电平;连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。
I2C 总线上 数据的传输速率
在标准模式下可达 100kbit/s。
在快速模式下可达 400kbit/s。
在高速模式下可达 3.4Mbit/s 。
连接到总线的 接口数量 只由总线电容是 400pF 的限制决定关于高速模式主机器件的信息。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线上数据传送的基本单位为字节,采用低位在前的格式。主从器件之间一次传输的数据称为一帧,由启动信号、
若干个数据字节和应答位以及停止信号组成。
I2C的 主要命令 只有 读,写 两种,虽然读写的字节根据具体器件的不同而不同,但其时序关系不会发生改变。
下位机只要具备 I2C的基本时序即可。 这些基本时序包括:
启动,写字节,读字节,应答位,停止信号,并可以组合成两个子程序:读 N字节子程序、写 N字节子程序。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线最显著的特点是 规范的完整性,结构的独立性 和 用户使用时的,傻瓜,化 。
I2C总线有严格的规范,如接口的电气特性、信号时序、信号传输的定义、总线状态设置、总线管理规则及总线状态处理等。
在 I2C总线规范中,总线上的器件节点的电气特性及地址给定都具有较强的独立性,而且各节点上的器件、模块都有相对独立的地址编号。
严格、完善的规范,并将这些规范的应用尽可能,傻瓜,化,除了有充分的硬件支持外,在软件方面,Philips公司为用户提供了一套完善的总线状态处理软件包,以致于用户可以不去熟悉 I2C总线的规范,不去理睬总线的管理方法,只要掌握 I2C总线的应用程序设计方法就可方便地使用 I2C总线,并且能很快地掌握 I2C总线系统的软、硬件设计方法。
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
1.产生起始位和停止位
I2C总线的起始和停止条件如下图所示。
分别用 P1.0和 P1.1模拟 I2C总线的时钟线和数据线,则可给时钟线 SCL和数据线 SDA赋值。程序如下:
S D A
S C L
起始条件 停止条件
SDL EQU P1.0
SCA EQU P1.1
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
2.发送起始条件当时钟 SCL为高电平时,数据线 SDA从高电平向低电平切换表示起始条件,即启动 I2C总线数据传送。模拟时序产生时钟 SCL和 SDA发送的起始条件子程序如下:
使用不同频率的晶体振荡器,则要相应增删程序段中 NOP
指令的条数,以满足时序的要求。
START,SETB SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SDA
NOP
NOP
CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
3.发送停止条件当时钟 SCL为高电平时,数据线 SDA由低电平向高电平切换表示停止条件,即停止 I2C总线数据传送。模拟时序产生时钟 SCL和 SDA发送的停止条件子程序如下:
使用不同频率的晶体振荡器,则要相应增删程序段中 NOP
指令的条数,以满足时序的要求。
STOP,CLR SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
SETB SDA
NOP
NOP
CLR SDA
CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
4.
I2C总线上的第 9个时钟脉冲对应于应答位,当该位为低电平表示应答 ACK,当该位为高电平表示非应答 ACK。 I2C总线的应答位和非应答位如下图所示。发送 ACK和 ACK子程序如下。
发送 A CK 发送 A CK
SDA
SCL
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
(1) 发送应答位 ACK
由上图可知,当发送应答位 ACK时,只需将 SDA设为低电平、
SCL设为高电平,其区间的长短根据晶振的频率确定,即改变下列子程序中的 NOP数即可达到要求,发送 ACK子程序如下:
YACK,CLR SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SCL
SETB SDA
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
(2) 发送非应答位由上图可知,当发送非应答位 ACK时,只需将 SDA设为高电平,SCL设为高电平,其区间的长短根据晶振的频率确定,
即改变下列子程序中的 NOP数即可达到要求,发送 ACK子程序如下:
YNACK,SETB SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SCL
CLR SDA
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
5.应答位检查子程序根据 I2C总线协议,在接收到一个字节后,要发送一个应答位以供检查,此时可设置一个标志位表示应答状态。当检查结果为正常应答时,则标志位置 0;否则,标志位置 0。
应答位检查子程序如下:
TACK,SETB SDA ;设置 SDA为输入方式
SETB SCL ;产生第 9个时钟脉冲
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR 30H
MOV C,SDA
JNC TEND ;若正常应答,则转移
SETB 30H
TEND,CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
6.字节数据发送子程序根据 I2C总线协议,数据在时钟线为低电平时变化,高电平时稳定,每一个时钟脉冲传送一位。模拟 I2C总线的 SDA接在并行口线,并口中无移位寄存器,要通过指令完成移位后再从 SDA串行输出。 I2C总线的字节数据传送如下图所示。
将待发送的字节存于累加器 A中,字节数据发送子程序如下:
SC L
SD A
起始 停止
1 A C K 2
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟WOBYT,MOV R4,#08H ;要发送的数据长度为 8位LOOP2,RLC A ;将待发送的位送入位 CY中
JC LOOP1 ; CY位为 1转到 LOOP1
CLR SDA ;置为低电平,发送 0
SETB SCL ;时钟高电平数据保持数据稳定
NOP ;调节 NOP的个数,使延时 ≥4.7u s
NOP
CLR SCL ;时钟脉冲变为低电平,准备改变数据
DJNZ R4,LOOP2 ;若 8位未发送完,转 LOOP2继续
RET ; 8位发送完成返回
LOOP1,SETB SDA ;置为高电平,发送 1
SETB SCL ;时钟为高电平保持数据稳定
NOP ;调节 NOP的个数,使延时 ≥4.7u s
NOP
CLR SCL ;时钟脉冲变为低电平,准备改变数据
CLR SDA ;将数据改为低电平
DJNZ R4,LOOP2 ;若 8位未发送完,转 LOOP2继续
RET ; 8位发送完成返回字节数据发送子程序
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
7.字节数据接收子程序根据 I2C总线协议,数据必须在时钟处于高电平期间,数据稳定时才能读取数据,在经过八次的时钟转换后,读出八位即一个字节数据。 I2C总线起始字节如下图所示。将读出的字节数据存于 R5中,接收字节数据子程序如下:
A CK
起始字节
SCL
SDA
起始 停止
1 2 7 8 9
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟接收字节数据子程序
ROBYT,MOV R4,#08H ;要接收的数据长度为 8位
LOOP3,SETB SDA ;设置 SDA为输入方式
SETB SCL ; SDA上数据有效
MOV C,SDA ;读入 SDA引脚状态
MOV A,R5 ;将存放结果送入 A中
RLC A ;将读出的 1位移入 A中
MOV R5,A
CLR SCL ;一个脉冲结束,SDA上数据无效
DJNZ R4,LOOP3 ;未读完 8位,转到 LOOP3
RET ;读完返回
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
8.多个字节数据发送子程序在完成上述模拟子程序后,根据 I2C总线协议,可编写多个字节数据发送子程序。要发送的字节数存放在 R5中,要发送的数据块的第一个数据的地址为 40H,外围器件的地址存放在 60H中,参考程序如下:
WDBYT,LCALL START ;起始
WLP1,MOV A,60H ;设 60H为存放的控制字
LCALL WOBYT ;发送读控制字节
LCALL TACK ;检查应答位
JB 30H,WLP1 ;无应答位,重发
MOV R0,#40H ; 40H为第一个数据的首地址
WLP2,MOV A,@ R0 ;读一个字节数据
LCALL WOBYT ;发送
LCALL TACK ;检查应答位
JB 30H,WLP1 ;无应答位,重发
INC R0 ;指向下一个要发送的数据
DJNZ R5,WLP2 ;要发送数据未发完,再发送
LCALL STOP ;全部数据发完,停止
RET ;返回
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
9.多个字节数据接收子程序根据 I2C总线协议,同样可编写多个字节数据接收子程序。要接收的字节数存放在 R5中,要接收的数据块存放的首地址为 50H,外围器件的地址存放在 60H中,参考程序如下:
RDBYT,LCALL START ;起始
RLP1,MOV A,60H ;设 60H为存放的控制字
LCALL WOBYT ;发送读控制字节
LCALL TACK ;检查应答位
JB 30H,RLP1 ;无应答位,重发
MOV R0,#50H ; 50H为第一个数据的首地址
RLP2,LCALL ROBYT ;读入一个字节
MOV @R0,A
DJNZ R5,RLP3 ;要接收数据未读完,再读入
LCALL YNACK ;发送非应答位
LCALL STOP ;全部数据发完,停止
RET ;返回
RLP3,LCALL YACK ;发送应答位
INC R0 ;指向下一个要存放数据的地址
SJMP RLP2 ;调节 NOP的个数,使延时 ≥4.7u s
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
【 例 2】 将 AT89C2051片内 RAM40H~ 47H单元中的八个 8位数据通过 I2C总线接口传送到存储器 AT24C01的 50H~ 57H单元中。
解,AT24C01是 Atmel公司生产的具有 I2C总线接口的 E2PROM,是目前应用较多的 AT24C×× 系列存储器中的一种,芯片存储容量为 1Kb(128× 8位 )。 AT24C01引脚如下图所示。
其引脚定义如下:
SCL:串行时钟端。
SDA:串行数据端,漏极开路,
需接上拉电阻到 VCC。
WP:写保护,
当 WP为高电平时存储器只读;
当 WP为低电平时存储器可读可写。
A2~ A0:芯片地址。
1
2
3
4 5
6
7
8 A0
A1
V SS
V CC
A2
SC A
SC L
WP
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
AT89C2051与 AT24C01通过串行总线接口传送数据的接线如下图所示。因 AT89C2051没有 I2C总线接口,可用软件的办法来模拟 I2C总线操作。 P1.0模拟 I2C总线的时钟线 SCL,
P1.1模拟 I2C总线的数据线 SDA。
A T 89C 205 1
P 1,0
P 1,1
A T 24C 01
SC L
SC A
V CC
10 k Ω ×2
AT89C2051与 AT24C01的接口接线
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
AT24C01的读写操作有多种形式,写操作有两种类型,字节写 和 页面写 ;读操作有三种类型,读当前地址内容,读随机地址内容 和 读顺序地址内容 。
AT24C01写 N个字节数据的操作时序如下图所示,
AT24C01读 N个字节数据的操作时序如下图所示。
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例上图中器件地址说明如下:
① 器件地址码的第 7~ 4位 ——从器件地址位,用于确认器件的类型。
AT24C01的器件地址码为 1010,1010 表示从器件为串行
E2PROM。
② 器件地址码的第 3~ 1位 ——1~ 8片的 片选或存储器内的页面地址选择位 。此三个控制位用于选片或者内部页面选择。
如在存储容量 8Kb(1024× 8位 )的 AT24C08内部,存储矩阵分为 4个页面,每一页面有 256个字节。通过器件地址码的第 2位和第 1位,可以选择数据读写的页面。
③ 器件地址码的第 0位 ——读、写 (R/W)操作控制码 。若此位为 1,下一字节进行读操作 (R);此位为 0,下一字节进行写操作 (W)。
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例编程说明:
AT24C01每接收一个字节后,都必须发送一个确认应答信号位 ACK,即时序中的响应信号。此时 AT89C2051必须产生一个与此确认位相应的时钟脉冲。
AT24C01在读写操作时,具有地址自动加 1功能,即读、写完某一地址空间后,会自动指向下一个地址单元。
将 AT89C2051片内 RAM40H~ 47H单元中的八个 8位数据通过
I2C总线接口传送到存储器 AT24C01的 50H~ 57H单元中,参考子程序如下。
程序中用到的子程序均为 9.3.2节所编写的模拟 I2C总线的子程序。
http://www.wenyuan.com.cn/webnew/
参考子程序
ICW,LCALL START ;发送起始信号
ICWLP1,MOV A,# 0A0H ; #10100000B器件地址码,
LCALL WOBYT ;发送器件地址
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
ICWLP2,MOV A,# 50H ; 50H为待写存储单元首地址
LCALL WOBYT ;发送待写存储单元地址
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
MOV R5,#8 ;待发送数据块的长度
MOV R0,#40H ; 40H为第一个数据的首地址
ICWLP3,MOV A,@ R0 ;读一个字节数据
LCALL WOBYT ;发送
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
INC R0 ;指向下一个要发送的数据
DJNZ R5,WLP2 ;要发送数据未发完,再发送
LCALL STOP ;全部数据发完,停止
LCALL DELAY ;延时,等待 AT24C01内部写操作
RET ;返回
http://www.wenyuan.com.cn/webnew/
9.4 SPI串行扩展接口
9.4.1 SPI总线的结构原理
9.4.2 SPI总线的软件模拟
9.4.3 SPI串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
SPI总线系统是一种 同步串行外设接口,允许 MCU与各种外围设备以同步串行方式进行通信来交换信息。
SPI总线接口一般使用 4根线,串行时钟线 SCK,主机输入 /
从机输出数据线 MISO,主机输出 /从机输入数据线 MOSI和 低电平有效的从机选择线 SS。
由于 SPI系统总线只需 3根公共的时钟数据线和若干位独立的从机选择线,在 SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。
SPI总线包括 1根串行同步时钟信号线以及 2根数据线。 SPI
总线接口电路结构如下图所示。
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
S CK
M OS I
M IS O
M CU
MI SO MO SI SCK
器件 1
SS
S CK
M OS I
M IS O
MI SO MO SI SCK
器件 2
SS
MI SO MO SI SCK
器件 3
SS
SPI总线接口电路结构
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出的串行同步时钟极性和相位可以进行配置 。
时钟极性 (CPOL)对传输协议没有重大的影响。
如果 CPOL=0,串行同步时钟的空闲状态为低电平;
如果 CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位 (CPHA)能够用于选择两种不同的传输协议进行数据传输。
如果 CPHA=0,在串行同步时钟的第一个跳变沿 (上升或下降 )
数据被采样;
如果 CPHA=1,在串行同步时钟的第二个跳变沿 (上升或下降 )
数据被采样。
SPI主模块和与之通信的外设间时钟相位和极性应该一致。
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
特点,由于 SPI系统总线一共只需 3~ 4位数据线和控制线即可实现与具有 SPI总线接口功能的各种 I/O器件进行连接,
而扩展并行总线则需要 8根数据线,8~ 16位地址线,2~ 3
位控制线,因此,采用 SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和 I/O口线,提高设计的可靠性。
应用,在 MCS–51系列等不具有 SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用 SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。
http://www.wenyuan.com.cn/webnew/
9.4.2 SPI总线的软件模拟
对于没有提供 SPI接口的单片机而言,通常可使用软件的办法来模拟 SPI的总线操作,包括串行时钟、数据输入和输出。
Atmel公司生产的 EEPROM具有 SPI接口,存储容量为 4Kb的
AT25040就有 SPI接口,MCS–51系列单片机与 AT25010的 SPI总线接口接线如下图所示。
图中,P1.0模拟 SPI的数据输出端 (MOSI),P1.1模拟 SPI的
SCK输出端,P1.2模拟 SPI的从机选择端 (SS),P1.3模拟 SPI的数据输入端 (MISO)。下面给出模拟 SPI串行输入、串行输出和串行输入 /输出的 3个子程序。
8051
P 1.0
P 1.1
P 1.2
P 1.3
A T 250 10
SI
S C K
CS
SO
http://www.wenyuan.com.cn/webnew/
1,MCU串行输入子程序 SPIIN
从 AT25040的 SO端接收 8位数据并放入寄存器 R0中。参考程序如下:
SPIIN,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
SPIIN1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
MOV C,P1.3 ;从机输出送进位 C
RLC A ;左移至累加器 A
SETB P1.1 ;使 P1.0(时钟 )输出为 1
DJNZ R1,SPIIN1 ;判断是否循环 8次 (8位数据 )
MOV R0,A ;8位数据送 R0
RET
http://www.wenyuan.com.cn/webnew/
2,MCU串行输出子程序 SPIOUT
将 MCS–51单片机中 R0寄存器的内容传送到 AT25040的 SI端。
参考程序如下:
SPIOUT,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
MOV A,R0 ;8位数据送累加器 A
SPIOUT1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
RLC A ;左移至累加器 A最高位至 C
MOV P1.0,C ;进位 C送从机输入
SETB P1.1 ;使 P1.1(时钟 )输出为 1
DJNZ R1,SPIOUT1 ;判是否循环 8次 (8位数据 )
RET
http://www.wenyuan.com.cn/webnew/
3,MCU串行输入 /输出子程序 SPIIO
将 MCS–51单片机 R0寄存器的内容传送到 AT25040的 SI端,同时从 AT25040的 SO端接收 8位数据。参考程序如下:
SPIIO,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
MOV A,R0 ;8位数据送累加器 A
SPIIO1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
MOV C,P1.3 ;从机输出送进位 C
RLC A ;左移至累加器 A最高位至 C
MOV P1.0,C ;进位 C送从机输入
SETB P1.1 ;使 P1.1(时钟 )输出为 1
DJNZ R1,SPIIO1 ;判断是否循环 8次 (8位数据 )
RET
http://www.wenyuan.com.cn/webnew/
9.4.2 SPI总线的软件模拟
这些子程序适用于在串行时钟的上升沿输入和下降沿输出的各种串行外围接口芯片 (如 D/A和 A/D转换芯片、实时时钟芯片,LED显示驱动芯片等 )。
对于下降沿输入、上升沿输出的各种串行外围接口芯片,
只要改变 P1.1的输出电平顺序,这些子程序也同样适用。
如先置 P1.1为低电平,之后再次置 P1.1为高电平,再置
P1.1为低电平等等。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
【 例 3】 将 AT89C2051片内 RAM30H,31H单元中的 16位数据通过
SPI总线接口传送到数 /模转换器 TLC5615。
解,TLC5615是 3线串行总线接口 10位电压输出数 /模转换器,它既可与单片机的 SPI总线接口相连接,又可与单片机的
Microwire总线接口相连接。 TLC5615内部结构如下图所示。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
TLC5615内部结构
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
TLC5615通过固定增益为 2的运放缓冲电阻网络,把 10位数字数据转换为模拟电压。在 TLC5615芯片上电时,内部电路把 D/A寄存器复位为 0。其输出具有与基准输入相同的极性,
表达式为
VO=2× REF× CODE/1024
其中,CMOD是通过串行总线接口输入的待转换的数据; REF
是基准电压。
TLC5615最大的 串行时钟速率 不超过 14MHz,10位 DAC的建立时间为 12.5μs,通常更新速率限制至 80kHz以内。
TLC5615的 16位移位寄存器在 SCLK的控制下从 DIN引脚输入数据,高位在前,低位在后。 16位移位寄存器中间的 10位数据在上升沿的作用下输入 10位的 D/A寄存器供给 D/A转换。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
AT89C2051与 TLC5615通过串行总线接口传送 8位数据的接线如下图所示。
因 AT89C2051没有 SPI接口,可用软件的办法来模拟 SPI的总线操作。 P1.1模拟 SPI的数据输出端 (MOSI),P1.2模拟 SPI
的 SCK输出端,P1.2模拟 SPI的从机选择端 (SS); TLC5615是数 /模转换器,不会向 AT89C2051发送数据,故不需要模拟
SPI的数据输入端 (MISO)。
A T 8 9 C2 0 5 1
P 1,1
P 1,2
P 1,3
T L C5 6 1 5
D IN
SCL K
CS
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
AT89C2051将片内 RAM30H,31H单元中的 16位数据传送到
TLC5615的参考程序如下:
DIN BIT P1.1 ;定义 I/O口
SCLK BIT P1.2
CS5615 BIT P1.3
DataH EQU 30H
DataL EQU 31H
TLC5615,CLR SCLK ;准备操作 TLC5615
CLR CS5615 ;选中 TLC5615
MOV R7,#08H
MOV A,DataH ;装入高 8位数据
LPH,LCALL DELAY ;延时
RLC A ;最高位移向 TLC5615
MOV DIN,C
SETB SCLK ;产生上升沿,移入 1位数据
LCALL DELAY
CLR SCLK
DJNZ R7,LPH
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
MOV R7,#08H
MOV A,DataL ;装入低 8位数据
LPL,LCALL DELAY ;延时
RLC A ;最高位移向 TLC5615
MOV DIN,C
SETB SCLK ;产生上升沿,移入 1位数据
LCALL DELAY
CLR SCLK
DJNZ R7,LPL
SETB CS5615 ;结束 TLC5615的操作,同时将转换数据代码存入 10位 DA寄存器,启动新一轮的 DA转换
RET
DELAY,…(略 )
RET
参考程序
http://www.wenyuan.com.cn/webnew/
本章小结
单片机中目前常用的串行扩展总线和接口可分为以下几类,UART串行扩展接口,I2C总线,SPI总线,Microware总线,1-wire总线,USB
总线和 CAN总线。
I2C总线 是芯片间串行传输总线。它用两根线实现全双工同步数据传送,可方便地构成多机系统和外围器件扩展系统。 I2C总线简单,结构紧凑,易于实现模块化和标准化。
SPI总线 是同步串行外设接口。允许 MCU与各种外围设备以同步串行方式进行通信来交换信息。可直接与多种标准外围器件直接接口,采用 SPI设备可简化电路设计。
模拟 I2C总线 的应用程序可使没有 I2C总线的单片机也能使用 I2C总线技术。 模拟 SPI总线 的应用程序也可使没有 SPI总线的单片机也能使用
I2C总线技术。
CAN总线 是多主机局域网,是国际上应用最广泛的现场总线之一。
USB总线 是计算机串行通信协议。是即插即用的,数据传输速度快,
扩展方便,连接的方式十分灵活。
Microware总线 是串行同步双工通讯接口。 1-wire总线也是一种串行通信协议。
http://www.wenyuan.com.cn/webnew/
习 题
1,串行扩展与并行扩展相比的主要优点是什么?
2,简述 I2C总线的数据传输方法。
3,常用模拟 I2C总线的应用子程序有哪些?
4,简述 SPI总线的数据传输方法。
5,常用模拟 SPI总线的应用子程序有哪些?
http://www.wenyuan.com.cn/webnew/
Q & A?
Thanks!
第 9章 串行扩展技术
(课时,6学时)
http://www.wenyuan.com.cn/webnew/
教学目的
了解串行扩展的分类和特点。
了解 Microware,1-wire,USB和 CAN总线。
掌握 I2C总线的原理。
掌握 SPI总线的原理。
学习重点和难点
I2C总线的软件模拟。
SPI总线的软件模拟。
http://www.wenyuan.com.cn/webnew/
第 9章 串行扩展技术
9.1 串行扩展概述
9.2 UART串行扩展接口
9.3 I2C串行扩展总线
9.4 SPI串行扩展接口
本章小结
习题
http://www.wenyuan.com.cn/webnew/
9.1 串行扩展概述
9.1.1 串行扩展的种类
9.1.2 串行扩展的特点
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类新一代单片机技术的显著特点之一就是串行扩展总线和接口的推出。常用的串行扩展总线和接口有 I2C总线,SPI总线、
Microware总线,1-wire总线和 CAN总线等。
( 1) UART串行扩展接口
( Universal Asynchronous Receiver/Transmitter)
UART通用异步收发器,既能同步又能异步通信的硬件电路称为 UART。 UART是用于控制计算机与串行设备的芯片,它提供了 RS- 232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用 RS- 232C接口的串行设备通信了。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 2) I2C( Inter Integrated Circuit)串行扩展总线
I2C总线是 Philip公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。
( 3) SPI(Serial Peripheral Interface) 串行扩展接口
SPI总线是 Motorola公司提出的一种同步串行外设接口。允许 MCU与各种外围设备以同步串行方式进行通信。其外围设备种类繁多,从最简单的 TTL移位寄存器到复杂的 LCD显示驱动器、网络控制器等,可谓应有尽有。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 4) Microware串行扩展接口
Microware总线是 NS公司提出的串行同步双工通信接口,用于 8位 COP800系列单片机和 16位 HPC系列单片机。
( 5)单总线( 1-wire)串行扩展总线
1-wire总线是 Dallas公司研制开发的一种协议,用于便携式仪表和现场监控系统。
( 6) USB( Universal Serial BUS)串行扩展总线
USB总线是 Compaq,Intel,Microsoft,NEC等公司联合制定的一种计算机串行通信协议。
http://www.wenyuan.com.cn/webnew/
9.1.1 串行扩展的种类
( 7) CAN( Controller Area Network)串行扩展总线
CAN总线是德国 Bosch公司最先提出的多主机局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通信,在车载各电子控制装置 ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、
变速箱控制器、仪表装备。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点串行扩展总线技术是新一代单片机技术发展的一个显著特点。
与并行扩展总线相比,串行扩展总线有电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等优点。
常用串行扩展总线和接口的特点简要说明如下:
( 1) UART串行扩展接口
UART接口是二线制,8051单片机的 UART既能作通用异步接收和发送器,又能作同步移位寄存器。它可以实现 8051单片机系统之间点对点的单机通信或多机通信,也可以实现扩展
I/O口。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 2) I2C总线
I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。 I2C总线简单,结构紧凑,易于实现模块化和标准化。
( 3) SPI串行扩展接口
SPI总线是三线制,可直接与多种标准外围器件直接接口,
在 SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。即使在有总线扩展能力的系统中采用 SPI设备也可以简化电路设计,省掉很多常规电路中的接口器件,从而提高了设计的可靠性。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 4) Microware串行扩展接口
Microware总线是三线制,由一根数据输出( SO)线、一根数据输入( SI)线和一根时钟( SK)线组成。所有从器件的时钟线连接到同一根 SK线上,主器件向 SK线发送时钟脉冲信号,从器件在时钟信号的同步沿输出 /输入数据。主器件的数据输出线 SO和所有从器件的数据输入线相接,从器件的数据输出线都接到主器件的数据输入线 SI上。
( 5) 1-wire总线
1-wire总线是利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合 1-wire协议的从芯片都有一个唯一的地址,包括 8位分类码,48位的序列号和 8位 CRC代码。
主芯片对各个从芯片的寻找依据这 64位的不同来进行。单总线节省 I/O引脚资源、结构简单、成本低廉、便于总线扩展和维护。
http://www.wenyuan.com.cn/webnew/
9.1.2 串行扩展的特点
( 6) USB串行扩展接口
USB比较于其他传统接口的一个优势是即插即用的实现,即插即用( Plug-and-Play)也称为热插拔( Hot Plugging)。
数据传输速度快,USB1.1接口的最高传输率可达 12 Mb/s;
USB2.0接口的最高传输率可达 480 Mb/s。扩展方便,使用
USB Hub扩展,可以连接 127个 USB设备,连接的方式十分灵活。
( 7) CAN总线在由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。
CAN 可提供高达 1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了 CAN的抗电磁干扰能力。当信号传输距离达到 10km时,CAN 仍可提供高达 50Kbit/s的数据传输速率。
http://www.wenyuan.com.cn/webnew/
9.2 UART串行扩展接口
9.2.1 串行口工作方式
9.2.2 UART串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
串行口有四种工作方式,每一种工作方式都有自己的特点。
其中方式 0是 8位同步通信方式,用于串 /并或并 /串转换中,
常用的串 /并转换芯片有 74LS164和并 /串转换芯片 74LS165
等。
74LS164 是一个双列直插式 8位串入 /并出移位寄存器,其引脚如下图所示。 其引脚定义如下:
A:同步串行数据输入端
B:同步串行数据输入端
Q0~ Q7,8位并行数据输出端
CK:时钟脉冲输入端
CLR:数据清除端 (清除输出数据,通常用在移位完成时 )
GND:接地端
VCC:电源端
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
74LS165 是一个双列直插式 8位并入 /串出移位寄存器,其引脚如下图所示。
其引脚定义如下:
LD:重新装载数据端 (通常用在数据完全移出后 )
CK:内部数据移位时钟脉冲输入端
D0~ D7:并行数据输入端
Q11:取反串行输出端
GND:接地端
Q11:串行输出端
SE:用于填充数据移出后的空位的逻辑电平信号
COK:和 CK联合控制数据移动
VCC:电源端
http://www.wenyuan.com.cn/webnew/
9.2.1 串行口工作方式
1
2
3
4
5
6
7
10
9
8
11
12
13
14 A
B
Q
7
G N D CK
C L R
V
CC
Q
6
Q
5
Q
4
Q
3
Q
2
Q
1
Q
0
12
13
14
15
16
SE
D
7
V
CC
D
6
D
5
D
4
CO K
Q
11
1
2
3
4
5
6
7
LD
CK
D
3
Q
11
D
2
D
1
D
0
G N D
9
11
10
8
74LS164引脚图 74LS165引脚图
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
【 例 1】 利用 74LS164串行输入并行输出芯片作一个简单的电子钟,要求四个数码管显示时钟;其中 LED1显示小时的十位,
LED2显示小时的个位,LED3显示分钟的十位,LED4显示分钟的个位。
解,原理图如下图,采用单片机的串行口输出字形码,用
74LS164和 74LS138作为扩展芯片。
74LS164的功能是将 AT89C2051串行通信口输出的串行数据译码并在其并口线上输出,从而驱动 LED数码管。
74LS138是一个 3线 -8线译码器,它将单片机输出的地址信号译码后动态驱动相应的 LED。因 74LS138电流驱动能力较小,故用末级驱动三极管 9013作为地址驱动。将 4只 LED的字段位都连在一起,它们的公共端则由 74LS138分时选通,
这样任何一个时刻,都只有一位 LED在点亮,也即动态扫描显示方式,其优点使用串行口进行 LED通信程序编写相当简单,用户只需将需显示的数据直接送串口发送缓冲器,等待串行中断即可。
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例串行动态 LED扫描电路
P3.2
P3.3
TX
RX
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
ORG 0000H
LJMP MAIN
ORG 0040H
MAIN,MOV SCON,#00H ;初始化串口为方式 0
MOV R3,#00H
LOOP,MOV R4,#0E8H
DELAY,LCALL DISPLAY ;动态扫描显示
DJNZ R4,DELAY
INC R3 ;显示数字增 1
CJNE R3,#0AH,LOOP ;不等于 10转移
LJMP MAIN
下面是一个简单的动态扫描程序,如果再利用上第六章的定时器就可做成一个完整的电子钟,四个数码管显示为 00,00这种形式。在本例中冒号就不显示出来了,分别用 20H,21H,22H,23H地址存放时间的时钟的十位、时钟的个位、分钟的十位、分钟的个位。用中断方式做一个不带时钟芯片的电子钟,请读者自己完成。
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
DISPLAY,CLR P3.2 ;显示 LED1
CLR P3.3
LCALL DISP
LCALL DELAY1
SETB P3.3 ;显示 LED2
LCALL DISP
LCALL DELAY1
SETB P3.3 ;显示 LED3
CLR P3.2
LCALL DISP
LCALL DELAY1
SETB P3.2 ;显示 LED4
SETB P3.3
LCALL DISP
LCALL DELAY1
RET
参考程序,
http://www.wenyuan.com.cn/webnew/
9.2.2 UART串行扩展应用实例
DISP,MOV A,R3 ;将字形码送串口
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV SBUF,A
WAIT,JNB TI,WAIT ;等待串口传送
CLR TI
RET
DELAY1,MOV R6,#10H ;动态扫描的时间
LOOP1,MOV R7,#38H ;间隔
DJNZ R7,$
DJNZ R6,LOOP1
RET
TABLE,DB 3FH,06H,,5BH ; 0~9的字形码
DB 4FH,66H,6DH
DB 7DH,07H,,7FH,,6FH
参考程序,
http://www.wenyuan.com.cn/webnew/
9.3 I2C串行扩展总线
9.3.1 I2C总线的结构原理
9.3.2 I2C总线的软件模拟
9.3.3 I2C串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线是 芯片间串行传输总线 。它用 数据线 SDA和 时钟线
SCL两根线实现 全双工 同步数据传送,可方便地构成多机系统和外围器件扩展系统。
I2C总线采用了 器件地址的硬件设置 方法,通过 软件寻址 完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。
按照 I2C总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的 主机能够依照这些状态码自动地进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成 I2C总线的初始化,启动 I2C总线,就能自动完成规定的数据传送操作。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
#1 #2 #3 #4
V DD
S DA
S CL
R P R P
S DA S DA S DA S DA S CL S CL S CL S CL
I2C总线接口电路结构
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线接口为 开漏 或 开集电极输出,需 加上拉电阻 。
系统中所有的单片机、外围器件都将 数据线 SDA和时钟线
SCL的同名端相连在一起,总线上的所有节点都由器件和管脚给定地址。
系统中可以 直接连接 具有 I2C总线接口的单片机,也可以通过 总线扩展芯片 或 I/O口的软件仿真 与 I2C总线相连。
在 I2C总线上可以挂接各种类型的外围器件,如 RAM/EEPROM、
日历 /时钟芯片,A/D转换器,D/A转换器、以及由 I/O口、
显示驱动器构成的各种模块。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
SDA 和 SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压;当总线空闲时,这两条线路都是高电平;连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。
I2C 总线上 数据的传输速率
在标准模式下可达 100kbit/s。
在快速模式下可达 400kbit/s。
在高速模式下可达 3.4Mbit/s 。
连接到总线的 接口数量 只由总线电容是 400pF 的限制决定关于高速模式主机器件的信息。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线上数据传送的基本单位为字节,采用低位在前的格式。主从器件之间一次传输的数据称为一帧,由启动信号、
若干个数据字节和应答位以及停止信号组成。
I2C的 主要命令 只有 读,写 两种,虽然读写的字节根据具体器件的不同而不同,但其时序关系不会发生改变。
下位机只要具备 I2C的基本时序即可。 这些基本时序包括:
启动,写字节,读字节,应答位,停止信号,并可以组合成两个子程序:读 N字节子程序、写 N字节子程序。
http://www.wenyuan.com.cn/webnew/
9.3.1 I2C总线的结构原理
I2C总线最显著的特点是 规范的完整性,结构的独立性 和 用户使用时的,傻瓜,化 。
I2C总线有严格的规范,如接口的电气特性、信号时序、信号传输的定义、总线状态设置、总线管理规则及总线状态处理等。
在 I2C总线规范中,总线上的器件节点的电气特性及地址给定都具有较强的独立性,而且各节点上的器件、模块都有相对独立的地址编号。
严格、完善的规范,并将这些规范的应用尽可能,傻瓜,化,除了有充分的硬件支持外,在软件方面,Philips公司为用户提供了一套完善的总线状态处理软件包,以致于用户可以不去熟悉 I2C总线的规范,不去理睬总线的管理方法,只要掌握 I2C总线的应用程序设计方法就可方便地使用 I2C总线,并且能很快地掌握 I2C总线系统的软、硬件设计方法。
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
1.产生起始位和停止位
I2C总线的起始和停止条件如下图所示。
分别用 P1.0和 P1.1模拟 I2C总线的时钟线和数据线,则可给时钟线 SCL和数据线 SDA赋值。程序如下:
S D A
S C L
起始条件 停止条件
SDL EQU P1.0
SCA EQU P1.1
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
2.发送起始条件当时钟 SCL为高电平时,数据线 SDA从高电平向低电平切换表示起始条件,即启动 I2C总线数据传送。模拟时序产生时钟 SCL和 SDA发送的起始条件子程序如下:
使用不同频率的晶体振荡器,则要相应增删程序段中 NOP
指令的条数,以满足时序的要求。
START,SETB SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SDA
NOP
NOP
CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
3.发送停止条件当时钟 SCL为高电平时,数据线 SDA由低电平向高电平切换表示停止条件,即停止 I2C总线数据传送。模拟时序产生时钟 SCL和 SDA发送的停止条件子程序如下:
使用不同频率的晶体振荡器,则要相应增删程序段中 NOP
指令的条数,以满足时序的要求。
STOP,CLR SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
SETB SDA
NOP
NOP
CLR SDA
CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
4.
I2C总线上的第 9个时钟脉冲对应于应答位,当该位为低电平表示应答 ACK,当该位为高电平表示非应答 ACK。 I2C总线的应答位和非应答位如下图所示。发送 ACK和 ACK子程序如下。
发送 A CK 发送 A CK
SDA
SCL
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
(1) 发送应答位 ACK
由上图可知,当发送应答位 ACK时,只需将 SDA设为低电平、
SCL设为高电平,其区间的长短根据晶振的频率确定,即改变下列子程序中的 NOP数即可达到要求,发送 ACK子程序如下:
YACK,CLR SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SCL
SETB SDA
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
(2) 发送非应答位由上图可知,当发送非应答位 ACK时,只需将 SDA设为高电平,SCL设为高电平,其区间的长短根据晶振的频率确定,
即改变下列子程序中的 NOP数即可达到要求,发送 ACK子程序如下:
YNACK,SETB SDA
SETB SCL
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR SCL
CLR SDA
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
5.应答位检查子程序根据 I2C总线协议,在接收到一个字节后,要发送一个应答位以供检查,此时可设置一个标志位表示应答状态。当检查结果为正常应答时,则标志位置 0;否则,标志位置 0。
应答位检查子程序如下:
TACK,SETB SDA ;设置 SDA为输入方式
SETB SCL ;产生第 9个时钟脉冲
NOP ; NOP的数目根据时钟频率确定
NOP ;此处用 NOP来延时
CLR 30H
MOV C,SDA
JNC TEND ;若正常应答,则转移
SETB 30H
TEND,CLR SCL
RET
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
6.字节数据发送子程序根据 I2C总线协议,数据在时钟线为低电平时变化,高电平时稳定,每一个时钟脉冲传送一位。模拟 I2C总线的 SDA接在并行口线,并口中无移位寄存器,要通过指令完成移位后再从 SDA串行输出。 I2C总线的字节数据传送如下图所示。
将待发送的字节存于累加器 A中,字节数据发送子程序如下:
SC L
SD A
起始 停止
1 A C K 2
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟WOBYT,MOV R4,#08H ;要发送的数据长度为 8位LOOP2,RLC A ;将待发送的位送入位 CY中
JC LOOP1 ; CY位为 1转到 LOOP1
CLR SDA ;置为低电平,发送 0
SETB SCL ;时钟高电平数据保持数据稳定
NOP ;调节 NOP的个数,使延时 ≥4.7u s
NOP
CLR SCL ;时钟脉冲变为低电平,准备改变数据
DJNZ R4,LOOP2 ;若 8位未发送完,转 LOOP2继续
RET ; 8位发送完成返回
LOOP1,SETB SDA ;置为高电平,发送 1
SETB SCL ;时钟为高电平保持数据稳定
NOP ;调节 NOP的个数,使延时 ≥4.7u s
NOP
CLR SCL ;时钟脉冲变为低电平,准备改变数据
CLR SDA ;将数据改为低电平
DJNZ R4,LOOP2 ;若 8位未发送完,转 LOOP2继续
RET ; 8位发送完成返回字节数据发送子程序
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
7.字节数据接收子程序根据 I2C总线协议,数据必须在时钟处于高电平期间,数据稳定时才能读取数据,在经过八次的时钟转换后,读出八位即一个字节数据。 I2C总线起始字节如下图所示。将读出的字节数据存于 R5中,接收字节数据子程序如下:
A CK
起始字节
SCL
SDA
起始 停止
1 2 7 8 9
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟接收字节数据子程序
ROBYT,MOV R4,#08H ;要接收的数据长度为 8位
LOOP3,SETB SDA ;设置 SDA为输入方式
SETB SCL ; SDA上数据有效
MOV C,SDA ;读入 SDA引脚状态
MOV A,R5 ;将存放结果送入 A中
RLC A ;将读出的 1位移入 A中
MOV R5,A
CLR SCL ;一个脉冲结束,SDA上数据无效
DJNZ R4,LOOP3 ;未读完 8位,转到 LOOP3
RET ;读完返回
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
8.多个字节数据发送子程序在完成上述模拟子程序后,根据 I2C总线协议,可编写多个字节数据发送子程序。要发送的字节数存放在 R5中,要发送的数据块的第一个数据的地址为 40H,外围器件的地址存放在 60H中,参考程序如下:
WDBYT,LCALL START ;起始
WLP1,MOV A,60H ;设 60H为存放的控制字
LCALL WOBYT ;发送读控制字节
LCALL TACK ;检查应答位
JB 30H,WLP1 ;无应答位,重发
MOV R0,#40H ; 40H为第一个数据的首地址
WLP2,MOV A,@ R0 ;读一个字节数据
LCALL WOBYT ;发送
LCALL TACK ;检查应答位
JB 30H,WLP1 ;无应答位,重发
INC R0 ;指向下一个要发送的数据
DJNZ R5,WLP2 ;要发送数据未发完,再发送
LCALL STOP ;全部数据发完,停止
RET ;返回
http://www.wenyuan.com.cn/webnew/
9.3.2 I2C总线的软件模拟
9.多个字节数据接收子程序根据 I2C总线协议,同样可编写多个字节数据接收子程序。要接收的字节数存放在 R5中,要接收的数据块存放的首地址为 50H,外围器件的地址存放在 60H中,参考程序如下:
RDBYT,LCALL START ;起始
RLP1,MOV A,60H ;设 60H为存放的控制字
LCALL WOBYT ;发送读控制字节
LCALL TACK ;检查应答位
JB 30H,RLP1 ;无应答位,重发
MOV R0,#50H ; 50H为第一个数据的首地址
RLP2,LCALL ROBYT ;读入一个字节
MOV @R0,A
DJNZ R5,RLP3 ;要接收数据未读完,再读入
LCALL YNACK ;发送非应答位
LCALL STOP ;全部数据发完,停止
RET ;返回
RLP3,LCALL YACK ;发送应答位
INC R0 ;指向下一个要存放数据的地址
SJMP RLP2 ;调节 NOP的个数,使延时 ≥4.7u s
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
【 例 2】 将 AT89C2051片内 RAM40H~ 47H单元中的八个 8位数据通过 I2C总线接口传送到存储器 AT24C01的 50H~ 57H单元中。
解,AT24C01是 Atmel公司生产的具有 I2C总线接口的 E2PROM,是目前应用较多的 AT24C×× 系列存储器中的一种,芯片存储容量为 1Kb(128× 8位 )。 AT24C01引脚如下图所示。
其引脚定义如下:
SCL:串行时钟端。
SDA:串行数据端,漏极开路,
需接上拉电阻到 VCC。
WP:写保护,
当 WP为高电平时存储器只读;
当 WP为低电平时存储器可读可写。
A2~ A0:芯片地址。
1
2
3
4 5
6
7
8 A0
A1
V SS
V CC
A2
SC A
SC L
WP
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
AT89C2051与 AT24C01通过串行总线接口传送数据的接线如下图所示。因 AT89C2051没有 I2C总线接口,可用软件的办法来模拟 I2C总线操作。 P1.0模拟 I2C总线的时钟线 SCL,
P1.1模拟 I2C总线的数据线 SDA。
A T 89C 205 1
P 1,0
P 1,1
A T 24C 01
SC L
SC A
V CC
10 k Ω ×2
AT89C2051与 AT24C01的接口接线
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例
AT24C01的读写操作有多种形式,写操作有两种类型,字节写 和 页面写 ;读操作有三种类型,读当前地址内容,读随机地址内容 和 读顺序地址内容 。
AT24C01写 N个字节数据的操作时序如下图所示,
AT24C01读 N个字节数据的操作时序如下图所示。
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例上图中器件地址说明如下:
① 器件地址码的第 7~ 4位 ——从器件地址位,用于确认器件的类型。
AT24C01的器件地址码为 1010,1010 表示从器件为串行
E2PROM。
② 器件地址码的第 3~ 1位 ——1~ 8片的 片选或存储器内的页面地址选择位 。此三个控制位用于选片或者内部页面选择。
如在存储容量 8Kb(1024× 8位 )的 AT24C08内部,存储矩阵分为 4个页面,每一页面有 256个字节。通过器件地址码的第 2位和第 1位,可以选择数据读写的页面。
③ 器件地址码的第 0位 ——读、写 (R/W)操作控制码 。若此位为 1,下一字节进行读操作 (R);此位为 0,下一字节进行写操作 (W)。
http://www.wenyuan.com.cn/webnew/
9.3.3 I2C串行扩展应用实例编程说明:
AT24C01每接收一个字节后,都必须发送一个确认应答信号位 ACK,即时序中的响应信号。此时 AT89C2051必须产生一个与此确认位相应的时钟脉冲。
AT24C01在读写操作时,具有地址自动加 1功能,即读、写完某一地址空间后,会自动指向下一个地址单元。
将 AT89C2051片内 RAM40H~ 47H单元中的八个 8位数据通过
I2C总线接口传送到存储器 AT24C01的 50H~ 57H单元中,参考子程序如下。
程序中用到的子程序均为 9.3.2节所编写的模拟 I2C总线的子程序。
http://www.wenyuan.com.cn/webnew/
参考子程序
ICW,LCALL START ;发送起始信号
ICWLP1,MOV A,# 0A0H ; #10100000B器件地址码,
LCALL WOBYT ;发送器件地址
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
ICWLP2,MOV A,# 50H ; 50H为待写存储单元首地址
LCALL WOBYT ;发送待写存储单元地址
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
MOV R5,#8 ;待发送数据块的长度
MOV R0,#40H ; 40H为第一个数据的首地址
ICWLP3,MOV A,@ R0 ;读一个字节数据
LCALL WOBYT ;发送
LCALL TACK ;检查应答位
JB 30H,ICWLP1 ;无应答位,重发
INC R0 ;指向下一个要发送的数据
DJNZ R5,WLP2 ;要发送数据未发完,再发送
LCALL STOP ;全部数据发完,停止
LCALL DELAY ;延时,等待 AT24C01内部写操作
RET ;返回
http://www.wenyuan.com.cn/webnew/
9.4 SPI串行扩展接口
9.4.1 SPI总线的结构原理
9.4.2 SPI总线的软件模拟
9.4.3 SPI串行扩展应用实例
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
SPI总线系统是一种 同步串行外设接口,允许 MCU与各种外围设备以同步串行方式进行通信来交换信息。
SPI总线接口一般使用 4根线,串行时钟线 SCK,主机输入 /
从机输出数据线 MISO,主机输出 /从机输入数据线 MOSI和 低电平有效的从机选择线 SS。
由于 SPI系统总线只需 3根公共的时钟数据线和若干位独立的从机选择线,在 SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。
SPI总线包括 1根串行同步时钟信号线以及 2根数据线。 SPI
总线接口电路结构如下图所示。
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
S CK
M OS I
M IS O
M CU
MI SO MO SI SCK
器件 1
SS
S CK
M OS I
M IS O
MI SO MO SI SCK
器件 2
SS
MI SO MO SI SCK
器件 3
SS
SPI总线接口电路结构
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出的串行同步时钟极性和相位可以进行配置 。
时钟极性 (CPOL)对传输协议没有重大的影响。
如果 CPOL=0,串行同步时钟的空闲状态为低电平;
如果 CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位 (CPHA)能够用于选择两种不同的传输协议进行数据传输。
如果 CPHA=0,在串行同步时钟的第一个跳变沿 (上升或下降 )
数据被采样;
如果 CPHA=1,在串行同步时钟的第二个跳变沿 (上升或下降 )
数据被采样。
SPI主模块和与之通信的外设间时钟相位和极性应该一致。
http://www.wenyuan.com.cn/webnew/
9.4.1 SPI总线的结构原理
特点,由于 SPI系统总线一共只需 3~ 4位数据线和控制线即可实现与具有 SPI总线接口功能的各种 I/O器件进行连接,
而扩展并行总线则需要 8根数据线,8~ 16位地址线,2~ 3
位控制线,因此,采用 SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和 I/O口线,提高设计的可靠性。
应用,在 MCS–51系列等不具有 SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用 SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。
http://www.wenyuan.com.cn/webnew/
9.4.2 SPI总线的软件模拟
对于没有提供 SPI接口的单片机而言,通常可使用软件的办法来模拟 SPI的总线操作,包括串行时钟、数据输入和输出。
Atmel公司生产的 EEPROM具有 SPI接口,存储容量为 4Kb的
AT25040就有 SPI接口,MCS–51系列单片机与 AT25010的 SPI总线接口接线如下图所示。
图中,P1.0模拟 SPI的数据输出端 (MOSI),P1.1模拟 SPI的
SCK输出端,P1.2模拟 SPI的从机选择端 (SS),P1.3模拟 SPI的数据输入端 (MISO)。下面给出模拟 SPI串行输入、串行输出和串行输入 /输出的 3个子程序。
8051
P 1.0
P 1.1
P 1.2
P 1.3
A T 250 10
SI
S C K
CS
SO
http://www.wenyuan.com.cn/webnew/
1,MCU串行输入子程序 SPIIN
从 AT25040的 SO端接收 8位数据并放入寄存器 R0中。参考程序如下:
SPIIN,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
SPIIN1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
MOV C,P1.3 ;从机输出送进位 C
RLC A ;左移至累加器 A
SETB P1.1 ;使 P1.0(时钟 )输出为 1
DJNZ R1,SPIIN1 ;判断是否循环 8次 (8位数据 )
MOV R0,A ;8位数据送 R0
RET
http://www.wenyuan.com.cn/webnew/
2,MCU串行输出子程序 SPIOUT
将 MCS–51单片机中 R0寄存器的内容传送到 AT25040的 SI端。
参考程序如下:
SPIOUT,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
MOV A,R0 ;8位数据送累加器 A
SPIOUT1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
RLC A ;左移至累加器 A最高位至 C
MOV P1.0,C ;进位 C送从机输入
SETB P1.1 ;使 P1.1(时钟 )输出为 1
DJNZ R1,SPIOUT1 ;判是否循环 8次 (8位数据 )
RET
http://www.wenyuan.com.cn/webnew/
3,MCU串行输入 /输出子程序 SPIIO
将 MCS–51单片机 R0寄存器的内容传送到 AT25040的 SI端,同时从 AT25040的 SO端接收 8位数据。参考程序如下:
SPIIO,SETB P1.1 ;使 P1.1(时钟 )输出为 1
CLR P1.2 ;选择从机
MOV R1,#08H ;置循环次数
MOV A,R0 ;8位数据送累加器 A
SPIIO1,CLR P1.1 ;使 P1.1(时钟 )输出为 0
NOP ;延时
NOP
MOV C,P1.3 ;从机输出送进位 C
RLC A ;左移至累加器 A最高位至 C
MOV P1.0,C ;进位 C送从机输入
SETB P1.1 ;使 P1.1(时钟 )输出为 1
DJNZ R1,SPIIO1 ;判断是否循环 8次 (8位数据 )
RET
http://www.wenyuan.com.cn/webnew/
9.4.2 SPI总线的软件模拟
这些子程序适用于在串行时钟的上升沿输入和下降沿输出的各种串行外围接口芯片 (如 D/A和 A/D转换芯片、实时时钟芯片,LED显示驱动芯片等 )。
对于下降沿输入、上升沿输出的各种串行外围接口芯片,
只要改变 P1.1的输出电平顺序,这些子程序也同样适用。
如先置 P1.1为低电平,之后再次置 P1.1为高电平,再置
P1.1为低电平等等。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
【 例 3】 将 AT89C2051片内 RAM30H,31H单元中的 16位数据通过
SPI总线接口传送到数 /模转换器 TLC5615。
解,TLC5615是 3线串行总线接口 10位电压输出数 /模转换器,它既可与单片机的 SPI总线接口相连接,又可与单片机的
Microwire总线接口相连接。 TLC5615内部结构如下图所示。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
TLC5615内部结构
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
TLC5615通过固定增益为 2的运放缓冲电阻网络,把 10位数字数据转换为模拟电压。在 TLC5615芯片上电时,内部电路把 D/A寄存器复位为 0。其输出具有与基准输入相同的极性,
表达式为
VO=2× REF× CODE/1024
其中,CMOD是通过串行总线接口输入的待转换的数据; REF
是基准电压。
TLC5615最大的 串行时钟速率 不超过 14MHz,10位 DAC的建立时间为 12.5μs,通常更新速率限制至 80kHz以内。
TLC5615的 16位移位寄存器在 SCLK的控制下从 DIN引脚输入数据,高位在前,低位在后。 16位移位寄存器中间的 10位数据在上升沿的作用下输入 10位的 D/A寄存器供给 D/A转换。
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
AT89C2051与 TLC5615通过串行总线接口传送 8位数据的接线如下图所示。
因 AT89C2051没有 SPI接口,可用软件的办法来模拟 SPI的总线操作。 P1.1模拟 SPI的数据输出端 (MOSI),P1.2模拟 SPI
的 SCK输出端,P1.2模拟 SPI的从机选择端 (SS); TLC5615是数 /模转换器,不会向 AT89C2051发送数据,故不需要模拟
SPI的数据输入端 (MISO)。
A T 8 9 C2 0 5 1
P 1,1
P 1,2
P 1,3
T L C5 6 1 5
D IN
SCL K
CS
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
AT89C2051将片内 RAM30H,31H单元中的 16位数据传送到
TLC5615的参考程序如下:
DIN BIT P1.1 ;定义 I/O口
SCLK BIT P1.2
CS5615 BIT P1.3
DataH EQU 30H
DataL EQU 31H
TLC5615,CLR SCLK ;准备操作 TLC5615
CLR CS5615 ;选中 TLC5615
MOV R7,#08H
MOV A,DataH ;装入高 8位数据
LPH,LCALL DELAY ;延时
RLC A ;最高位移向 TLC5615
MOV DIN,C
SETB SCLK ;产生上升沿,移入 1位数据
LCALL DELAY
CLR SCLK
DJNZ R7,LPH
http://www.wenyuan.com.cn/webnew/
9.4.3 SPI串行扩展应用实例
MOV R7,#08H
MOV A,DataL ;装入低 8位数据
LPL,LCALL DELAY ;延时
RLC A ;最高位移向 TLC5615
MOV DIN,C
SETB SCLK ;产生上升沿,移入 1位数据
LCALL DELAY
CLR SCLK
DJNZ R7,LPL
SETB CS5615 ;结束 TLC5615的操作,同时将转换数据代码存入 10位 DA寄存器,启动新一轮的 DA转换
RET
DELAY,…(略 )
RET
参考程序
http://www.wenyuan.com.cn/webnew/
本章小结
单片机中目前常用的串行扩展总线和接口可分为以下几类,UART串行扩展接口,I2C总线,SPI总线,Microware总线,1-wire总线,USB
总线和 CAN总线。
I2C总线 是芯片间串行传输总线。它用两根线实现全双工同步数据传送,可方便地构成多机系统和外围器件扩展系统。 I2C总线简单,结构紧凑,易于实现模块化和标准化。
SPI总线 是同步串行外设接口。允许 MCU与各种外围设备以同步串行方式进行通信来交换信息。可直接与多种标准外围器件直接接口,采用 SPI设备可简化电路设计。
模拟 I2C总线 的应用程序可使没有 I2C总线的单片机也能使用 I2C总线技术。 模拟 SPI总线 的应用程序也可使没有 SPI总线的单片机也能使用
I2C总线技术。
CAN总线 是多主机局域网,是国际上应用最广泛的现场总线之一。
USB总线 是计算机串行通信协议。是即插即用的,数据传输速度快,
扩展方便,连接的方式十分灵活。
Microware总线 是串行同步双工通讯接口。 1-wire总线也是一种串行通信协议。
http://www.wenyuan.com.cn/webnew/
习 题
1,串行扩展与并行扩展相比的主要优点是什么?
2,简述 I2C总线的数据传输方法。
3,常用模拟 I2C总线的应用子程序有哪些?
4,简述 SPI总线的数据传输方法。
5,常用模拟 SPI总线的应用子程序有哪些?
http://www.wenyuan.com.cn/webnew/
Q & A?
Thanks!