单片机的扩展应用_第1页
单片机的扩展应用_第2页
单片机的扩展应用_第3页
单片机的扩展应用_第4页
单片机的扩展应用_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、问题的提出 在单片机应用 系统的设计中 , ,往往出现 RAM, ROMRAM, ROM或者 I/OI/O口不够的 情况,怎么办 ? ROMROM的扩展 RAMRAM的扩展 I/OI/O口的扩展 第8章 单片机小系统及片外扩展 系统扩展 1、扩展系统是以单片机为核心进行的; 2、扩展内容包括ROM、RAM、和I/O接口电路等; 3、扩展是通过系统总线进行的,通过总线把各扩展部 件连接起来,并进行数据、地址和信号的传送,要 实现扩展首先要构造系统总线。 (尽可能采用串行扩展方案) 本章内容 8.1 串行扩展总线接口技术 8.2 并行扩展三总线的产生 8.3 程序存储器的扩展 8.4 数据存储器的

2、扩展 8.5 I/O口接口扩展电路设计 8.1 串行扩展总线接口技术 SPI串行外设接口总线:同步串行3线方式 I2C总线:同步串行2线 单总线:采用单根信号线,既可作为数据输入,又 可以作为输出,而且数据传输是双向的,适用于单 主机系统 CAN总线:多主竞争式的串行数据通信协议,实时, 特别适合工业过程监控设备的互连,最有前途的现 场总线之一 。需CAN控制器 SPI串行外设接口总线 同步串行方式 需34条线:串行时钟线(SCK)、 主机输入/从机输出数据线MISO、 主机输出/从机输入MOSI、从 机片选线CS 许多外设都具有SPI接口,如FLASHRAM、网络 控制器、LCD显示驱动器、

3、A/D转换器等 89C51单片机串行扩展SPI外设接 口的方法 用一般I/O口线模拟SPI操作 利用串行口实现SPI操作 用一般I/O口线模拟SPI操作 根据SPI串行总线的操作时序特点 ,进行软件模拟 X25F008( E2PROM) MCU串行输入子程序SPIIN 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 ;从机输出SPISO送进位C RLC A ;左移至累加器ACC SETB P1.1 ;使P1

4、.1(时钟)输出为1 DJNZ R1,SPIIN1 ;判断是否循环8次(8位数据) MOV R0,A ;8位数据送R0 RET X25F008具有SPI接口,且在SCK的上升沿接收数据, 在下降沿发送数据。则MCU在下降沿时接收数据。 MCU串行输出子程序SPIOUT 将MCS-51单片机中R0寄存器的内容传送到X25F008的SPISI线上的程序如下: SPIOUT:SETBP1.1;使P1.1(时钟)输出为1 CLRP1.2;选择从机 MOVR1,#08H;置循环次数 MOVA,R0;8位数据送累加器ACC SPIOUT1:CLRP1.1;使P1.1(时钟)输出为0 NOP;延时 NOP

5、RLCA;左移至累加器ACC最高位至C MOVP1.0,C;进位C送从机输入SPISI线上 SETBP1.1;使P1.1(时钟)输出为1 DJNZR1,SPIOUT1;判是否循环8次(8位数据) RET MCU串行输入/输出子程序SPIIO 将MCS-51单片机R0寄存器的内容传送到X25F008的SPISI 中,同时从X25F008的SPISO接收8位数据的程序如下: SPIIO:SETBP1.1;使P1.1(时钟)输出为1 CLRP1.2;选择从机 MOVR1,#08H;置循环次数 MOVA,R0;8位数据送累加器ACC SPIIO1:CLRP1.1;使P1.1(时钟)输出为0 NOP;延

6、时 NOP MOVC,P1.3;从机输出SPISO送进位C RLCA;左移至累加器ACC最高位至C MOVP1.0,C;进位C送从机输入 SETBP1.1;使P1.1(时钟)输出为1 DJNZR1,SPIIO1;判断是否循环8次(8位数据) RET 利用串行口实现SPI操作 串行时钟芯片HT1380与89C51接口电路 89C51 SCLK I/O RST TX D RX D P1. 0 X 1 X 2 32k Hz 需要通过单片机的开关量I/O口线进行芯片选择; 当芯片未选中时,数据端口均处于高阻状态; 与单片机交换信息时均要求单片机串行口以方式 0进行; 传输数据时的桢格式局要求先传送命令

7、/地址,再 传送数据。 因为In/Out共 享一个RXD线 ,需先识别读/ 写 利用51单片机串口扩展SPI口的特点 I2C总线 同步串行 需两根信号线:数据线SDA和时钟线SCL。 纯软件的寻址方法(故无需片选线) 支持多主控(multimastering) 由PHILIPS公司开发的两线式 串行总线。 常用I2C外围器件 vSRAM vEPROM vADC/DAC vRTC vI/O等 支持热插拔 I2C总线 专用集成电路 A/D、D/A转换器 单片机A 液晶显示驱动器 静态RAM或EEPROM 单片机B S D A S C L 图8-9 I2C总线典型系统示意图 总线上每一个节点都有一个

