51单片机总线设计全攻略
- 格式:pdf
- 大小:322.53 KB
- 文档页数:27
51单⽚机I2C总线I2C总线是飞利浦公司推出的⼀种串⾏总线,所有器件共⽤两根信号线,实现数据的传输。
总线接⼝接了上拉电阻,默认为⾼电平,所以就可以⽤“当低电平出现”来标记出⼀种起始信号。
我个⼈把它想象成:许多⼈在⼀条⾛廊上的不同房间(器件)⾥,⼤家都把门打开,连出两根长长的听筒(⼩时候玩的那种),每个⼈都从两根⼤主线上各接⼀根到⾃⼰房间⾥。
两根听筒平时都是安静的(1)。
如果有某房间的⼈叫了⼀声(0),那剩下的⼈就知道,我们准备开始通话了。
为了保证秩序,⼤家选出⼀个⼈当领队,由他来主导通话的过程。
这就是总线的主机,其他⼈就是从机。
从机有多个,主机只有⼀个。
两根信号线,⼀根叫数据线SDA,⼀根叫时钟线SCL。
顾名思义,数据线⽤来传输数据,时钟线⽤来管理顺序。
怎么样表⽰开始,怎么样表⽰结束,⽤下⾯的图表⽰。
注意有严格的时间规定。
⾸先,我们知道怎么样算是通话的开始和结束(起始信号和终⽌信号)。
然后,规定怎样算是回答“可以”,怎么算是回答“不可以”(应答和⾮应答)。
接着,我们要知道谁向谁喊话,所以要给每个房间的⼈都赋予⼀个名字,也就是地址。
再⽤⼀个0或1表⽰⽅向,从谁到谁。
因此,数据传输的过程,⼤体就是如此:领队喊出“开始”,说出⼀个房间名,同时,所有房间的⼈确认是不是⾃⼰的。
领队表明⽬的,说出是向他传数据,还是从他那读数据;然后,确认是⾃⼰房间的队员给出应答,可以就开始传输数据。
完成后,主机/从机给出应答,表明收到了没有。
下⾯就是SDA上传送的数据格式。
(a)主机向从机发送数据S表⽰起始信号。
阴影表⽰主机发送。
A表⽰应答,上加划线表⽰⾮应答。
P表⽰停⽌。
(b)主机发送数据后,从从机读数据(c)传输过程中,想改变⽅向⽅法是,重复⼀次起始信号和从机地址,加⼀个⽅向位来改变⽅向。
SCL是⽤来管秩序的。
只要SCL保持⾼电平状态,SDA正在传的数据就不能乱动,只有把它拉低以后,SDA才能变化。
这样确保数据传输不会乱套,所以在实际的传输过程中,SCL会不断地翻转。
MCS-51单片机总线及接口技术分析曾绮摘要:本文开始总体上描述了总线与接口的作用及它们之间的关系,然后以MCS-51单片机为例介绍了单片机的三种总线:数据总线、地址总线、控制总线。
并依据典型的开发板原理图,介绍了51单片机与矩阵键盘,LCD液晶屏等的借口电路。
对51单片机的引脚功能和读写时序进行了具体介绍。
关键字:MCS-51 总线接口键盘LCD1.总线与接口综述计算机中多个功能部件共享的一组信息传输线称为总线,而接口则是两个系统或子程序交接并通过它彼此作用的部分。
计算机总线按照其所处的层次分类可分为片内总线、内部总线、系统总线和外部总线。
接口按照其传输数据的方式分类课分为串行接口和并行接口。
其实总线与接口是密不可分的,它们一起构成了计算机或嵌入式系统各功能模块之间的信息传输通道。
MCS-51 单片机主要应用于嵌入式应用中,即单片机并不作为独立的设备,而是作为其他设备的智能核心,在设备中起到检测、处理和控制等作用。
在单片机的40条引脚中有2条专用于主电源的引脚,2条外接晶体的引脚,4条控制或与其它电源复用的引脚,32条输入/输出(I/O)引脚。
这些引脚构成MCS-51单片机片外三总线结构,即:①地址总线(AB):地址总线宽为16位,因此,其外部存储器直接寻址为64K 字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。
②数据总线(DB):数据总线宽度为8位,由P0提供。
③控制总线(CB):由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。
其中P3口的大二功能如下所示:P3.0 10 RXD(串行输入口)P3.1 11 TXD(串行输出口)P3.2 12 INT0(外部中断0)P3.3 13 INT1(外部中断1)P3.4 14 T0(定时器0外部输入)P3.5 15 T1(定时器1外部输入)P3.6 16 WR(外部数据存储器写脉冲)P3.7 17 RD(外部数据存储器读脉冲)2 STC开发板应用举例下面以STC开发板的原理图为例介绍其外部接口:2.1芯片引脚图:以上是双列直插的51单片机的外部引脚图,图中显示出了第9、18、19脚的使用方法。
址线, 很容易扩展到8 只LED 数码管,WR 信号分别与A8~A15 按或关系连接, 每位地址线均为低电平有效, 即可实现8 个有效地址。
该方案电路简单, 但有效地址数太少, 不适用于复杂系统设计。
2.低8 位地址锁存通常的设计电路是使用8D 锁存器74LS373实现地址锁存, 74HC573 与之逻辑功能相同, 只是引脚布局不一样, 使用74573 布线更容易。
74LS373 真值表如图4所示: 在输出允许OE 为L、控制使能LE 为H 时, 输出为跟随状态;OE 为L、LE 为L 时, 输出为保持状态。
地址锁存电路如图5 所示。
OE 接地, LE 接单片机的ALE脚将产生满足时序的低8 位地址信号。
执行以下三条指令会得到如图6所示的时序图:MOV DPTR, # 0FF55H;低8 位地址为55HMOV A, # 0AAH; 待发送数据0AAH→A( 55H 取反)MOVX, @DPTR, A;A 中的0AAH送地址为0FF55H 的对象中会。
从图6 中可以看出, P0 口先送55H, 在ALE 下降沿实现地址锁存, 随后送出数据0AAH, 在WR 有效( 低电平) 期间锁存器输出低8 位地址55H,P0 口送出数据0AAH。
3.带译码器的复杂地址接口电路理论上高8 位地址线可以产生256 个有效地址, 如何实现地址“扩展”呢? 地址扩展准确描述是地址译码, 例如3 根地址线可以译码成8 个地址, 4根译码成16 个有效地址。
这里选择3- 8 译码器实现地址译码, 电路图以及对应的编址如表1 所示。
Y7, 这样LCD 的四个驱动地址( 数据读写和命令读写) 为0CFFFH 到0FFFFH ( 无关位为1) 或者8700H 到0B700H( 无关位为0) 。
有些时候单片机引脚不够用, 还要进行扩展, 输入口扩展电路如图10 所示, 利用74HC573( 74LS373) 的高阻态功能,将其输出Q0~Q7 接P0 口, 在满足总线地址读操作中, 可以把输入InPORT的数据读入单片机的累加器, 地址为0F8FFH 或8000H。
单片机总线设计法全攻略1、目前广大工程师在设计单片机系统时的两种方案之我见针对51单片机,工程师们在设计系统时,从宏观上讲无非就是两种方案:总线式设计方案和非总线式设计方案。
所谓总线式设计方案就是利用51单片机的读写外部RAM功能,将要设计的外部设备(比如说键盘、液晶等)统统挂到单片机总线上,使其统一按类似读写外部RAM功能的指令方法进行操作;而所谓非总线式设计方案,则是不利用单片机的读写外部RAM功能,而直接利用I/O 口读写方式进行外部设备的读写,比如说LED灯、液晶等,因为液晶有两种读写方式,总线方式和模拟I/O方式(贵刊也有文章介绍过),而这里读写液晶的模拟I/O方式就是这里我要说的非总线式设计方案。
那么这两种方案到底哪一种好呢?说这句话可能有点外行,我自己也这样认为,但是为了更好的让初学者了解其中的道理,我还是班门弄斧简单阐述一下:首先要说明,我的这种阐述是建立在有读写外部RAM功能的单片机的基础之上的。
我个人认为,两种方案各有利弊:对于总线式设计方案来说,优点就是能够充分发挥单片机的总线读写功能,系统一旦设计完成,易于日后的升级和扩展。
缺点是灵活性差,硬件连接比较固定;同时由于单片机读写总线时必定要产生一定的总线时间延迟,这样对于低速的单片机来说,如果设计的系统非常庞大的话,那就需要设计人员考虑一下实时性要求了,但是根据我个人多年来的开发经验来说,只要设计得当,一般问题不大,但还是将此问题摆出来,让大家商榷。
对于非总线式设计方案来说,最大的优点就是灵活性强,这种方案可以根据设计者的爱好自由选择单片机端口进行外围设备的设计(当然是要在符合设计原则的前提下),缺点是升级需要重新设计电路图。
2、总线法设计单片机系统的原理和方法2.1 总线法设计原理简介总线式设计方案对于很多的初学者来说是比较困难的,因为对于这种方法来说,牵扯到单片机和外围设备时序逻辑的分配、地址空间的分配、总线驱动能力等等的问题,一旦设计不好,系统便无法启动,或者说部分模块无法工作。
大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了使用无线遥控模块的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习IIC总线的基本原理与应用实例。
先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC 总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。
上图是我们将要使用的51单片机综合学习系统硬件平台,如图1所示,本期实验我们用到了综合系统主机、板载的AT24C02芯片,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。
在很多电子设备中都有要随时存取数据作为历史记录或标志位。
目前常用的存储器有24CXX系列和93CXX系列,前者是I2C总线结构,后者是SPI总线结构,本小节先介绍I2C结构的EEPROM(24CXX)作用方法,在后面小节中再介绍SPI结构的EEPROM(93CXX)使用方法。
I2C总线基本概念I2C总线,是INTERINTEGRATEDCIRCUITBUS的缩写,即“内部集成电路总线”。
I2C总线是Philips公司推出的一种双向二线制总线。
目前Philips公司和其它集成电路制造商推出了很多基于I2C总线的外围器件。
I2C总线包括一条数据线(SDA)和一条时钟线(SCL)。
协议允许总线接入多个器件,并支持多主工作。
总线中的器件既可以作为主控器也可以作为被控器,既可以是发送器也可以是接收器。
总线按照一定的通信协议进行数据交换。
在每次数据交换开始,作为主控器的器件需要通过总线竞争获得主控权,并启动一次数据交换。
系统中各个器件都具有唯一的地址,各器件之间通过寻址确定数据接收方。
I2C总线的系统结构一个典型的I2C总线标准的IC器件,其内部不仅有I2C接口电路,还可将内部各单元电路划分成若干相对独立的模块,它只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
基于51单片机的CAN总线系统设计0 引言随着20世纪80年代初期德国Bosch公司提出CAN(Controller Area Network)总线,即控制器局域网方案以解决汽车控制装置问的通信问题。
经过20多年的发展,CAN总线现在广泛的应用在汽车领域,在汽车控制系统中应用CAN总线可以使硬件方案的软件化实现,大大地简化了设计,减小了硬件成本和设计生产成本,数据共享减少了数据的重复处理,节省了成本,可以将信号线减到最少,减少布线,使成本进一步降低等优点。
由于CAN总线通信的高性能、高可靠性、及独特的设计和适宜的价格可以广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,所以被公认为是几种最有前途的现场总线之一。
1 系统总体设计CAN总线系统总体结构如图1所示,主要包括上位机控制软件、USB-CAN转换模块、CAN节点、CAN总线介质(本处采用双绞线)组成。
其中一个CAN节点通过USB接口与PC 机相连,上位机控制软件能实时显示各CAN节点的数据且能通过上位机软件向各个CAN 节点发送数据以控制各节点的8个发光二极管的亮或灭。
2 系统硬件电路本系统由单片机外围电路、CAN总线硬件电路和USB-CAN转换电路组成。
单片机外围电路包括电源电路模块、复位电路模块、串口通信模块。
CAN总线硬件电路包括电气隔离模块、光耦隔离模块、CAN驱动器电路。
USB-CAN转换电路包括CH375与单片机接口电路模块和USB接口电路模块。
C8051F040单片机内部的控制器局域网(CAN)控制器是一个协议控制器,不提供物理层驱动器(即收发器),需要外部重新接入物理层驱动器。
本处采用TJ1050,TJA1050是控制器区域网络(CAN)协议控制器和物理总线之间的接口,是一种标准的高速CAN收发器。
TJA1050可以为总线提供差动发送性能,为CAN控制器提供差动接收性能。
TJA1050是PCA82C250和PCA82C251高速CAN收发器的后继产品。
1 问题的提出在应用系统中,RS-485半双工异步通信总线是被各个研发机构广泛使用的数据通信总线,它往往应用在集中控制枢纽与分散控制单元之间。
系统简图如图1所示。
图1. RS-485系统示意图由于实际应用系统中,往往分散控制单元数量较多,分布较远,现场存在各种干扰,所以通信的可靠性不高,再加上软硬件设计的不完善,使得实际工程应用中如何保障RS-485总线的通信的可靠性成为各研发机构的一块心病。
在使用RS-485总线时,如果简单地按常规方式设计电路,在实际工程中可能有以下两个问题出现。
一是通信数据收发的可靠性问题;二是在多机通信方式下,一个节点的故障(如死机),往往会使得整个系统的通信框架崩溃,而且给故障的排查带来困难。
针对上述问题,我们对485总线的软硬件采取了具体的改进措施2 硬件电路的设计现以8031单片机自带的异步通信口,外接75176芯片转换成485总线为例。
其中为了实现总线与单片机系统的隔离,在8031的异步通信口与75176之间采用光耦隔离。
电路原理图如图2所示。
图2 改进后的485通信口原理图充分考虑现场的复杂环境,在电路设计中注意了以下三个问题。
2.1 SN75176 485芯片DE控制端的设计由于应用系统中,主机与分机相隔较远,通信线路的总长度往往超过400米,而分机系统上电或复位又常常不在同一个时刻完成。
如果在此时某个75176的DE端电位为“1”,那么它的485总线输出将会处于发送状态,也就是占用了通信总线,这样其它的分机就无法与主机进行通信。
这种情况尤其表现在某个分机出现异常情况下(死机),会使整个系统通信崩溃。
因此在电路设计时,应保证系统上电复位时75176的DE端电位为“0”。
由于8031在复位期间,I/O口输出高电平,故图2电路的接法有效地解决复位期间分机“咬”总线的问题。
2.2 隔离光耦电路的参数选取在应用系统中,由于要对现场情况进行实时监控及响应,通信数据的波特率往往做得较高(通常都在4800波特以上)。
简单51单⽚机开发板的电路设计⼀、摘要本⽂给出了⼀个简单51单⽚机开发板的电路设计,完成了其原理图的绘制和PCB图的制作。
着重介绍使⽤protel99SE画出的电路设计原理图,接着是对电路各个模块功能的分析,然后是电路所⽤主要芯⽚和其他重要元件的功能介绍以及内部封装和引脚分布,最后介绍⽤protel99SE画出的PCB板。
此开发板具有串⼝通信、液晶显⽰、流⽔灯、扩展、RTC时钟、复位、外部中断、外部存储、A/D D/A转换、报警、继电器控制等开发功能。
关键字:51单⽚机开发板protel99 PCB⼆、实验所⽤元器件及其介绍2.1、清单2.2 主要芯⽚引脚图和实物图2.21 STC89C52图2.21(1) STC89C52引脚图图2.21(2) STC89C52实物图2.22 8255图2.22 8255引脚图2.23 DS1302图2.23(1) DS1302引脚图2.24 24C08图2.24(1) 24C08引脚图表2.24 24C08功能表图2.24(2) 24C08 实物图2.25 MAX232图2.25(1)MAX232引脚图表2.25 各引脚功能及推荐⼯作条件图2.25(2) MAX232 实物图2.26 ADC0809图2.26(1) ADC0809 引脚图图2.26(2)ADC0809实物图2.27 DAC0832图2.27(1)DAC0832引脚图图2.27(2)DAC0832实物图2.3 其他元件和重要电容2.31 USB接⼝图2.31(1)USB封装尺⼨图2.31(2)USB外观图图2.31(3)USB接⼝定义2.32 HRS4-S-DC5V继电器图2.32(1) HRS4-S-DC5V继电器封装尺⼨图2.32(2)HRS2-S-DC5V继电器外观2.33 ⾃锁开关(⽤于原理图中的单⼑双掷和单⼑单掷开关)图2.33 六脚⾃锁开关三、电路设计分析与结果3.1 开发板设计简介3.1.1主芯⽚简介STC89C52是STC公司⽣产的⼀种低功耗、⾼性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。
单片机总线接口电路的设计Yibin UniversityEDA技术及应用期末设计报告题目: 单片机总线接口电路的设计专业: 电子信息科学与技术2013 年 12月 19 日摘要:单片机具有性价比高,功能灵活,易于人机交换和良好的数据处理能力等特点;FPGA具有高速,高可靠以及开发方便快捷规范等特点,以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中被广泛运用。
在目前的单片机与FPGA的接口电路实际设计中,重要的角色之一就是并串转换电路,并且在很多其它设计中是必不可少的,尤其是在数据量庞大的设计中,如果前级电路和后级电路直接通过并行传输数据,那么数据有多少位就得有多少根通信线,这必将导致通信的准确度的降低和通信成本的增加,当距离较长时这种方式更是不可采用的。
这次设计是基于FPGA设计的51单片机与外围电路通信的并串转换电路,该转换电路在接到51单片发出的访问外部RAM 的时序时,自动接受并行数据,接受完毕后自动串行发送数据,并且产生输出时钟,提供给后级电路使用。
该电路可以完成51单片机与串口外围电路的通信,扩展了51单片机的I/O端口,使得单片机可以带更多的负载。
关键字:(1)并串转换(2)FPGA(3)VHDL(4)状态机(5)单片机目录摘要------------------------------------------------------------------------2关键字---------------------------------------------------------------------2设计概述------------------------------------------------------------------4总的系统框图------------------------------------------------------------4设计思路------------------------------------------------------------------5方案论证------------------------------------------------------------------5设计程序------------------------------------------------------------------6设计仿真图--------------------------------------------------------------16仿真分析-----------------------------------------------------------------17参考文献------------------------------------------------------------------17设计概述:本次设计用FPGA设计一个并串转换电路,完成的功能是让51单片机可以和串行外设通信,51单片机可以用访问外部RAM 的时序去访问该接口电路。
单片机总线设计法全攻略1、目前广大工程师在设计单片机系统时的两种方案之我见针对51单片机,工程师们在设计系统时,从宏观上讲无非就是两种方案:总线式设计方案和非总线式设计方案。
所谓总线式设计方案就是利用51单片机的读写外部RAM功能,将要设计的外部设备(比如说键盘、液晶等)统统挂到单片机总线上,使其统一按类似读写外部RAM功能的指令方法进行操作;而所谓非总线式设计方案,则是不利用单片机的读写外部RAM功能,而直接利用I/O 口读写方式进行外部设备的读写,比如说LED灯、液晶等,因为液晶有两种读写方式,总线方式和模拟I/O方式(贵刊也有文章介绍过),而这里读写液晶的模拟I/O方式就是这里我要说的非总线式设计方案。
那么这两种方案到底哪一种好呢?说这句话可能有点外行,我自己也这样认为,但是为了更好的让初学者了解其中的道理,我还是班门弄斧简单阐述一下:首先要说明,我的这种阐述是建立在有读写外部RAM功能的单片机的基础之上的。
我个人认为,两种方案各有利弊:对于总线式设计方案来说,优点就是能够充分发挥单片机的总线读写功能,系统一旦设计完成,易于日后的升级和扩展。
缺点是灵活性差,硬件连接比较固定;同时由于单片机读写总线时必定要产生一定的总线时间延迟,这样对于低速的单片机来说,如果设计的系统非常庞大的话,那就需要设计人员考虑一下实时性要求了,但是根据我个人多年来的开发经验来说,只要设计得当,一般问题不大,但还是将此问题摆出来,让大家商榷。
对于非总线式设计方案来说,最大的优点就是灵活性强,这种方案可以根据设计者的爱好自由选择单片机端口进行外围设备的设计(当然是要在符合设计原则的前提下),缺点是升级需要重新设计电路图。
2、总线法设计单片机系统的原理和方法2.1 总线法设计原理简介总线式设计方案对于很多的初学者来说是比较困难的,因为对于这种方法来说,牵扯到单片机和外围设备时序逻辑的分配、地址空间的分配、总线驱动能力等等的问题,一旦设计不好,系统便无法启动,或者说部分模块无法工作。
确实,总线式设计方案存在一定的难度,我想这大概也就是很多初学者甚至包括很多单片机设计工程师们也更趋向于利用非总线式设计方案来进行单片机系统设计的原因吧(仅为个人观点,如有不对,还望切磋)。
所以在这一节接下来的内容中我将会带领大家踏入单片机总线式设计方案的大门,让你领略一下在这块设计领域的无限精彩。
首先我们先来看看51单片机读写外部RAM的时序图,如图1、2所示:图1为51单片机读外部RAM的时序图。
图1 51单片机读外部RAM的时序图注意在这里我们只需要关心ALE、RD、PORT0、PORT2四个信号的时序,而不必关心PSEN信号,因为这个信号是用来控制读写外部程序存储器的,跟我们的讨论不相关,有兴趣的可以自行研究,下同。
下面我就跟大家一起讨论一下这四路信号是如何共同使用的。
有过设计经验的人都很清楚,ALE信号就是我们常说的地址锁存信号,那么它为什么要锁信号呢?锁谁的信号呢?又是如何锁的呢?第一、二个问题很简单,因为51单片机的P0口是地址/数据复用的8位端口,在读写外部RAM时,P0口上会顺序接连出现你要读写的地址信号和读到或要写的数据,如果当地址信号出现时不将此8位地址锁住,那么它将会迅速消失,便无法利用此地址进行外部存储器的地址选择;而针对第三个问题,信号时如何锁的,稍微有点麻烦,因为灵活性很大。
大家请仔细看图1的ALE 和PORT0两个信号,LHLL t ——ALE 的有效脉冲宽度AVLL t +——为P0口地址信号的有效时间长度LLAX t 我们先暂且研究一下这两个信号便可解答上面的问题,注意到P0口地址的有效时间长度为+两个时间长度的和,那么我们到底在哪个时间段来锁存地址信号呢?通过时序图我们可以发现,显然必须在ALE 的有效脉冲宽度内来截取这个P0口的地址信号,那么有人会问多出这个时间段干什么用,在这个时间段内P0口其实也在继续保持有效的低8位地址,请继续往下看便可理解。
好了,既然这样,我们要锁存此时的P0口地址信号很显然就要在ALE 的有效脉冲宽度内来动手脚了,大家一看,哈,这简单,这要在ALE 信号为高电平的时候,直接利用373芯片获取P0口地址信号不就完了嘛!不错,是的,目前大家都是这么做的。
那么我现在问你,方法唯一吗?我这么一提醒,大家可能又会想,奥,对了,在ALE 信号的两个边沿也可以啊!那么你又错了,我说还有一个方法就是在ALE 信号的下降沿可以,上升沿是不行的啊!为什么啊?你看看图1的时序,P0口地址的有效起始时间的左边沿在ALE 信号的有效脉冲上升沿后面呢,这显然不行吧!当然我们经常用的方法还是利用74ls373这类高电平传输的芯片。
这里告诉了大家两种方法,只是想提醒大家有时候方法是非常灵活的,后面我会就这两种锁存地址的方法分别以实例的形式体现在大家面前。
AVLL t LLAX t LLAX t AVLL t 好了,地址我们锁存完了,既然P0口是地址和数据复用端口,那我们再来研究一下后面的数据又是怎么传输的。
为了更好的让大家同时了解外部存储器的读和写的原理,这部分我打算结合图2介绍一下数据的写入。
图2为51单片机写外部RAM 的时序图。
图2 51单片机写外部RAM 的时序图同样在这里我们只需要关心ALE 、WR 、PORT0、PORT2四个信号的时序。
请看下面几个时间量:LLWL t ——ALE 信号跳为低到WR 信号开始变低的时间段WLWH t ——WR 信号有效宽度QVWX t ——P0口数据有效开始到WR 信号开始有效WHQX t ——WR 信号有效结束到P0口数据有效结束通过上面我们可以看出,也就是说在ALE 信号跳为低电平以后,延迟这么长的时间后,LLWL t WR 低电平信号会紧跟着出现,注意这个信号是单片机自动产生的,很多读者总是以为要设置什么寄存器之类的东西,容易出现迷惑,只要我们在程序里一调用MOVX 或者在C 语言里读写XDATA (外部)的地址,WR 或者RD 便会自动出现了。
于是乎这时候我们便可以写入我们需要传输的数据了。
问题由来了,我们在什么时候把数据写入到外部RAM 或者说外部设备呢?这里请大家注意,我们发现P0口数据有效的总时间段为++,显然要长于WLWH t QVWX t WHQX t WR 信号有效宽度,并且将其包含在之内,所以在这里,根据这个时序原理,我们可以利用WLWH t WR 的下降沿时刻、低电平阶段或是上升沿时刻进行数据的写入,但是我们最常用的是在WR的低电平时期和WR上升沿时刻将有效数据写入,而利用WR的低电平时期写入数据又是最为普遍,因为好多公司生产的带外部总线读写功能的芯片都是要求在WR的低电平时期写数据,跟上面一样,我们在这里讨论这个,主要是给大家提供一种思路,在自己进行地址分配或时序逻辑设计时也许用得上。
在下面的实例中,这两种方法我都会做介绍,请大家仔细体会。
2.2 两种地址锁存法介绍上面我已经提到,在进行地址锁存时有两种锁存方案:高电平地址锁存法和下降沿地址锁存法,注意我这里所说的这两种方法名称是针对单片机的ALE端信号而言。
下面我将结合具体的电路给大家做一下详细介绍(为节省画图空间,考虑到单片机复位电路和晶振电路不是本文所讨论的话题,故省略):2.2.1 高电平地址锁存法本小节介绍的高电平地址锁存法是单片机开发工程师使用最为广泛的一种方法。
在这种方法中选用373或者573芯片,以573为例,其真值表如表1所示:表1 74HC573真值表OE LE D QL H H H L H L L L L X Q0H X X Z由上述真值表我们不难看出,这个片子的特点是:在输出控制端OE有效(低电平)的前提下,当锁存端LE为高电平时,输出端Q随着输入端D变化,而当LE为低电平时,输出端Q保持上一次的输入端数据,这样的逻辑正好符合我们在第一节分析的有关单片机ALE端信号的变化情况,即ALE端为高电平时,单片机P0口的低8位地址信号输出到573的输入端,而输出端跟随变化,一旦ALE变为低电平,573便不再跟随单片机的P0口地址,因为这时候(应该是过一会)P0 口马上就要输出8位“数据”了,这样便完成了单片机低8位地址的锁存。
图3 高电平地址锁存法2.2.2 下降沿地址锁存法本小节给大家介绍另一种方法——下降沿地址锁存法。
这种方法在我们的实际设计中并不是很常见,但是我仍然给大家做一个简单的介绍,目的是让大家开拓思路,了解问题的实质。
在这种方法中选用374或者574芯片,以374为例,其真值表如表1所示:表2 74HC374真值表OE CLK D QL ↑H H L ↑L L L L X Q0H X X Z由上述真值表我们不难看出,这个片子的特点是:在输出控制端OE有效(低电平)的前提下,当锁存端LE输入上升沿信号时,输入端D的信号才能送到输出端Q,而当LE为非上升沿时,输出端Q保持上一次的输入端数据,这样的逻辑正好符合我们在第一节分析的有关单片机ALE端信号的变化情况,即ALE端为高电平时,单片机P0口的低8位地址信号输出到374的输入端,但是输出端不跟随输入端变化,一旦ALE信号变为低电平,这样便瞬间产生了一个下降沿,但是374需要的是一个上升沿信号才能将数据从输入端打进输出端,为此,必须在ALE与CLK端进行一下反相。
这样在单片机这次整个的读写数据的过程中,374的输出端,也就是锁存的单片机的低8位地址就不再变化了,因为,ALE端信号在一次读写过程中是始终保持低电平的,不会再次产生下降沿,也就不会再次更新374的输出端。
这样也同样完成了单片机低8位地址的锁存。
图4 下降沿地址锁存法3、总线法设计单片机模块全突破通过上面第二节我们知道单片机总线低8位地址有两种锁存方法。
在这一节里,我将就总线设计法中经常用到的一些单片机外围模块的设计思路或者方法详细的介绍给大家,希望大家看完后能从中有所体会。
首先我先把下面各个模块中用到的138地址译码电路摆出来:图5 地址译码电路地址分配:CS_LED: 0X8000~0X8FFF; LED指示灯片选地址CS_SHUMA: 0X9000~0X9FFF;数码管片选地址CS_A/D: 0XA000~0XAFFF;A/D转换器片选地址CS_D/A: 0XB000~0XBFFF;D/A转换器片选地址CS_LCD: 0XC000~0XCFFF;液晶片选地址CS_KEY_RD: 0XD000~0XDFFF;读键盘片选地址CS_KEY_WR: 0XE000~0XEFFF;写键盘片选地址地址分配解析:首先咱们先来看看LED指示灯的地址控制端CS_LED为什么是0X8000~0X8FFF,74HC138首先要工作,必须将它的片选输入(E1、E2、E3)端置为有效,根据我们的硬件连接,E1、E2已经接地,这时我们只需要将E3置为高电平即可随时启动该74HC138芯片,又由于我们把单片机的最高位地址线A15接在了E3上,所以,我们所有外设的片选地址都必须让A15位置为高电平“1”,这样,74HC138片选输出就完全取决于C(A14)、B(A13)、A(A12)三个控制端了,显然要让LED指示灯的地址控制端CS_LED有效,也就是让74HC138的Y0输出端有效(为“0”),只需要C(A14)=“0”、B(A13)=“0”、A(A12)=“0”即可,也就是说只要让单片机地址总线的高四位为“1000”,而其他12根低地址线可以任意取“0”和“1”,所以到此我们便推算出了LED 指示灯的片选地址是0X8000~0X8FFF。