武汉理工大学《微机原理与接口技术》课程设计说明书
4.3 地址译码电路
译码为编码的逆过程。它将编码时赋予代码的含义“翻译”过来。实现译码的逻辑电路成为译码器。译码器输出与输入代码有唯一的对应关系。74LS154是输出低电平有效的4线-16线译码器。它在这里与锁存电路相连,主要用于实现提供端口地址的作用。
ADR[0..19]A9A10A11A1223222120U5ABCDE1E2012345678910111213141512345678910111314151617IO0IO1IO2IO3IO4IO5IO6IO7IO8IO9IO10IO11IO12IO13IO14IO15U3M/IO1819NOTU2:AA131A142A151374277415412 图3-2 地址译码电路
4.4 显示电路
本设计的显示电路主要由四个数码管,以及12个led灯组成。其中红灯,绿灯,黄灯各有四个,在每个方向的路口各有一个,数码管也是如此。且该显示电路有明显的对称性,任意时刻正对的两个方向必定只亮一种颜色的灯,且数码管示数同步,所以灯和数码管都分成了两组。
1#PC1PC2PA0PA1PA2PA3PA4PA5PA6PA7PC0 图3-3 显示电路
5
武汉理工大学《微机原理与接口技术》课程设计说明书
4.5 输入电路
U1221222418313023173319RESETAD[0..15]READYA[16..19]INTA/QS1INTRALE/QS0HOLD/GT1BHEHLDA/GT0DT/R/S1TESTDEN/S2NMIRDMN/MXWR/LOCKCLKM/IO/S08086R2R1停止10k10k2322322启动 图3-4 启动与停止按钮
NMI(不可屏蔽中断)是02号中断,上跳沿触发,所以要上拉电阻。按下“停止”按钮后上升沿触发中断,中断服务程序可以让PC口全部置零,PA、PB全部置“1”,这样灯和数码管就全部熄灭了。
在READY信号为低电平时8086不工作,所以可以利用READY下拉电阻接地,经“启动”按钮接到电源正极。当按下“启动”按钮时8086就会正常工作。
4.6 总体电路图
出于美观性考虑,电路图采用分等级设计,所有的控制部分集合成了一个子模块,使内外接点的名称相同便可实现电气连接。父电路图如图3-5所示,子电路图如图3-6所示。
6
武汉理工大学《微机原理与接口技术》课程设计说明书
PC0PC1PC2PC3PC4PC5PC6PC7PC0PC1PC2PC3PC4PC5PC6PC7PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB71#南北停止启动NMIPC1PC2READYPA0PA1PA2PA3PA4PA5PA6CCT001PC3PA7SUB1PC0PC5PB0PB1PB2PB3PB4PB5PB6PB7东西PC4东西PB7PB6PB5PB4PB3PB2PB1PB0PC4PC5PC31#PC1PC2PA0PA1PA2PA3PA4PA5PA6PA7南北PC0 图3-5 总体电路图
AD[0..15]AD0AD1AD2AD3AD4AD5AD6AD7347813141718111U6D0D1D2D3D4D5D6D7CLKMR74273AD[16..19]25342726322928A131A142A1513Q0Q1Q2Q3Q4Q5Q6Q7256912151619A8A9A10A11A12A13A14A15Q0Q1Q2Q3Q4Q5Q6Q7256912151619A0A1A2A3A4A5A6A7A9A10A11A12ADR[0..19]23222120U5ABCDE1E2012345678910111213141512345678910111314151617IO0IO1IO2IO3IO4IO5IO6IO7IO8IO9IO10IO11IO12IO13IO14IO15U3M/IO1819NOTU1221222418313023173319RESETAD[0..15]READYA[16..19]INTA/QS1INTRALE/QS0HOLD/GT1BHEHLDA/GT0DT/R/S1TESTDEN/S2NMIRDMN/MXWR/LOCKCLKM/IO/S08086LOAD_SEG=0x0800NET=PC10U2:A12U8AD83AD94AD107AD118AD1213AD1314AD1417AD1518111U7D0D1D2D3D4D5D6D7CLKMR74273R2R110k10kNMIREADY742774154NOTRDWRM/IOU1AD[0..7]AD0AD1AD2AD3AD4AD5AD6AD7343332313029282753698356D0D1D2D3D4D5D6D7RDWRA0A1RESETCSPA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC78255ATRACE=143214039383718192021222324251415161713121110PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC7AD[16..19]U10AD16AD17AD18AD19347813141718111D0D1D2D3D4D5D6D7CLKMR74273Q0Q1Q2Q3Q4Q5Q6Q7256912151619A16A17A18A19BHERDWRA1A2IO1 图3-6 子层电路图
7
武汉理工大学《微机原理与接口技术》课程设计说明书
5. 软件设计
开始 8255初始化 东西方向绿灯亮, 南北方向红灯亮 延时若干秒 东西方向数码管 令CX=9 数码管显示 CX自减 延时1秒 CX=0? 东西方向黄灯亮, 南北方向红灯亮 关掉数码管0.5S 1 4-1
1 东西方向数码管亮 令CX=3 数码管显示 延时0.5秒 关数码管 CX自减 延时0.5秒 CX=0? 东西方向黄灯亮, 南北方向红灯亮 南北方向通行, 情况与上类似 JMP 跳至东西通行处,死循环 交通灯主要模块流程图
8
图
武汉理工大学《微机原理与接口技术》课程设计说明书
5.1 延时函数
本设计中采用的延时函数主要是运用了调用子程序的形式。通过子程序中loop函数的循环来实现延时。延时函数采用给CX和BX 赋值,双层循环得到的,所以在此之前需要将BX和CX中的内容入栈,LOOP完了之后再出栈即可。因为8086工作频率是5MHz,所以执行一步需要2.4us,据此设计CX和BX 的初值。
5.2 中断
本设计的中断采用不可屏蔽中断NMI。即无论状态寄存器中 IF 位的状态如何,CPU收到有效的NMI必须进行响应;NMI是上升沿有效;中断类型号固定为2;它在被响应时无中断响应周期。LED是共阳极的,数码管是共阴极的,所以中断服务程序里面就给PC口赋值00H,PA、PB赋值80H(最高位置1),这样灯数码管就都不会亮了。
5.3 设计电路的正确顺序
设计一个电路时,要一步一步来,这次我们一开始看到题目就觉得特别简单,本来只要
求做灯的我们想都没想直接把数码管倒计时功能加上去就开始做,然后出现很多错误了还不知道在哪个环节,搞到一度快要崩溃了,所以 “万丈高楼平地起”,还是一步一步的从简单到复杂实现比较好。比如说:8086的M/IO一直都是高电平导致与之相连的CS一直都是高,所以后面的8255也不正常,看起来好像所有的都不正常了,这样有可能把正确的部分又改错了。
5.4 锁存
在8086系统中,地址线和数据线是复用的,这些复用的管脚在某时刻只能体现地址线或者数据线之一,所以在对存储器访问时,首先要将地址输出。此时,复用的管脚是地址线,然后利用地址锁存器保存这些地址。之后,这些管脚才是数据线,将数据读出或者写入到存储器。在某一时刻,处理器把某个存储单元的地址发送到地址总线上,经锁存器将这些地址保存起来,只有这样,处理器才能把数据通过某些共享的管脚送到数据总线上,完成对存储器的读/写操作。所以,在8086最小模式系统中,数据缓冲器是不必要的。
9