8、固定的节点地址 主机发送的第一个字节为寻址字节 数据传输需遵循规定的传输格式 I2C总线寻址字节 在起始信号之后,必须是器件的寻址字节,其 中高四位为器件类型识别符(不同的芯片类型 有不同的定义,EEPROMEEPROM一般应为10101010),接 着三位为片选,最后一位为读写位,当为1 1时 为读操作,为0 0时为写操作 I2C总线基本操作 vI2C规程运用主/从双向通讯。器件发送数据到 总线上,则定义为发送器,器件接收数据则 定义为接收器。主器件和从器件都可以工作 于接收和发送状态。 总线必须由主器件(通 常为微控制器)控制,主器件产生串行时钟 (SCL)控制总线的传输方向,并产生起始和

9、 停止条件。SDA线上的数据状态仅在SCL为低 电平的期间才能改变,SCL为高电平的期间, SDA状态的改变被用来表示起始和停止条件。 I2C总线在传送数据过程中典型信号 v开始信号:SCL为高电平时,SDA由高电平 向低电平跳变,开始传送数据。 v结束信号:SCL为低电平时,SDA由低电平 向高电平跳变,结束传送数据。 v应答信号:接收数据的IC在接收到8bit数据后 ,向发送数据的IC发出特定的低电平脉冲, 表示已收到数据。 51单片机与I2C总线的接口 对不带I2C接口的51单片机,若去控制总线 ,只需两个I/O口线,用软件模拟数据传送 典型信号时序。如起始位、终止位、应答 位、非应答位

10、、发送字节、接收字节等。 数据传送模拟程序,包括: 应答位检查子程序,发送一字节子程序 ,接收一字节子程序,发送N字节子程序, 接收N字节子程序。 51单片机 P1.6 P1.7 具有I2C总线 接口的外设 SCL SDA V cc P210 启动 I2C总线子程序STA voidI2C_Start(void) /*启动I2C总线的函数,当SCL为高电平时使SDA产生 一个负跳变*/ SDA=1; SCL=1; DELAY(DELAY_TIME); SDA=0; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); P210 停止 I2C总线子程序STOP

11、voidI2C_Stop(void) /*终止I2C总线,当SCL为高电平时使SDA产生一个正 跳变*/ SDA=0; SCL=1; DELAY(DELAY_TIME); SDA=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); 发送应答位ACK voidSEND_0(void)/*SENDACK*/ /*发送0,在SCL为高电平时使SDA信号 为低*/ SDA=0; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); 发送非应答位MNACK voidSEND_1(void) /*发送1,在SCL

12、为高电平时使SDA信号为高 */ SDA=1; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); 应答位检查子程序CACK bitCheck_Acknowledge(void) /*发送完一个字节后检验设备的应答信号*/ SDA=1; 置SDA为输入方式 SCL=1; 使SDA上数据有效 DELAY(DELAY_TIME/2); F0=SDA; DELAY(DELAY_TIME/2); SCL=0; DELAY(DELAY_TIME); if(F0=1) returnFALSE; returnTRUE; 从I2C总线读一个字节RDBYT c

13、harReadI2CByte(void) /*从I2C总线读一个字节*/ charb=0,i; for(i=0;i8;i+) SDA=1;/*释放总线*/ SCL=1;/*接受数据*/ DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0=1) b=b1; b=b|0 x01; else b=b1; returnb; voidWriteI2CByte(charb) /*向I2C总线写一个字节*/ chari; for(i=0;i8;i+) if(bi) else SEND_0(); 向I2C总线写一个字节 voidWrite_One_Byte(charaddr,

14、charthedata) bitacktemp=1; /*writeabytetomem*/ I2C_Start(); WriteI2CByte(0 xa0); acktemp=Check_Acknowledge(); WriteI2CByte(addr);/*address*/ acktemp=Check_Acknowledge(); WriteI2CByte(thedata);/*thedata*/ acktemp=Check_Acknowledge(); I2C_Stop(); 向24c02 (I2C EEPROM) 发送一字节的模拟子程序 读取一字节的模拟子程序 char Read_O

15、ne_Byte(char addr) bit acktemp=1; char mydata; /*read a byte from mem*/ I2C_Start(); WriteI2CByte(0 xa0);启动总线 acktemp=Check_Acknowledge(); WriteI2CByte(addr);/*address*/ acktemp=Check_Acknowledge(); I2C_Start(); WriteI2CByte(0 xa1); 重新启动总线 acktemp=Check_Acknowledge(); mydata=ReadI2CByte(); acktemp=C

