第3章 CHAPTER 3 主控单元及地址译码电路 本章设计一个具有较完备功能的主控单元,可满足中等规模以上系统的开发需要。本主控单元将作为后续各章节的主控单元,存储器及各I/O接口设计和地址分配在本主控单元地址译码电路基础上进行。 3.1主控单元 1. 原理图 主控单元包括时钟电路、复位电路、外部三总线扩展电路和系统片选地址译码电路,电路原理见图31。设置锁存器U3,便于在程序设计与调试过程中观察数据总线上数据的变化,了解程序运行状况。 图31主控单元原理图 2. 时钟电路 时钟是时序的基础,由片内高增益反相放大器和外部晶振构成振荡器,产生时钟脉冲。 在XTAL1和XTAL2引脚外接晶振,内部反向放大器自激振荡,产生振荡脉冲,见图32。时钟发生器对振荡脉冲二分频,产生双相脉冲信号(P1相+P2相),构成时钟脉冲信号。fosc为1.2~12MHz,电容C1、C2取30pF。 3. 复位电路 系统定义复位引脚RST持续24个振荡周期的高电平为系统复位信号,复位完成后使RST保持低电平。如图33所示为上电复位与按键复位电路。 电源VCC、电阻R7与按键构成按键复位电路。电容C3、电阻R5构成上电复位电路。完成复位后,通过电阻R5接地,RST保持低电平,使系统进入正常的程序运行状态。 4. 后备电源 后备电源电路见图34。利用D1和D2实现常规电源和后备电源切换。主电源正常工作时,D1将后备电源B1隔离。当主电源低电压或故障时,B1通过D1对系统供电。大容量电容C4具有储能作用。 图32时钟电路 图33上电复位与按键复位电路 图34后备电源电路 3.2地址译码 地址译码模块是系统设计的重要环节,需要对应用系统数据存储器的地址空间和I/O接口地址空间进行总体规划和分配,以便于存储器模块和I/O接口模块的设计与扩展。 常用地址译码器包括74HC139、74HC138和74HC154。 3.2.174HC139 1. 74HC139译码器 74HC139为24译码器,引脚见图35。 图3574HC139引脚 引脚说明: ——使能端,低有效。 B、A——2位二进制码输入端。 Y0~Y3——编码信号输出端,低有效。 当使能端有效时,对2位二进制输入码B、A进行译码,相应译码器输出信号Yi有效(=0),其他Yi无效(=1)。 2. 地址译码电路 采用1片74HC139地址译码器,两位二进制代码输入连接系统地址线A15和A14,提供4路片选信号Y0~Y3,将64KB地址空间划分为4个16KB区域,满足小规模系统设计需要,连接电路见图36。 图36地址译码电路(74HC139) =0,芯片常态使能,系统地址总线A15、A14连接译码器的B、A输入端,为系统提供片选信号,地址分配见表31。 表31地址分配表 A15A14A13..A0有效片选Yi端口地址范围 0000..00 11..11Y0 0000H3FFFH 01 00..0011..11 Y1 4000H7FFFH 1000..00 11..11Y2 8000HBFFFH 11 00..0011..11 Y3 C000HFFFFH 3.2.274HC138 1. 74HC138译码器 74HC138为38译码器,引脚见图37。 图3774HC138逻辑结构 引脚说明: S1、S2、S3——使能端,S1高有效,S2、S3低有效。 A2、A1、A0——3位二进制码输入端。 Y0~Y7——编码信号输出端,低有效。 当使能端有效时,对3位二进制输入码A2、A1、A0进行译码,相应译码信号Yi有效(=0),其他Yi无效(=1)。 2. 地址译码电路 采用1片74HC138地址译码器,3位二进制代码输入连接系统地址线A15、A14和A13,提供8路片选信号Y0~Y7,将64KB地址空间划分为8个8KB地址空间,满足中规模系统设计需要,连接电路见图38。 图38地址译码电路(74HC138) E1/E2/E3=100,芯片常态使能,系统地址总线A15、A14、A13连接译码器的C、B、A输入端,为系统提供片选信号,地址分配见表32。 表32地址分配表 A15A14A13A12..A0有效片选Yi端口地址范围 000 00..0011..11Y0 0000H1FFFH 001 00..0011..11 Y1 2000H3FFFH 010 00..0011..11 Y2 4000H5FFFH 011 00..0011..11 Y3 6000H7FFFH 100 00..0011..11 Y4 8000H9FFFH 101 00..0011..11 Y5 A000HBFFFH 续表 A15A14A13A12..A0有效片选Yi端口地址范围 110 00..0011..11 Y6 C000HDFFFH 111 00..0011..11 Y7 E000HFFFFH 3.2.374HC154 1. 74HC154 74HC154为416译码器,引脚见图39。 图3974HC154引脚 引脚说明: G1/G2——使能端,低有效。 DCBA——4位二进制码输入。 Y0~Y15——译码信号输出。 2. 地址译码电路 地址译码电路(见图310)采用1片74HC154,系统地址总线A15、A14、A13、A12连接译码器的D、C、B、A输入端,产生16路片选信号Y0~Y15,将64KB地址空间划分为16个4KB地址空间,为系统提供片选信号,地址分配如表33。 图310地址译码电路(74HC154) 本书后续章节选择该地址译码方案,将RAM地址和后续各章所设计的I/O接口地址统一安排,见表33。 表33地址分配表 A15A14A13A12A11..A0片选Yi端口地址范围备注 0000 00..0011..11Y0 0000H0FFFH 4.2节: RAM,2KB 续表 A15A14A13A12A11..A0片选Yi端口地址范围备注 0001 00..0011..11 Y1 1000H1FFFH 5.1.2节: 8255A扩展I/O 0010 00..0011..11 Y2 2000H2FFFH 6.2节: 74HC244中断扩展 0011 00..0011..11 Y3 3000H3FFFH 14.1节: LCD1602 0100 00..0011..11 Y4 4000H4FFFH 0101 00..0011..11 Y5 5000H5FFFH 0110 00..0011..11 Y6 6000H6FFFH 0111 00..0011..11 Y7 7000H7FFFH 7.2.2节: CD4052通信端口 1000 00..0011..11 Y8 8000H8FFFH 7.2.3节: CD4051通信端口 1001 00..0011..11 Y9 9000H9FFFH 10.3节: 8253看门狗 1010 00..0011..11Y10 A000H AFFFH11.2节: ADC0809 1011 00..0011..11 Y11 B000HBFFFH 1100 00..0011..11 Y12 C000HCFFFH 1101 00..0011..11 Y13 D000HDFFFH 1110 00..0011..11 Y14 E000HEFFFH 1111 00..0011..11 Y15 F000HFFFFH 3.3Proteus仿真 1. 仿真原理图 主控单元仿真连接如图311所示。 系统对外部程序存储器、外部数据存储器和片外I/O接口访问时,选择不同的地址范围,可从连接在译码器输出端的LED指示灯读出当前有效Yi,从连接在数据总线上的LED指示,读出当前数据总线上8位数据值,便于系统调试。 图311主控单元仿真电路 2. 参考程序 #include "reg51.h" #include<absacc.h> #define DE154Y0 XBYTE[0x0000] void vDelay(unsigned int uiT ) { while(uiT--) ; } void main() { unsigned char i; unsigned char *ucAdd; ucAdd=&DE154Y0; while(1) { for(i=0;i<16;i++) { *ucAdd=0x55;vDelay(10000); *ucAdd=0xaa;vDelay(10000); ucAdd=ucAdd+0x1000; } } }