单片机原理及应用(C语言版)第2章.ppt

上传人:ga****84 文档编号:381627 上传时间:2018-09-29 格式:PPT 页数:95 大小:665KB
下载 相关 举报
单片机原理及应用(C语言版)第2章.ppt_第1页
第1页 / 共95页
单片机原理及应用(C语言版)第2章.ppt_第2页
第2页 / 共95页
单片机原理及应用(C语言版)第2章.ppt_第3页
第3页 / 共95页
单片机原理及应用(C语言版)第2章.ppt_第4页
第4页 / 共95页
单片机原理及应用(C语言版)第2章.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

1、单片机原理及应用 (C语言版)第8章 单片机系统扩展,主 编:周国运本章制作:赵天翔中国水利水电出版社,第8章 单片机系统扩展,目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接口技术,第8章 单片机系统扩展,本章主要介绍了MCS-51单片机系统扩展的方法。通过扩展并行三总线来进行并行总线接口扩展;通过UART或I/O口模拟几种串行通信的特点来进行串行总线接口扩展。,8.1 扩展并行三总线,主要内容 8.1.1 片外三总线结构 8.1.2 MCS-51系统扩展的实现 8.1.3 总线驱动,8.1.1 片外三总线结构,通常,微机的

2、CPU外部都有单独的并行地址总线、数据总线、控制总线。MCS-51单片机由于引脚的限制,数据总线和地址总线是复用的。 地址需要锁存:为了能把复用的数据总线和地址总线分离出来以便同外部的芯片正确的连接,需要在单片机的外部增加地址锁存器,从而构成与一般CPU相类似的三总线结构,如图8-1所示。,P2,ALE,89C52,P0,PSEN,WR,RD,地址锁存器,地址总线,数据总线,控制总线,A8A15,A0A7,D0D7,8.1.1 片外三总线结构,图8-1 89C52扩展的三总线,图8-2 地址总线扩展电路,8.1.1 片外三总线结构,地址锁存器74HC573与单片机P0口连接,扩展地址总线,如图

3、8-2所示。,74HC573简介74HC573是有输出三态门的电平允许8位锁存器。引脚信号如下: OE:输出允许端,为0时芯片有效。LE:锁存控制端,高电平时,锁存器的数据输出端Q的状态,与数据输入端D相同,即锁存器是透明的;当LE端从高电平返回到低电平时(下降沿后),输入端的数据就被锁存在锁存器中,数据输入端D的变化不再影响Q端。,8.1.1 片外三总线结构,一、地址总线 地址总线(Address Bus,AB)用于传送单片机送出的地址信号,以便进行存储器单元和I/O端口的选择。 地址总线是单向的,只能由单片机向外发送信息。 地址总线的数目决定了可直接访问的存储单元的数目。,8.1.1 片外

4、三总线结构,二、数据总线 数据总线(Data Bus,DB)用于单片机与存储器或I/O端口之间的数据传送。 一般数据总线的位数与CPU的字长一致,MCS-51单片机的数据总线是8位的。 数据总线是双向的,可以进行两个方向的数据传送。三、控制总线 控制总线(Control Bus,CB)是单片机发出的以控制片外ROM、RAM和I/O口读/写操作的一组控制线。,8.1.1 片外三总线结构,8.1.2 MCS-51系统扩展的实现,一、以P0口作低8位地址及8位数据的复用总线 复用,即一段时间内作两种或两种以上用途。 在这里指P0口在每个CPU周期的前半个周期输出低8位地址,由地址锁存器锁存,然后由地

5、址锁存器代替P0口输出低8位地址。后半个周期进行8位数据的输入输出。,二、以P2口作为高8位的地址总线 P0口的低8位地址加上P2的高8位地址就可以形成16位的地址总线,达到64KB的寻址能力。 实际应用中,往往不需要扩展那么多地址,扩展多少用多少口线,剩余的口线仍可作一般I/O口来使用。,8.1.2 MCS-51系统扩展的实现,三、控制信号线ALE:地址锁存信号,用以实现对低8位地址的锁存。PSEN:片外程序存储器读选通信号。EA:程序存储器选择信号。为低电平时,访问外部程序存储器;为高电平时,访问内部程序存储器。WR:片外数据存储器写选通信号。RD:片外数据存储器读选通信号。,8.1.2