16、heck_Acknowledge(); return mydata; I2C_Stop(); 地址总线ABP2,P0(373锁存器) 数据总线DBP0 控制总线CBALE, , , 程序存储器 RAM,I/O RD PSEN WR 8.2 并行扩展三总线的产生 8051有片内ROM的容量:4K 片外最大可扩展64K ROM。 有关的管脚:EA 可用来扩展的存储器芯片: EPROM:2716(2K*8),2732,2764,27256等 EEPROM:2816 (2K*8) ,2864,28128等 v还要用到锁存器芯片:例74LS373。 8.3 程序存储器的扩展 访问程序存储器的控制信号 A

17、LE :指示74LS373锁存低8位地址 :用于选通片外程序存储器,接片外ROM 的 引脚 :CPU读取片内/片外程序存储器的控制 信号。高电平访问片内存储器,低电平访问片外 存储器。 PSEN EA OE EPROM扩展实例 -在89C51单片机上扩展4KB EPROM . . . D7 Q7 373 D0 Q0 G 控制 线 A11 A8 A7 A0 2732 O7 O0 OE CE P2.3 P2.0 P0.7 89C51 P0.0 ALE PSEN 12根地 址线 8根数 据线 读外部程序存储器时序 ALE PSEN 注意:上述时序是在取指令过程中自动产生 一个机器周期 送地址 取出指

18、令 地址范围的确定 取决于CE(片选)和地址线的接法,本例中CE 接地。请确定地址范围 要求根据电路图,确定其中EPROM的地址范围。 注意:当同时扩展多片ROM时,可采用译码法 或线选法来分别选中芯片,每个芯片分配的地址 范围不同。 程序存储器扩展举例 74LS373是带三态输出的地址锁存器。三态控 制端 接地,以保持输出常通,cp(G)端 接8031的ALE引脚,每当ALE端的电平产生复 跳变时, 74LS373锁存低8位地址线,并输出 供2764使用。 2764是8K*8bit的EPROM,有13根地址线 (A12A0),2764的片选信号 由P2.5送出, 低电平有效, 端与8031的

19、 引脚信 号相连接,当 信号有高电平变成低电 平时,允许2764输出。 OE CE OE PSEN PSEN 0000 0000 0000 0000-0001 1111 1111 1111 0100 0000 0000 0000-0101 1111 1111 1111 1000 0000 0000 0000-1001 1111 1111 1111 1100 0000 0000 0000-1101 1111 1111 1111 地址范围 P2 .5 利用译码器选通存储器 接地,常有效 存储器地址线14条,容量16K 全译码,地址不重叠 地址:4000H 7FFFH 当A15=0时,选通139,A

20、14A13=00,1 01,2 10,3 0010 0000 0000 0000-0011 1111 1111 1111 2000-3FFF0000-1FFF4000-5FFF 8.4 数据存储器的扩展 静态RAM:6116,6264,62256,62128 地址线、数据线、控制线 由CPU地址线或经译码器选通,并获得地址; 由CPU (P3.7)选通; 由CPU (P3.6)选通。 当CPU执行输入/输出指令MOVX时, 、 有效 E2PROM:2816,2817,2864A。 OE CE WE RD WR RD WR 读/ /写外部数据存储器时序 PSEN 一个机器周期 ALE 一个机器周

21、期 RD/WR 访问ROM,取 出MOVX指令 访问RAM 读/写数据 送地址 注意:上述红色线时序是在执行MOVX 指令情况下 扩展注意的问题: 读写控制 片选控制 地址的分配: 地址是一个范围空间 RAMRAM扩展实例 -在80518051单片机上扩展2K RAM2K RAM . . D7 Q7 373 D0 G Q0 A10 A8 A7 A0 6116 O7 O0 RD WR CE P2.2 P2.0 P0.7 8051 P0.0 ALE RD WR P2.7 扩展存储器举例(PM,DM) 32K, A15(P 2.7)选 通,地 址: 0000H- 7FFFH 常用的扩展方法有: v简

22、单的I/O口扩展 v可编程I/O口芯片 v利用串行口扩展并行口 v51单 片机有4 组并口 P0-P3 ,为什么 还要扩展 I/O口? 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部

23、RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 扩展I/OI/O口与外部RAMRAM统一编址 使用同样的指令MOVXMOVX访问控制总线RD/WRRD/WR 8.5 I/O口接口扩展电路设计 串口工作在什 么方式? 简单I/O口扩展 用并行口扩展I/O口 选择TTL电路或MOS电路即能组成简单的扩展 I/O口。 如:用8位三态缓冲器74LS244可扩展输入口; 用8D锁存器74LS273、74LS373、74LS377 等可组成输出口。 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 WR RD D D D D D D D D Q Q Q Q Q Q Q Q 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 D D D D D D D D Q Q Q Q Q Q Q Q 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 CLR K K K K K K K K 0 1 2 3 4 5 6 7 +5V LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 1 1 G1 8031 74LS27374LS244 G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论