欢迎来到天天文库
浏览记录
ID:46170265
大小:1.60 MB
页数:33页
时间:2019-11-21
《地址锁存及IO扩展》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机地址锁存及IO扩展I/O端口P0~P3(80H,90H,A0H,B0H)P0—P3为4个8位特殊功能寄存器,分别是4个并行I/O端口的锁存器。它们都有字节地址,端口的每一位可以进行位操作,每一条I/O线均可独立用作输入或输出。用作输出时,可以锁存数据;用作输入时,数据可以缓冲。在单片机接口扩展系统中各端口功能无论有无片外存储器扩展,P1端口均可用作通用I/O端口使用。在单片机接口扩展系统中,P0口用作输出地址/数据总线,此时,P0无法再作I/O口使用了。在单片机接口扩展系统中,P2口只输出高8位地址。P3口可以用
2、作第二功能使用地址总线宽度为16位,可寻址范围64K字节。地址锁存器锁存器在地址扩展中的作用就是锁存地址,地址锁存器74373是带三态缓冲输出的8D锁存器.锁存器锁存原理ALE作为低8位地址锁存选通信号,当为高电平时,复用数据总线上为地址数据。地址锁存器(74373)74373内部逻辑芯片介绍——SRAM62646264是8K*8的静态随机存储器。A0-A12为片内13位地址线,I/O0-I/O7为双向三态数据线,/CE为片选信号,/OE为读允许信号,/WE为写信号。硬件接口电路设计#includex
3、dataunsignedchar*port;xdataunsignedcharBuffer[256]_at_0x6000;main(){unsignedchartmp=0x55;unsignedcharj;port=&Buffer;while(1){for(j=0;j<256;j++){tmp++;*port++=tmp;}}}向连续存储空间写入数据的C51程序简单并行输出接口的扩展在单片机的并行接口扩展中,常采用TTL、CMOS锁存器、缓冲器构成简单的扩展接口。其中,在输出接口的扩展中经常选用具备锁存功能的芯片实现,
4、一般有:74273,74373,74573、74574等。在本节以74273为例,介绍输出接口的扩展实现。74273引脚和功能原理D0—D7为数据输入引脚,Q0—Q7为数据输出引脚,CP为时钟脉冲输入端,/MR为清零端。从内部逻辑图看出,74273为内部集成八路D触发器的锁存器,芯片的CP引脚与八路D触发器的时钟控制端相连,完成数据锁存的控制。简单并行输出接口的扩展访问外设端口的软件设置单片机系统外扩的接口芯片或外扩片外数据存储器统一编址,占用外部数据存储器0000---FFFFH空间,因此,片外扩展I/O口的硬件译码
5、地址,看作片外数据存储单元访问。#include#define变量名XBYTE[地址常数]举例——对片外的1000H单元进行数据的写操作,设计方法如下#include#include#defineportXBYTE[0x1000];voidmain(void){inttemp;While(1){temp=port;}}注意:程序中,#define用于定义将外部1000H端口命名为port,定义端口寄存器的长度为8位。通过上述定义,于是,在程序中出现的Port变量
6、映射为外部寄存器地址单元,访问地址为1000H。程序设计中,对外部1000H地址的读操作就可以直接写作“temp=port”即可,其中,temp为设计的临时变量。应用设计举例应用74273扩展单片机的输出端口,设定74273的端口访问地址为7FFFH,控制在数码块上轮回显示从0—F的16个字符。C51源程序为:#include#include#defineportXBYTE[0x7FFF]unsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0
7、x6d,0x7d,0x07,0x7f,0x6f};//设置数码块显示数据表voiddelay(void){unsignedinti;for(i=0;i<40000;i++);}voidmain(void){unsignedinti;while(1){for(i=0;i<10;i++){port=table[i];//从数码块显示字表读取数据,通过74273输出显示delay();}}}74244设计应用举例应用74273、74244芯片实现简单的并行接口的扩展。电路实现的功能:按键的状态通过74244芯片缓冲读入,通过
8、74273锁存输出,在八个LED发光二极管上显示。程序设计#include#defineport_273XBYTE[0xFEFF]//定义访问的外部端口变量#defineport_244XBYTE[0xFDFF]//定义访问的外部端口变量voiddelay(void){unsignedinti;for(i=0;i
此文档下载收益归作者所有