微型计算机技术及应用课程设计课程题目:跑马灯的设计与实现院系:专业:姓名:学号:指导老师:完成日期:跑马灯的设计与实现一实验目的1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件;2.深入了解与掌握8086微处理器、8255A、74ls154 和74LS273的工作原理3.通过走马灯的设计与制作,深入了解与掌握利用可编程8255A进行开关量控制的原理与方法。
二实验要求1.产生6种彩灯(8位LED)的走马灯花样;2.键控(或拨码开关控制)发光实验。
通过按下不同的开关来控制灯的不同的走向。
三实验内容1.进行走马灯的系统电路设计,掌握基本原理;2.利用PROTEUS软件画出电路原理图;3.进行走马灯的控制程序设计(采用ASM语言);4.将程序导入8086中进行仿真,完成4种不同的走向。
四程序流程图YN五.设计原理与硬件电路 开始 系统初始化 8255初始化 按下开关 判断1-6的哪种 方式选择发光方式 结束 熄灭LED 灯1.功能分析此次课程设计具体功能为:(1)采用不同的开关作为输入信号,8个LED灯作为输出信号。
(2)当按下不同的开关时(每次只能按下一个开关,不能同时按下多个开关)LED灯会出现不同的闪烁方式。
当开关段开始,LED灯自动熄灭。
2.实验原理(系统连接图的设计)8255A是一种通过可编程并行I/O接口芯片。
广泛用于几乎所有系列的微机系统中,8255A具有三个带锁存或缓冲的数据端口,可与外设并行进行数据交换,8255A有多种操作方式,通用性较强,可为CPU与外设之间提供输入/输出通道。
8255A和各端口内具有中断控制逻辑,在外设与CPU之间可用中断方式进行信息交换,使用条件传输方式时可用“联络”线进行控制。
在实验中,我们运用8255为CPU与外设之间提供输入输出输出通道来实现对走马灯花样变换的控制。
8086微处理器,选择最小工作模式,所有的总线控制信号均由8086产生;8086CPU的地址\数据总线AD15-AD0和地址\状态总线A16/S3-A19/S6是复用的,必须通过地址锁存器把地址总线和数据总线分离。
走马灯模拟电路原理如图1所示。
模块包括8个LED彩灯、三个74LS273、一个74LS154和若干电阻及开关。
用LED可以观测在不同按键输入下,走马灯花样的变化效果。
如图1所示我们利用软件输入信号,通过8255端口扩展芯片和74LS273芯片,调节输出端口的电平变化,来控制共阴极的LED灯的亮与灭,实现走马灯花样变化。
图一接线说明:8255A共有三个8位端口,A口、B口和C口。
在本电路中,B口8个输出管脚PB7-PB0分别接8个并联的LED彩灯反馈跑马灯的发光方式;A口8个管脚PA7-PA0分别接8个并联的开关控制选择走马灯的发光方式。
3个74LS273的D0-D7接输入端,是信号的输入。
74LS154是4线-16线的译码器,具有选片作用,ABCD四个端口是输出端口,分别接到74LS273的输入端,E1和E2是低电平有效。
2>锁存控制电路锁存控制电路电路如图2所示,在微控制器单元(MCU)中,寄存器是十分重要的资源。
寄存器的主要作用是快速寄存算术逻辑运算单元(ALU)运算过程中的数据,其锁存功能利用74LS273来实现,74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。
第一脚WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0(低电平);CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变。
CPU向外部发出地址锁存允许信号,从而使74LS273锁存地址信号,在通过译码芯片74LS154控制接口芯片8255A,在此系统中充当一个桥梁的作用。
这部分电路将相应信号传送给8255A的A0、A1和CS片选,进而CPU开始控制8255A从而驱动发光二极管显示不同的样式。
如下图为仿真图中的锁存部分3)可编程并行通信接口芯片8255A8255A 的芯片引脚图如上图所示8255共有40个引脚,采用双列直插式封装,各引脚功能如下:D0--D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:片选信号线,低电平有效,表示芯片被选中。
RD:读出信号线,低电平有效,控制数据的读出。
WR:写入信号线,低电平有效,控制数据的写入。
PA0--PA7:A口输入/输出线。
PB0--PB7:B口输入/输出线。
PC0--PC7:C口输入/输出线。
RESET:复位信号线。
A1、A0:地址线,用来选择8255内部端口。
GND:地线。
8255内部包括三个并行数据输入/输出端口,两个工作方式控制电路,一个读/写控制逻辑电路和8位总线缓冲器。
各部分功能概括如下:(1)端口A、B、CA口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。
B口:是一个8位数据输入/输出锁存器/缓冲器和一个8位数据输入锁存器。
C口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入缓冲器(输入不锁存)。
(2)工作方式控制电路工作方式控制电路有两个,一个是A组控制电路,另一个是B组控制电路。
A组控制电路用来控制A口和C口的上半部分(PC7-PC4)。
B组控制电路用来控制B口和C口的下半部分(PC3-PC0)。
(3)总线数据缓冲器总线数据缓冲器是一个三态双向8位缓冲器,作为8255与系统总线之间的接口,用来传送数据、指令、控制命令以及外部状态信息。
(4)读/写控制逻辑电路读/写控制逻辑电路接受CPU发来的控制信号RD、WR、RESET、地址信号A1-A0等,然后根据控制信号的要求,将端口数据读出,发往CPU,或者将CPU送来的数据写入端口。
8255A有3种基本的工作方式:方式0:基本的输入输出方式(无条件);端口A、端口B、端口C均可使用;方式1:选通的输入输出方式;(查询)端口A、端口B可以用。
方式2:双向的传输方式,只有端口A可以使用。
方式0也叫基本输入/输出方式。
这种方式,不需要应答联络信号,端口A、端口B和端口C的高4位及低4位都可以作为输入或输出端口。
方式0的应用场合有无条件传送和查询传送2种;故根据我们系统设计的要求,综上所述,选择8255A的A,B口为工作方式0,其中A口作为输入、B口作为输出。
8255A的3种基本工作方式由方式控制字来决定,D7=1(特征位)表明是设定方式选择控制字;D7=0,则表示是端口C按位置位/复位控制字。
端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分别设置成输入端口或输出端口;端口C的高4位与端口A配合组成A组,端口C的低4位与端口B配合组成B组。
根据系统设计得出8255A的方式选择控制字,以及将A口设置为输入,B口设置为输出的PROTEUS仿真图如图所示:74LS154 4线-16线译码器将4个二进制编码输入译成16个彼独立的输出之一将数据从一个输入线分配到16个输出的任意一个而实现调节功能-将4个二进制编码输入译成16个彼独立的输出之一将数据从一个输入线分配到16个输出的任意一个而实现调节功能原理:这种单片4线--16线译码器非常适合用于高性能的存储译码器。
当两个选通输入G1和G2为低时,它可将4个二进制编码的输入译成16个互独立的输出之一。
实现解调功能的办法是:用4个输入线写出输出线的地址,使得在一个选通输入为低时数据通过另一个选通输入。
当任何一个选通是高时,所有输出都为高。
六.软件及源程序本次试验程序采用MASM 软件进行调试,如图为程序运行调试成功的截图七.实验源程序及注释DATA SEGMENTDATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART :MOV AX,DATAMOV DS,AXMOV AL,10010000BOUT 96H,ALA0: IN AL,90H 将A口的值1111 1110给ALNOT AL 将AL取反0000 0001MOV BL,AL 将AL值给BL,BL值为0000 0001CMP AL,1 AL 值与1比较JNZ A3 不为0跳转A2: MOV DL,AL 将AL值给DL,DL为0000 0001OUT 92H,AL 将AL从B口输出IN AL,90H 将A口的值送给ALNOT AL 对AL取反CMP AL,BL 将AL,BL 比较JNZ A0 不为0跳转MOV CX,20000A1: LOOP A1 CX减1,如不为0,则循环A1 MOV AL,DL 将DL值给ALROL AL,1 将AL值左移一位JMP A2 跳转至A2A3: CMP AL,2 AL值与2比较JNZ A6 不为0跳转MOV AL,80H 将80H值给ALA5: MOV DL,AL 将AL值给DLOUT 92H,AL 将AL值从B口输出MOV CX,20000A4: LOOP A4 CX减1,如不为0则循环A4 IN AL,90H 将A口的值给ALNOT AL 将AL取反CMP AL,BL AL 与BL比较JNZ A0 不为0跳转至A0MOV AL,DL 将DL值给ALROR AL,1 AL值右移一位JMP A5 跳转至A5A6: CMP AL,4 AL与4比较JNZ A9 不为0跳转MOV AL, 05H 将05H给ALA8: MOV DL,AL 将DL值给ALOUT 92H,AL AL值从B口输出MOV CX,50000A7: LOOP A7 CX值减1,不为0循环A7 IN AL,90H 将A口的值给ALNOT AL 将AL 取反CMP AL,BL 将AL与BL比较JNZ A0 不为0跳转MOV AL,DL DL值给ALROL AL,1 AL值左移一位JMP A8 跳转至A8A9: CMP AL,8 AL值与8比较JNZ A12 不为0跳转MOV AL,0A0H 将0A0H值给ALA11: MOV DL,AL 将AL值给DLOUT 92H,AL 将AL从B口输出MOV CX,50000A10: LOOP A10 CX减1若不为0,则循环A10 IN AL,90H 将A口值给ALNOT AL 将AL取反CMP AL,BL 将AL于BL比较JNZ A0 不为0跳转ROR AL,1 AL值右移一位JMP A11 跳转至A11A12: CMP AL,10H AL值与10H 比较JNZ A17 不为0跳转A16: MOV AL,18H 将18H给ALA14: MOV DL,AL 将AL值给DLOUT 92H,AL 将AL值从B口输出MOV CX,60000A13: LOOP A13 CX减1,若不为0则循环A13 IN AL,90H 将A口值给ALNOT AL 将AL 取反CMP AL,BL AL与BL 比较JNZ A0 不为0跳转至A0MOV AL,DL 将DL值给ALCMP AL,81H AL值与81H比较JZ A16 为0跳转至A16AND AL,0F0H AL值与0F0H值取与所得值放在AL中MOV CX,0MOV CH,AL 将AL值给CHROL CH,1 将CH值左移一位MOV AL,DL 将DL值给ALAND AL,0FH 将AL值与0FH取与所得值放入AL中MOV CL,AL 将AL值给CLROR CL,1 将CL值右移一位ADD CH,CL 将CH与CL值相加所得值给CHMOV AL,CH 将CH值给ALJMP A14 跳转至A14A17: CMP AL,20H 将AL值与20H比较JNZ A0 不为0跳转A19: MOV AL,81H 将81H值给ALA20: MOV DL,AL 将AL值给DLOUT 92H,AL 将AL值从B口输出MOV CX,50000A18: LOOP A18 CX减1若不为0,则循环A18 IN AL,90H 将A口值给ALNOT AL 将AL取反CMP AL,BL AL与BL比较JNZ A0 不为0跳转MOV AL,DL 将DL值给ALCMP AL,18H 将AL与18H比较JZ A19 为0跳转至A19AND AL,0F0H 将AL值与0F0H相与所得值给ALMOV CX,0ROR CH,1 将CH值右移一位MOV AL,DL 将DL值给ALAND AL,0FH 将AL值与0FH相与所得值给ALMOV CL,AL 将AL值给CLROL CL,1 将CL值左移一位ADD CH,CL 将CH与CL值相加所得值给CHMOV AL,CH 将CH 值给ALJMP A20 跳转至A20RETCODE ENDSEND START8255A端口地址:由于8086的A1和A2与8255A的A0和A1形成错位连接,形成4个偶地址,即如下:端口地址 A1A0 A口 90H 1001 0 0 0 0B口 92H 1001 0 0 1 0C口 94H 1001 0 1 0 0控制口 96H 1001 0 1 1 0七.课程设计过程中遇到的问题:1.在开始的PROTEUS系统结构连线中,由于对该软件接触较少,所以对它的元件库不太熟悉,因此走了很多弯路。