6、MCS-51系统扩展的实现,8.1.3 总线驱动,总线驱动的原因:在单片机应用系统中,扩展的三总线上挂接很多负载,如存储器、并行接口、A/D接口、显示接口等,但总线接口的负载能力有限,因此常常需要通过连接总线驱动器进行总线驱动。,总线驱动器的作用:对于单片机的I/O口只相当于增加了一个TTL负载,因此驱动器除了对后级电路驱动外,还能对负载的波动变化起隔离作用。 在对TTL负载驱动时,只需考虑驱动电流的大小。 在对MOS负载驱动时,MOS负载的输入电流很小,更多地要考虑对分布电容的电流驱动。,8.1.3 总线驱动,总线驱动器的选择: 系统总线中地址总线是单向的,因此驱动器可以选用单向的,如74L

7、S244,还带有三态控制,能实现总线缓冲和隔离。 数据总线是双向的,其驱动器也要选用双向的,如74LS245。74LS245也是三态的,有一个方向控制端DIR。DIR=1时输出(AnBn),DIR=0时输入(AnBn)。,8.1.3 总线驱动,8.2 扩展简单并行输入/输出口,89C52有P0P3四组I/O口,但是在某些特定的场合,可能会出现I/O口不够用的情况。这时就需要通过扩展来增加I/O口的数量以满足使用的需要。 在很多应用系统中,采用74系列TTL电路或4000系列MOS电路芯片,扩展并行数据输入输出。,例1 在图8-4中,当P2.0=0,WR=1,RD=0时,通过74HC244(扩展

8、输入)读入按键状态,当P2.0=0,WR=0,RD=1时,通过74HC573(扩展输出)根据按键状态驱动发光二极管发光。 74HC244、74HC573的操作地址设为0xfeff。,8.2 扩展简单并行输入/输出口,P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.789C52 WRP2.0RD,D0 Q0D1 Q1D2 Q2D3 Q3D4 Q4D5 Q5D6 Q6D7 Q7LE VCC,Q0 D0Q1 D1Q2 D2Q3 D3Q4 D4Q5 D5Q6 D6Q7 D7G,+,+,74HC573,74HC244,+5V,图8-4 简单I/O接口扩展,8.2 扩展简单并行输入/输出口,

9、C语言程序清单:#include voidmain()unsigned char data tmp1, tmp2=0;unsigned char xdata *pt1;pt1=0xfeff; /给指针赋地址值0xfeffwhile(1) /循环 tmp1=*pt1;/从74HC244输入数据 if (tmp1!=tmp2)/判断输入改变时, *pt1 =tmp1;/从74HC573输出数据 tmp2=tmp1; ,汇编语言程序清单:MOV30H,#00H ;设一初值MOVDPTR,#0FEFFH;设端口地址LOOP:MOVXA,DPTR;从244读键盘新值CJNEA, 30H, NEXT;与上

10、次值比较SJMP LOOP;相等再读键盘值NEXT:MOV 30H,A;保存新键盘值MOVXDPTR,A;从573输出键盘值SJMP LOOP;继续读取键盘值,8.2 扩展简单并行输入/输出口,8.3 扩展并行数据存储器,主要内容 8.3.1 扩展存储器概述 8.3.2 数据存储器的扩展,8.3 扩展并行数据存储器,数据存储器即随机存取存储器(Random Access Memory,RAM),用于存放可随时修改的数据信息。 单片机使用的主要是静态RAM。 MCS-51系列单片机片外数据存储器的空间可达64KB,而片内数据存储器的空间只有128B或256B。如果片内的数据存储器不够用时,则需进

