1、微机原理课程设计报告课 题 名: 花式跑马灯的设计 班 级: 生物医学工程 101 班 学生姓名: 孙巍 郁邦居 张翊翔 学 号: 23 , 27 , 28 指导老师: 成 耀 一 实验目的通过花式跑马灯的设计与制作,深入了解与掌握利用可编程 8255A 进行开关量控制的原理与方法。二 实验要求1.自行设计电路;2.实现具有 5 种以上工作方式的跑马灯;3.要求设计两种以上的切换方式。三 实验内容1进行跑马灯的系统电路硬件设计;2画出电路原理图;3进行跑马灯的控制程序设计;4进行仿真运行,改进;5.整理材料,数据,提交报告。四 程序流程图设计及其说明主程序流程图如图所示:主程序流程图初始化程序
2、开始送控制字通过 A 口输出使灯全灭调用 ledflash 子程序开始检测 B 口信号输入是否为按键 1是否为按键 2是否为按键 3将 1 型走马灯的偏移地址送给 SI将 2 型走马灯的偏移地址送给 SI将 3 型走马灯的偏移地址送给 SI是否终止开关Num 是否为 0延时YYYYYNNNNN结束子流程图四 设计原理与硬件电路8255A 是一种通过可编程并行 I/O 接口芯片。广泛用于几乎所有系列的微机系统中,8255A 具有三个带锁存或缓冲的数据端口,可与外设并行进行数据交换,8255A 有多种操作方式,通用性较强,可为 CPU与外设之间提供输入/输出通道。8255A 和各端口内具有中断控制
3、逻辑,在外设与 CPU 之间可用中断方式进行信息交换,使用条件传输方式时可用“联络”线进行控制。在实验中,我们运用 8255 为 CPU 与外设之间提供输入输出输出通道来实现对走马灯花样变换的控制。跑马灯驱动模块电路原理如图所示。模块包括 8 个 LED 彩灯、三个 74LS273、一个 74LS154 和两个个排阻。用 LED 可以观测在不同按键输入下,跑马灯花样的变化效果。4.1硬件电路图:4.2 硬件连线图:根据图 1 的实验原电路图,走马灯电路结构电路接线如图 2 所示。图 2 跑马灯电路结构电路接线图接线说明:8255A 共有三个 8 位端口 A 口、B 口和 C 口。其中 A 口和
4、 B 口为输出端口,C 口为输入端口。在本电路中,B 口 8 个输出管脚 PB7-PB0 分别接 8 个并联的 LED 彩灯反馈走马灯的发光方式;A 口 8 个管脚 PA7-PA0 分别接 8 个并联的开关控制选择走马灯的发光方式。3 个 74LS273 的 D0-D7 接输入端,是信号的输入。74LS154 是 4 线-16 线的译码器,具有选片作用,ABCD 四个端口是输出端口,分别接到 74LS273 的输入端,个 G1、G2 是低电平有效。4.3 程序设计根据实验原理与实验电路,初步写出程序的步骤,再绘制出完整的流程图,然后根据流程图编汇编程序。程序代码:DATA SEGMENT DA
5、TA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START :MOV AX,DATA MOV DS,AX MOV AL,10010000B OUT 96H,AL A0: IN AL,90HNOT ALMOV BL,ALOUT 92H,ALCMP AL,1JNZ A3A2: MOV DL,AL ;第一个开关实现从上至下OUT 92H,ALIN AL,90HNOT ALCMP AL,BLJNZ A0MOV CX,20000A1: LOOP A1MOV AL,DLROL AL,1JMP A2A3: CMP AL,2 ; 实现第二个开关从下至上 JNZ A6
6、MOV AL,80HA5: MOV DL,ALOUT 92H,ALMOV CX,20000A4: LOOP A4 IN AL,90HNOT ALCMP AL,BL JNZ A0MOV AL,DL ROR AL,1JMP A5A6: CMP AL,4 ;第三个开关实现相隔的两个灯自上而下JNZ A9MOV AL, 05HA8: MOV DL,ALOUT 92H,ALMOV CX,50000A7: LOOP A7IN AL,90HNOT ALCMP AL,BLJNZ A0MOV AL,DLROL AL,1JMP A8A9: CMP AL,8 ;第四个开关实现相隔的两个灯从下而上JNZ A12MOV
7、 AL,0A0HA11: MOV DL,ALOUT 92H,ALMOV CX,50000 A10: LOOP A10IN AL,90HNOT ALCMP AL,BLJNZ A0MOV AL,DLROR AL,1JMP A11 A12: CMP AL,10H JNZ A17A16: MOV AL,18H ;第五个开关实现从中间向两边A14: MOV DL,ALOUT 92H,ALMOV CX,60000A13: LOOP A13IN AL,90HNOT ALCMP AL,BLJNZ A0MOV AL,DLCMP AL,81HJZ A16AND AL,0F0HMOV CX,0MOV CH,ALRO
8、L CH,1MOV AL,DLAND AL,0FHMOV CL,ALROR CL,1ADD CH,CLMOV AL,CHJMP A14A17: CMP AL,20H ;第六个开关实现从两边向中间JNZ A0A19: MOV AL,81HA20: MOV DL,ALOUT 92H,ALMOV CX,50000A18: LOOP A18IN AL,90HNOT ALCMP AL,BLJNZ A0MOV AL,DLCMP AL,18HJZ A19AND AL,0F0HMOV CX,0MOV CH,ALROR CH,1MOV AL,DLAND AL,0FHMOV CL,ALROL CL,1ADD CH
9、,CLMOV AL,CHJMP A20RET CODE ENDS END START 五 调试与仿真5.1、内存空间分配,汇编语言的重要特点之一是能够直接利用机器指令或者伪指令为数据或者代码程序分配内存空间,86 系列(如 8086 微处理器)的存储器结构是分段的,有代码段,数据段,堆栈段或附加段,在程序设计时要充分考虑分段结构,要执行的程序段应设在当前段(活动段)中;分配内存空间:直接在 proteus 里面将 8086CPU 的internal memory size 设置成一个足够用的空间大小,如 0x1000,默认的空间大小是0x00000,如不改则仿真不成功。程序在运行时所需要的工作
10、单元应尽可能的设在 CPU 寄存器中,这样存取速度快,而且操作方便;在此系统源程序中都采用 8086CPU 的全部通用寄存器:累加器 AX,基数寄存器 BX,基数寄存器 CX,数据寄存器 DX;和堆栈指针寄存器 SI。5.2 unknow 1-byte opcode at B900:7056! 61SPICEerror-too many iterations without convergence在仿真过程中,出现以上两行的错误,太多的迭代没有收敛性,和某个汇编语言在编码过程中的地址不正确,经过排查程序去除无用代码,proteus 不再报错。5.3 8255A 隐藏引脚问题,需要设置芯片 Hi
11、dden Pins 里的 GND 改为 VSS,VCC 改为VDD。5.4 程序一开始是将延时环节作为一个独立子程序,运行过程中由于部分情况下不满足题设,故将延时子程序改为程序段落写到检测按键的子程序中问题得以解决。六 结果记录及分析6.1 运行后的原理图:6.2 第一种灯光变换效果:L1L2L3L4L5L6L7L8,如图所示。图 LED 第一种变换效果第二种灯光变换效果:L8L7L6L5L4L3L2L1;第一种变换效果反向即为第二种效果。第三种灯光变换效果:L1L8L2L7L3L6L4L5L3L6L2L7L1L8,如图所示。七 实验小结与心得体会在这次对跑马灯的设计中,我更深的了解到了 82
12、55 等一些芯片的工作原理,学到了课本上没有的知识,加强了自己的动手能力,学会了如何应用自己学的知识去处理一些实际问题,如何去处理一些常见的错误。通过自己动手做我知道了,只有自己做出来了才是自己的。通过本次课程设计,学到了很多使用的东西,使我受益匪浅,将课堂上所学的知识运用到实际,体会到了理论与实际联系的重要性,同时进一步学习了 PROTEUS 这款软件。课程设计中这要存在以下三点:第一,在做这次课程设计的一开始可以说是难度重重,接口电路设计出了问题,一开始由于电路没有加入锁存器,导致地址和数据冲突,从而电路不能正常工作,最后在电路里加入了锁存器 74LS273 和译码器 74LS154 后解
13、决了地址和数据冲突的问题。第二,由于对软件 PROTEUS 运用不是很熟练,导致一些问题,比如说分配内存空间:直接在 proteus 里面将 8086CPU 的 internal memory size 设置成一个足够用的空间大小,如0x1000,默认的空间大小是 0x00000,如不改则仿真不能成功。还有在运行期间PROTEUS 仿真报错,由于不太懂报错信息就一步加大了设计的难度,还有一些其他小细节上的问题,可以说是细节决定成败。第三,由于汇编语言运用的不太熟练,对程序反复进行修改,发现汇编语言由于语句在程序中放置的位置不同也会是不同的效果,对汇编语言有了进一步的认识。综上所述,这次微机原理与接口技术的课程设计让我学到了很多东西,不是课堂上能够学到的东西,通过仿真可以实实在在的看到成果,从而提高了对电子设计的兴趣,我想这是一个很好的锻炼机会,通过这样的锻炼不仅巩固了课堂上学习的相关知识,这些东西将使我终身获益。