版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章
单片机并行扩展技术主要讲述编址方法,以及ROM、RAM、I/O扩展的硬件电路,并在键盘和显示的内容上给出实际编程案例。单片机的最小系统7.1总线扩展及编址方法7.2存储器的扩展7.3并行I/O的扩展7.4第7章
单片机并行扩展技术7.1单片机的最小系统最小应用系统:维持单片机运行的最简单配置的系统。7.1.180C51/89C51最小应用系统7.1.28031最小应用系统7.2总线扩展及编址方法7.2.1单片机的外总线结构1.地址总线宽度为16位,寻址范围216=64KB高8位地址由P2口提供,低8位地址由P0口提供P0口为数据/地址分时复用,ALE的下降沿将P0口输出的地址锁存入锁存器中。2.数据总线由P0口提供,其宽度为8位。3.控制总线EA:内部和外部程序存储器的选择控制信号,电平高低由用户决定;EA=0:只访问外部程序存储器;EA=1:地址低于1000H时,访问内部ROM,否则,访问外部ROM。ALE:地址锁存允许信号;PSEN:外部程序存储器读信号,访问外部程序存储器时自动产生。WR:外部数据存储器写信号,执行MOVX指令时自动产生。RD:外部数据存储器读信号,执行MOVX指令时自动产生。7.2.1单片机的外总线结构
片外可扩展的程序存储器最大容量为64KB,范围0000H~FFFFH。片外可扩展的数据存储器最大容量为64KB,范围0000H~FFFFH。为了配置外围设备而需要扩展的I/O口与片外数据存储器统一编址,不再另外提供地址线。
7.2.2单片机的扩展能力7.2.3地址译码方法CPU发出的地址信号必须实现两种选择:首先对存储器芯片的选择,使相关芯片的片选端CS为有效,这称为片选。然后在选中的芯片内部再选择某一存储单元,这称为字选。连接方法:存储器芯片的地址线和单片机的地址总线中的若干条低位地址线对应相连,其余的地址线(通常是P2口的高位地址)通过地址译码来产生外部存储器芯片的片选信号。1.线选法:将多余的高位地址线中单独的一根直接接到存储器芯片使能端上。7.2.3地址译码方法地址P2.7A15P2.6A14P2.5A13P2.4A12P2.3A11P2.2A10P2.1A9P2.0A8P0.7A7P0.6A6P0.5A5P0.4A4P0.3A3P0.2A2P0.1A1P0.0A02764(1)××110001010101010101010101010101首址末址2764(2)××001101010101010101010101010101首址末址6264(1)11110001010101010101010101010101首址末址6264(2)11001101010101010101010101010101首址末址8255001111××××××××××××××××××××××0101首址末址编址方法对存储空间的使用是断续的,不能充分有效地利用存储空间,且扩充存储容量受限。7.2.3地址译码方法2.译码法:使用译码器对系统的高位地址进行译码,译码输出作为存储芯片的片选信号。(1)全译码法——地址译码器使用了全部高位地址线,地址与存储单元一一对应。(2)部分译码法——地址译码器仅对余下高位地址线的一部分进行译码,地址重叠。图7-4全译码法应用实例7.2.3地址译码方法图7-4所示是全译码法的一个简单应用实例,图中各芯片的地址范围如下:2764(1):0000000000000000B~0001111111111111B,0000H~1FFFH。2764(2):0010000000000000B~0011111111111111B,2000H~3FFFH。6264(1):0000000000000000B~0001111111111111B,0000H~1FFFH。6264(2):0010000000000000B~0011111111111111B,2000H~3FFFH。8255:010×××××××××××00B~010×××××××××××11B,
即:
4000H~4003H,
……,
5FFCH~5FFFH等。
7.2.3地址译码方法7.3存储器的扩展7.3.1EPROM程序存储器的扩展1.EPROM芯片简介-紫外线擦除可编程只读存储器A0~Ai:地址线(不同容量芯片的地址线数目不同);O0~O7:8位输出数据线;CE:片选端;OE:输出允许;Vpp:编程电压;PGM:编程脉冲输入。7.3.1EPROM程序存储器的扩展2.EPROM基本扩展法7.3.1EPROM程序存储器的扩展【例7-1】用两片2764EPROM芯片为803l单片机扩展16KB的程序存储器,试画出线路连接图。将2片2764芯片低8位地址线A0~A7都通过地址锁存器与8031的P0口的P0.0~P0.7相连,高5位地址线A8~A12直接和P2口的P2.0~P2.4相连(片内寻址)。2片2764的数据线D0~D7都直接接到P0口,作为数据总线。PSEN与2片2764的OE端直连剩余高地址线通过线选法或译码产生2片2764的片选信号连接方法:
7.3.1EPROM程序存储器的扩展两个芯片的地址范围如下:①2764(1):××00000000000000B~××01111111111111B②2764(2):××10000000000000B~××11111111111111B部分译码方式和线选法一样同样浪费地址空间,出现地址重叠的情况。7.3.1EPROM程序存储器的扩展3.片外ROM操作时序片外ROM读(产生PSEN信号)片内片外ROM选择,用EA。片外ROM最大容量64K。读外部ROM时序。7.3.1EPROM程序存储器的扩展1.RAM芯片简介A0~A12:13位地址线;D0~D7:8位输出/输入数据线;CE1,CE2:片选端;OE:输出允许;WE:写允许信号;Vcc、Vss:+5V电源和接地端。7.3.3数据存储器及其扩展7.3.3数据存储器及其扩展2.外部数据存储器的扩展方法7.3.3数据存储器及其扩展【例7-2】用三片6264芯片为89C51单片机扩展24KB的外部数据存储器,分别采用线选法、部分译码法和全译码法来实现,并给出各芯片的地址范围,译码芯片不限。7.3.3数据存储器及其扩展连接方法:
将3片6264芯片低8位地址线A0~A7都通过地址锁存器与89C51的P0口的P0.0~P0.7相连,高5位地址线A8~A12直接和P2口的P2.0~P2.4相连(片内寻址)。3片6264的数据线D0~D7都直接接到P0口,作为数据总线。RD与3片6264的OE端相连,WR与3片6264的WE端相连剩余高地址线通过线选法或译码产生3片6264的片选信号线选法:P2.5=0、P2.6=1和P2.7=1时,选中第一个RAM,地址范围为:0C000H~0DFFFHP2.5=1、P2.6=0和P2.7=1时,选中第二个RAM,地址范围为:0A000H~0BFFFHP2.5=1、P2.6=1和P2.7=0时,选中第三个RAM。地址范围为:06000H~07FFFH显然,用线选法会使存储空间不连续,同时不能充分有效地利用存储空间,扩充存储容量受限。7.3.3数据存储器及其扩展部分译码法:用P2.6~P2.7与2-4译码器直连,我们用其中的三个输出信号(假设为Y0、Y1、Y2)与三片存储器的/CE端相连,则:第一个RAM的地址范围为:0000H~1FFFH和2000H~3FFFH第二个RAM的地址范围为:4000H~5FFFH和6000H~7FFFH第三个RAM的地址范围为:8000H~9FFFH和A000H~BFFFH每个芯片占用了16K的地址空间,而每个芯片实际的容量是8K,原因是地址线P2.5没有参与译码,这种部分译码方式也存在地址空间浪费的情况。7.3.3数据存储器及其扩展译码器换成74LS138,则A13(P2.5)也参与了译码,这种全译码(所有剩余高地址线都参与译码)方式不存在地址空间浪费。7.3.3数据存储器及其扩展6264(1):0000000000000000B~0001111111111111B,0000H~1FFFH。6264(2):0010000000000000B~0011111111111111B,2000H~3FFFH。6264(3):0100000000000000B~0101111111111111B,4000H~5FFFH。7.3.3数据存储器及其扩展3.读操作时序【例】若(DPTR)=2030H,片外RAM单元2030H内容为55H,指令MOVXA,@DPTR(该指令代码为E0H)所在片外ROM的地址为2314H。7.3.3数据存储器及其扩展4.写操作时序【例】若(DPTR)=1040H,(A)=88H,指令MOVX@DPTR,A(该指令代码为F0H)所在片外ROM的地址为2218H。7.3.3数据存储器及其扩展思考题:请扩展1片8KB的RAM和1片8KB的EPROM,并分别写出2个芯片的地址空间。7.3.3数据存储器及其扩展7.4并行I/O口的扩展MCS-51系列单片机的外部RAM和I/O口是统一编址的,单片机可以像访问外部RAM存储器那样访问外部接口芯片。7.4.1简单I/O扩展【例7-3】如图所示,编写一段程序,功能是按下任意键,使对应的LED发光。7.4.1简单I/O口扩展分析:74LS244是8路缓冲线驱动器(三态输出),G1、G2为低电平时,信息输入到P0口的数据总线上,G1、G2为高电平时,呈现高阻状态。74LS273是8D触发器,CP下降沿将P0口输出的数据锁存到输出端。#include <reg51.h> //51系列单片机头文件#include <absacc.h> //定义地址需要的头文件#define ucharunsignedchar //宏定义#define addr_ICXBYTE[0x0feff] //定义外部芯片的地址void main() //主函数{uchar temp; //定义一个临时变量while(1){temp=addr_IC;addr_IC=temp;}}参考程序:7.4.2LED数码管显示接口1.LED数码管显示器的结构共阳极:8个发光二极管的阳极全部连接在一起组成公共端,8个发光二极管的阴极则单独引出。共阴极:8个发光二极管的阴极全部连接在一起组成公共端,8个发光二极管的阳极则单独引出。2.LED数码管的驱动方法(1)静态显示法当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。占用硬件多,一般用于显示器位数较小的场合。7.4.2LED显示接口【例7-4】试将字符数组tempchar中的两个单BCD码通过74LS164并行输出并显示到两位LED数码管,如图所示。假设LED数码管是共阳的。7.4.2LED显示接口#include <reg51.h> //51系列单片机头文件#define ucharunsignedchar //宏定义#define uintunsignedint //宏定义sbit MR=P1^0; uchar codeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9对应的字形码uchar tempchar[]={0x06,0x08};void main() //主函数{uinti;SCON=0x00; //串行口方式0初始化MR=1; //选通74LS164for(i=0;i<2;i++){SBUF=seg[tempchar[i]];while(!TI);TI=0;}while(1);}参考程序:7.4.2LED显示接口(2)动态显示法一位一位地轮流点亮各位显示器,对于每一位显示器来说,每隔一段时间点亮一次,调整电流和显示时间间隔,可实现亮度较高较稳定的显示。7.4.2LED显示接口【例7-5】下图为用单片机P2口和P1口构成的动态显示的电路,共有6个共阳极LED数码显示器,P2口为字段口,输出字形码,P2.0~P2.7分别与“a、b、c、d、e、f、g、dp”对应相连,P1口为字位口,输出位码。编写程序,使下图的动态扫描显示电路从左到右显示l、2、3、4、5、6共六个字符,设晶振频率12MHz。7.4.2LED显示接口在第一时刻从P2口输出1的字形码,从P1口输出00100000B,使最左边的LED点亮;延时一段时间后,从P2口输出2的字形码,从P1口输出00010000B,使左边第二个LED点亮;依次循环......最后从P2口输出6的字形码,从P1口输出0000001B,使最右边的LED点亮。再回过头从左边第一个开始。分析#include <reg51.h> #include <intrins.h> #define ucharunsignedchar #define uintunsignedint uchar codeseg[]={0x0f9,0x0a4,0x0b0,0x99,0x92,0x82};
voiddelaynms(uintn){ uinti,j;for(i=0;i<n;i++)for(j=0;j<125;j++);}参考程序1:7.4.2LED显示接口void main() //主函数{uinti;ucharlen,bitOffset;while(1){len=0x06; //程序循环计数器,
6个字符一循环bitOffset=0x20; //位码,首先令
P1.5=1,然后依次移位for(i=0;i<len;i++){P2=seg[i];P1=bitOffset;bitOffset=_cror_(bitOffset,1);//右环移一次delaynms(10);}}}#include <reg51.h> #include <intrins.h> #define ucharunsignedchar #define uintunsignedint uchar codeseg[]={0x0f9,0x0a4,0x0b0,0x99,0x92,0x82};ucharlen,bitOffset;uinti;void main() {TMOD=0x01;TL0=0x3c; //定时2.5ms的初值TH0=0xf6; ET0=1;EA=1;TR0=1;i=0; //字偏移len=0x06; //程序循环计数器,6个字符一循环bitOffset=0x20; //位码,首先令P1.5=1,然后依次移位while(1);}参考程序2(采用定时器中断方法):7.4.2LED显示接口void timer0()interrupt1 {P2=seg[i];i++;P1=bitOffset;bitOffset=_cror_(bitOffset,1);if(i>=6){i=0; len=0x06; bitOffset=0x20; }TL0=0x3c;TH0=0xf6; }7.4.3键盘接口1.非编码键盘的设计必须解决以下问题:(1)判定是否有键按下。(2)若有键按下,判定是哪个键按下,确定被按键的“键值”。(3)除抖动。(4)准确得出按键值(或键号),以满足跳转指令要求。(5)同一按键长时间持续按下。(6)处理同时按键。2.单片机对非编码键盘的控制方式(1)程序查询方式
CPU时刻处于键盘检测状态,不能干别的事情,效率低下,很少用。
(2)定时扫描方式在定时中断中,调用键盘扫描子程序,查询按键状态,此方法常用。(3)中断扫描方式当键盘有键闭合时产生中断请求,CPU响应中断,执行服务程序,判断键号,做相应处理,效率最高。7.4.3键盘接口3.独立式按键接口电路软件结构简单,适用于应用系统中的键较少的场合。【例7-6】根据右图所示的独立式按键电路,编写查询方式的按键扫描函数keyScan,Kn(n=1~4)闭合时,返回n,否则返回0。7.4.3键盘接口//按键扫描函数,返回扫描键值#include <reg51.h> #define ucharunsignedchar
#define uintunsignedint #definekeyPortP3voiddelaynms(uintn){ uinti,j;for(i=0;i<n;i++)
for(j=0;j<125;j++);}参考程序:7.4.3键盘接口ucharkeyScan(){ucharkeyval;if((keyPort&0xf0)!=0xf0){delaynms(10);if((keyPort&0xf0)!=0xf0){keyval=keyPort&0xf0;while((keyPort&0xf0)!=0xf0);switch(keyval){case0xe0:return1;break;case0xd0:return2;break;case0xb0:return3;break;case0x70:return4;break;default:return0;break;}}}return0;}4.矩阵式键盘键盘扫描程序应包括以下内容:检测当前是否有键按下;有键闭合时,消除抖动;依次给每一条行线送出0信号,其余各行线均为1,并相继检测每一次扫描时所对应的列状态。若各列全为1,表示为0的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版民间借贷合同中的知识产权许可与授权2篇
- 肛门直肠脓肿病因介绍
- 《财产保险保险学》课件
- 部编版四年级语文上册第4课《繁星》教学设计
- 六年级上册英语期中测试卷(1)小学英语教学教材课件
- 磨牙症病因介绍
- 物流管理基础课件 情景4子情境1 企业物流
- 甲状旁腺骨营养不良病因介绍
- 牛痘病因介绍
- 牙列稀疏病因介绍
- 小学四年级数学竞赛试卷(含答案)
- 矿产地质堪查服务项目评估分析报告
- 2023年山东高中学业水平合格考信息技术试卷试题(答案详解)
- 医师定期考核医师调离申请表
- 风险分级管控与隐患排查治理双重预防机制建设实施方案
- 数学思想与方法期末考试范围答案全
- 道路客运站服务管理规范课件
- 初中地理情境教学课件
- 政治经济学智慧树知到课后章节答案2023年下宁波大学
- 抗肿瘤药物医嘱评价表
- 博士论文的写作
评论
0/150
提交评论