11、行数据存储器的扩展。,8.3.1 扩展存储器概述,存储器扩展的核心问题是存储器的编址问题。所谓编址就是给存储单元分配地址。 由于存储器通常由多个芯片组成,为此存储器的编址分为两个层次: 即存储器芯片的选择和存储器芯片内部存储单元的选择。,一、地址线的译码 存储器芯片的选择有两种方法:线选法和译码法。 1、线选法。所谓线选法,就是直接以系统的地址线作为存储器芯片的片选信号,为此只需把用到的地址线与存储器芯片的片选端直接相连即可。 2、译码法。所谓译码法,就是使用地址译码器对系统的片外地址进行译码,以其译码输出作为存储器芯片的片选信号。译码法又分为完全译码和部分译码两种。,8.3.1 扩展存储器概

12、述,(1)完全译码。地址译码器使用了全部地址线,地址与存储单元一一对应,也就是1个存储单元只占用1个唯一的地址。(2)部分译码。地址译码器仅使用了部分地址线,地址与存储单元不是一一对应,而是1个存储单元占用了几个地址。,8.3.1 扩展存储器概述,图8-5 地址译码关系图,8.3.1 扩展存储器概述,芯片译码地址:在设计地址译码器电路时,常采用地址译码关系图。所谓地址译码关系图,就是一种用简单的符号来表示全部地址译码关系的示意图,如图8-5所示。,二、扩展存储器所需芯片数目的确定 若所选存储器芯片字长与单片机字长一致,则只需扩展容量。所需芯片数目按下式确定: 芯片数目=,系统扩展容量存储器芯片

13、容量,8.3.1 扩展存储器概述,若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。所需芯片数目按下式确定: 芯片数目= ,系统字长存储器芯片字长,系统扩展容量存储器芯片容量,三、38译码器74LS138 38译码器74LS138为一种常用的地址译码器芯片。其中,G1、G2A、G2B为控制端。只有当G1为“1”,且G2A、G2B均为“0”时,译码器才能进行译码输出。否则译码器的8个输出端全为高阻状态。译码输入端与输出端之间的译码关系如表8-1所示。,8.3.1 扩展存储器概述,表8-1 74LS138的译码关系,8.3.1 扩展存储器概述,8.3.2 数据存储器的扩展,一、

14、常用静态RAM芯片 常见的静态RAM芯片有6264(8K8位)、62256(32K8位)、628128(128K8位)等。二、扩展数据存储器举例 例8-2 采用6264芯片在89C52片外扩展24KB数据存储器,如图8-8所示。,图8-8 6264扩展24KB数据存储器,P2.0P2.4P0ALEP2.5P2.6P2.7WERD,74HC573D QLE,74LS138A Y0B Y1C Y2,A8A12,D0D7,A0A7,8.3.2 数据存储器的扩展,8.4 串行扩展总线接口技术,主要内容 8.4.1 常用的串行总线接口简介 8.4.2 I2C总线 8.4.3 SPI串行外设接口总线,8.

15、4 串行扩展总线接口技术,串行扩展总线技术是新一代单片机技术发展的一个显著特点。 相对于并行总线接口,串行总线接口有着占用I/O口线少(一般34根),编程相对简单,易于实现用户系统软硬件的模块化、标准化等优点。 随着串行总线接口技术(SPI、I2C等)和各种串行接口芯片的发展,串行总线接口技术越来越受到人们的推崇。,8.4.1 常用的串行总线接口简介,一、I2C(Inter Integrated Circuit) I2C总线是Philips公司推出的芯片间串行传输总线。 I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展

16、方法。,二、SPI SPI总线是Motorola公司提出的一种同步串行外设接口。 SPI总线是三线制,可直接与多种标准外围器件直接接口。 三、Microware Microware总线是NS公司提出的串行同步双工通信接口。 Microware总线是三线制,由一根数据输出(SO)线、一根数据输入(SI)线和一根时钟(SK)线组成。,8.4.1 常用的串行总线接口简介,四、单总线(1-wire) 单总线及应用: 1-wire总线是Dallas公司研制开发的一种协议,主要用于便携式仪表和现场监控系统。 单总线结构:是利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对

17、从芯片进行数据的读取。,8.4.1 常用的串行总线接口简介,五、USB(Universal Serial Bus) USB总线及应用:USB总线是Compaq、Intel、Microsoft、NEC等公司联合制定的一种计算机串行通信协议。 USB总线的主要优点:比较于其他传统接口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也称为热插拔(Hot Plugging),8.4.1 常用的串行总线接口简介,六、CAN(Controller Area Network) CAN总线及应用: CAN总线是德国Bosch公司最先提出的多主机局域网总线,是国际上应用最广泛的现场总线之一。

18、CAN总线的主要优点:在由CAN总线构成的单一网络中,理论上可以挂接无数个节点。,8.4.1 常用的串行总线接口简介,8.4.2 I2C总线,一、I2C总线的特点 I2C总线最主要的优点是其简单性和有效性。 I2C总线的特点:其接口直接集成在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。 I2C总线的其它优点:它支持多主控(Multimastering),其中任何能够进行发送和接收的设备(节点)都可以成为主控器。,图8-9 典型I2C总线系统示意图,8.4.2 I2C总线,I2C总线的主控器:一个主控器能够控制信号的传输和时钟频率。当然,在任何时

19、间点上只能有一个主控器。如图8-9所示。,I2C总线支持多主和主从两种工作模式多主方式:通过硬件和软件的仲裁,主控器取得总线控制权。 主从方式:从器件地址包括器件编号地址和引脚地址两部分,器件编号地址由I2C总线委员会分配,引脚地址由外界电平的高低决定。 器件内部子地址:当器件内部有连续的子地址空间时,对这些空间进行连续读写,子地址会自动加1。,8.4.2 I2C总线,CPU发出的控制信号:分为地址码和控制量两部分。 地址码:用来选址,即接通需要控制的电路,确定控制的种类。 控制量:决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

20、,8.4.2 I2C总线,二、I2C总线的时序 I2C总线的信号:I2C总线在传送数据过程中共有三种类型信号,分别是:开始信号、结束信号和应答信号。 I2C总线 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。,8.4.2 I2C总线,SDASCL,开始信号允许数据变化 允许数据变化 允许数据变化 结束信号,图8-10 I2C总线的时序,8.4.2 I2C总线,如图8-10所示,为I2C总线的一般时

21、序。即起始信号、结束信号、允许数据线改变的条件等。,三、I2C总线的数据传输过程 数据传输时,主机先发送启动信号和时钟信号,随后发送寻址字节来寻址被控器件,并规定数据传送方向。 寻址字节由7位从机地址(D7D1)和1位方向位(D0,读0/写1)组成。 从机地址包括器件编号地址和引脚地址两部分。,8.4.2 I2C总线,R/,I2C总线器件的7位从器件(机)地址:,8.4.2 I2C总线,从机对地址的响应:当主机发送寻址字节时,总线上所有器件都将其中的高7位地址与自己的比较,若相同,则该器件根据读/写位确定是从发送器还是从接收器。 对从接收器:在寻址字节之后,主控发送器通过SDA线向从接收器发送

22、数据,数据发送完毕后发送终止信号,以结束传送过程。 对从发送器:在寻址字节之后,主控接收器通过SDA线接收被控发送器的发送数据。,8.4.2 I2C总线,每传输一位数据,都有一个时钟脉冲相对应。时钟脉冲不必是周期性的,它的时钟间隔可以不同。 I2C总线的备用状态(“非忙”状态):SDA和SCL都为“1”;只有当总线处于“非忙”状态时,数据传输才能被初始化。I2C总线的关闭状态:SCL箝位在低电平。 I2C总线上传输的数据和地址字节均为8位,且高位在前,低位在后。,8.4.2 I2C总线,数据线SDA上的一般情况:I2C总线以开始信号为启动信号;接着传输的是地址和数据字节,数据字节是没有限制的;

23、每个字节后必须跟随一个应答位(0);全部数据传输完毕后,以结束信号结尾。 SCL的“线与”特性:任一器件的SCL为低电平时,便时时钟线SCL变低,SDA上数据就被停止传送。,8.4.2 I2C总线,接收器的应答:正常应答位为0;当接收器接收到一个字节后无法立即接收下一个字节时,便向SCL线输出低电平而箝住SCL(SCL=0),迫使SDA线处于等待状态。被控器箝住SCL线为低电平,使主控发送器处于等待状态的情况:如图8-11中的A处,当接收器在A点接收完主控器发来的一个字节时,需要处理接收中断而无法继续接收,则被控器便可箝住SCL线为低电平,使主控发送器处于等待状态,直到被控器处理完接收中断后,

24、再释放SCL线。,8.4.2 I2C总线,图8-11 I2C总线的数据传送字节格式,开始信号,从地址,来自接收器响应信号,发送器等待,数据,来自接收器响应信号,方向位,停止信号,重复开始信号,若传送多个字节则重复,SCL,S,SDA,MSB,ACK,ACK,R/W,P/S,A,8.4.2 I2C总线,关于应答信号:(1)应答信号的发送时刻:数据传输时,发送器每发完一个字节,都要求接收方发回一个应答信号(0)。 (2)应答信号的过程:发送时钟仍由主控器在SCL上产生。主控发送器必须在被控接收器发送应答信号前,预先释放对SDA线的控制(SDA1),以便主控器对SDA线上应答信号的检测。,8.4.2

25、 I2C总线,正常应答:主控器发送时,被控器接收完每个字节需发回应答信号“0”,主控器据此进行下一字节的发送。 异常应答:如果被控器由于某种原因无法继续接收SDA上数据时,可向SDA输出一个非应答信号(1),主控器据此便产生一个Stop来终止SDA线上的数据传输。 主控器接收时也应给被控器发应答信号。主控器接收时的结束应答:当主控器要结束传输时,必须给被控器发一个非应答信号“1”,令被控器释放SDA线,以便主控器发送Stop信号来结束数据的传输,如图8-12所示。,8.4.2 I2C总线,图8-12 I2C总线的应答信号,8.4.2 I2C总线,四、I2C的数据格式 1、主控器写数据 主机写数

26、据过程:整个过程均为主机发送,从机接收,数据的方向位R/W=0。应答位ACK由从机发送,当主机产生结束信号后,数据传输停止。格式如下:,8.4.2 I2C总线,A/,SLA,S为开始信号,P为结束信号,A为应答信号, 为非应答信号,,SLA,为寻址字节(写),Data 1Data n为被传送的n个数据。,为主控器发送,被控器接收。,为被控器发送,主控器接收。,8.4.2 I2C总线,2、主控器读数据 主机读数据过程:寻址字节为主机发送、从机接收,方向位R/W=1,n个数据字节均为从机发送、主机接收。主机接收完全部数据后发非应答位(1),表明读操作结束。格式如下:,SLA R为寻址字节读。,8.

27、4.2 I2C总线,3、主控器读/写数据 改变传送方向的数据传输过程:由于读/写方向有变化,开始信号和寻址字节都会重复一次,但读/写方向(R/W)相反。格式如下:,Sr为重复开始信号,Data 1Data n为主控器的读数据,DATA 1DATA n为主控器的写数据。,SLA,A/,8.4.2 I2C总线,三、I2C总线的应用 带有I2C接口的单片机:Cygnal的 C8051 F0XX系列,Philips的P87LPC7XX系列,Microchip的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。 图8-13为I2C总线外围扩展示意图。,8.4.2 I2C总线,图

28、8-13 I2C总线外围扩展示意图,MCU SDA SCL,LED显示器LED驱动控制器SDA SCL,LCD显示器LCD驱动控制器SDA SCL,键盘I/OSDA SCL,打印机I/OSDA SCL,VCC,8.4.2 I2C总线,RTC实时时钟,DTMF双音多频编码解码器。例8-3 89C52模拟I2C。如图8-14所示。,图8-14 89C51模拟I2C,89C52 P1.0P1.1,I2C器件SCLSDA,10K2,VCC,8.4.2 I2C总线,C语言程序清单:#include #include /有位操作、空操作等sbit scl=0x90;/P1.0的地址sbit sda=0x9

29、1;/P1.1的地址void start(void)/发送开始信号 sda=1;scl=1;_nop_(); /延时 _nop_();sda=0;_nop_();_nop_();scl=0;,8.4.2 I2C总线,void stop(void) /发送结束信号 sda=0;scl=1; _nop_(); /延时_nop_();sda=1;_nop_();_nop_();sda=0;scl=0;,8.4.2 I2C总线,bit tack(void)/检查应答 sda=1;/准备接收 scl=1;_nop_();_nop_();if(sda!=0) /判断是否有应答return sda; /若非

30、应答返回sda scl=0;,8.4.2 I2C总线,void txbyt(unsigned char txdat) /字节发送 unsigned int i;for(i=0;i8;i+)/一个字节8次按位循环发送 if(txdat /左移准备取次高位 ,8.4.2 I2C总线,unsigned char rxbyt(void)/字节接收 unsigned char rxdat=0; /接收数据存于rxdat unsigned int i;for(i=0;i8;i+) sda=1;/开始接收 scl=1;if(sda/返回接收到的数据,8.4.2 I2C总线,汇编语言程序清单: SCL EQU

31、 P1.0SDA EQU P1.1;发送开始信号START:SETB SDA SETB SCLNOP;NOP的数目由时钟频率确定NOP;此处用NOP来延时 CLR SDANOPNOPCLR SCLRET,8.4.2 I2C总线,;结束信号STOP:CLR SDASETB SCLNOPNOPSETB SDANOPNOPCLRSDACLR SCLRET,8.4.2 I2C总线,;应答位检查TACK:SETB SDA SETB SCLNOPNOPCLR 30H;正常标志 MOV C,SDAJNC TEND; 正常应答转移 SETB 30HTEND:CLR SCLRET,8.4.2 I2C总线,;发送

32、子程序 TXBYT:MOV R4,#08H ;数据长度为8位 TX0:RLC A ; 发送位送入CYJC TX1;CY位为1转到TX1CLR SDA;置为低电平,发送0 SETB SCLNOPNOPCLR SCL; 高电平保持数据稳定DJNZ R4,TX0RET,8.4.2 I2C总线,TX1:SETB SDA SETB SCLNOPNOPCLR SCL; 脉冲变为低电平改变数据 CLR SDADJNZ R4,TX0RET,8.4.2 I2C总线,;字节接收子程序 RXBYT:MOV R4,#08HRX0: SETB SDASETB SCLMOV C,SDA ;读入SDA引脚状态MOV A,R

33、5;数据位储存在R5 RLC AMOV R5,ACLR SCLDJNZ R4,RX0RET,8.4.2 I2C总线,8.4.3 SPI串行外设接口总线,SPI(Serial Peripheral Interface,串行外围设备接口):是Motorola公司推出的一种同步串行通信方式,是一种三线同步总线。 SPI的特点:因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。图8-15为SPI总线典型结构。,图8-15 SPI总线系统典型结构示意图,8.4.3 SPI串行外设接口总线,SCKMOSIMISOMCU(主)I/OI/OI/OI/O,SCKMOSIMISOM

34、CU(从)CS,SCK MOSI MISO外围器件CS,SCK MOSI MISO外围器件CS,SCK MOSI MISO外围器件CS,SPI总线定义:串行时钟线(SCK,同步脉冲)主机输入/从机输出数据线(MISO,高位在前)主机输出/从机输入数据线(MOSI,高位在前)从机选择线 一、用一般I/O口线模拟扩展SPI外设接口 用P1.0模拟MCU的数据输出端(MOSI) 用P1.1模拟SPI的SCK输出端(SCK) 用P1.2模拟SPI的从机选择端(CS) 用P1.3模拟SPI的数据输入端(MISO),8.4.3 SPI串行外设接口总线,单片机模拟1位数据输入/输出的过程如下: MCU输出1

35、位SCK时钟的低电平,使接口芯片串行左移,1位数据输入至89C52的P1.3; 再置P1.1为1,使89C52从P1.0输出1位数据至串行接口芯片 依次循环8次,完成1次通过SPI传输1个字节的操作。 在一个CLK中,下降沿输出,上升沿输入,或反之。,8.4.3 SPI串行外设接口总线,例8-4 如图8-16所示,MCU串行输入子程序SPIIN,从2814 (E2PROM)的SPISO线上接收1字节数据并放入寄存器R7中。,图8-16 89C52与MCM2814的硬件连接图,8.4.3 SPI串行外设接口总线,C语言程序清单:#inclued #include sbit sck=0x91;/P

36、1.1的地址sbit ss=0x92;/P1.2的地址 sbit miso=0x93;/P1.3的地址sbit mosi=0x90;/P1.0的地址 unsigned char spiin(void) /接收子程序 unsigned int i;unsigned char tmp=0; /接收到数据暂存于tmp sck=1; /准备开始 ss=0; /置片选信号,8.4.3 SPI串行外设接口总线,for(i=0;i8;i+)sck=0;_nop_();_nop_();if(miso/接收完,返回数据,8.4.3 SPI串行外设接口总线,汇编语言程序清单:SPIIN:SETBP1.1CLRP1

37、.2MOVR1,#08HSPIN1:CLRP1.1NOPNOPMOVC,P1.3;从机输出送C RLCA;左移至累加器ACC SETBP1.1DJNZR1,SPIN1MOVR7,ARET,8.4.3 SPI串行外设接口总线,例8-5 MCU串行输出子程序SPIOUT,将89C52中R7寄存器的内容传送到2814的SPISI线上。C语言程序清单:#inclued #include sbit sck=0x91;/P1.1的地址sbit ss=0x92;/P1.2的地址 sbit miso=0x93;/P1.3的地址sbit mosi=0x90;/P1.0的地址,8.4.3 SPI串行外设接口总线,

38、void spiout(unsigned char tmp) /发送子程序 unsigned int i;sck=1;ss=0; for(i=0;i8;i+)sck=0;_nop_();_nop_();if(tmp/左移准备取次高位 ,8.4.3 SPI串行外设接口总线,汇编语言程序清单:SPIOUT:SETB P1.1 CLR P1.2MOV R1,#08HMOV A,R7SPIOT1:CLR P1.1 NOPNOPRLC AMOV P1.0,C ;左移ACC最高位至CSETB P1.1;进位C送SPISI线上DJNZ R1,SPIOT1RET,8.4.3 SPI串行外设接口总线,例8-6

39、MCU串行输入/输出子程序SPIIO,将89C52中R7的内容传送到2814的SPISI线上,同时从2814的SPISO接收1字节数据存入R0中。同时收发程序:#inclued #include sbit sck=0x91;/P1.1的地址sbit ss=0x92;/P1.2的地址 sbit miso=0x93;/P1.3的地址sbit mosi=0x90;/P1.0的地址,8.4.3 SPI串行外设接口总线,unsigned char spiio(unsigned char ttmp) unsigned int i;unsigned char rtmp=0; /接收暂存于rtmp sck=1

40、;ss=0;for(i=0;i8;i+) /循环接收8位sck=0;_nop_();_nop_();,8.4.3 SPI串行外设接口总线,if(ttmp,8.4.3 SPI串行外设接口总线,汇编语言程序清单:SPIIO:SETBP1.1CLRP1,2MOVR1,#08H;设置计数器MOVA,R7SPIO1:CLRP1.1NOP;延时NOPMOVC,P1.3RLCAMOVP1.0,CSETBP1.1DJNZR1,SPIO1MOVR0,ARET,8.4.3 SPI串行外设接口总线,二、利用89C52串口方式0实现SPI操作 如图8-17所示,利用89C52串行口方式0与串行时钟芯片HT1380连接实现SPI操作,适用于对绝对时钟要求较高的场合。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。