1前言微机原理和接口技术是计算机和电子等专业重要的基础专业课程之一,不但要求有较高的理论水平,而且还要求有实际的动手能力。本课程设计的主要目的是提高实践能力,包括提高汇编等语言的编程能力及对接口等硬件的理解分析能力和设计接口电路的能力,从而学以致用。只有通过实际编程和微机接口的硬件实践,才能真正掌握软硬件设计的方法,从中得到收益和提高。我国在计算机应用、计算机软件和电子类相关专业的人才培养方面,取得了长足的进展,每年的毕业生都有数十万人。但是这些毕业生走进企业、公司、政府机构或研究单位之后,往往深刻地感觉到缺乏实际开发设计项目的经验,不善于综合运用所学理论,对知识的把握缺乏融会贯通的能力。通过这种设计课程,我们一方面可以结合课程的教学内容循序渐进地进行设计方面的实践训练,另一方面,在参与一系列子项目的实践过程中,还能提高如何综合运用所学知识解决实际问题的能力,以及获得有关项目管理和团队合作等等众多方面的具体经验,增强对相关课程具体内容的理解和掌握能力,培养对整体课程知识综合运用和融会贯通能力。最后,向此次课程设计的指导老师谢永宁老师以及在课程设计中帮助、支持我的同学表示衷心的感谢。由于本次课程设计时间仓促且自己水平有限,难免还存在一些错误和不妥之处,恳请老师批评指正。第一章概述1、接口技术微机接口技术是采用硬件与软件相结合的方法,研究微处理器如何与“外部世界”进行最佳连接,以实现CPU与“外部世界”进行高效可靠的信息交换的一门技术。微机接口技术综合性很强,所涉及的知识面很宽,包括微机原理、汇编语言(或高级语言)程序设计、电子技术、自控原理以及通信技术等多门课程的基础理论和专业知识。2、接口技术在微机应用中的作用2随着集成电路集成度的增高,电子计算机向微型化和超微型化方向发展,微型计算机已成为导弹、智能机器人、卫星等复杂系统必不可少的智能部件。目前,微机不仅作为科学计算、实时控制、现代化通信和管理的手段,而且也成为人类进行学习、看病、咨询、购物、旅游等生活服务和娱乐的工具。然而,在微机系统中,微处理器的这种神通广大的功能必须通过外部设备才能实现,而外设与微处理器之间的信息交换及通信又是靠接口来实现的,所以,微机应用系统的研究和微型化产品的开发,从硬件角度来讲,就是接口电路的研究和开发,接口技术已成为直接影响微机系统的功能和微机推广应用的关键。微机的应用是随着外部设备的不断更新和接口技术的发展而深入到各个领域的。因此,掌握微机接口技术就成为当代的科技和工程技术人员应用微型计算机必不可少的基本技能。3、分析与设计接口电路的基本方法一、两侧分析法凡是接口都有两侧,一侧是CPU,另一侧是外设。两侧分析法是分析接口电路的基本方法。二、硬软结合法以硬件为基础,硬件与软件相结合是设计接口电路的基本方法。1硬件设计方法①合理选用外围芯片②有针对性地设计附加电路2软件设计方法①采用汇编语言(或高级语言)直接对低层硬件编程②采用DOS系统功能调用和BIOS调用编程第二章系统环境简介1、系统硬件介绍DJ-598K实验开发系统是启东市东疆计算机有限公司新近开发成功的超强型单片机、微机实验系统。集51、96、8088(以下简称88)三大系列CPU于一体,内置5196仿真器和8086实验系统。该系统以8086实验系统作为基板,自成一体,可单独作为8086微机原理和接口实验使用,也可分别叠插51或96CPU卡,构成51/96单片机实验开发系统,598K系统结构紧凑,资源充分共享,无总线开关切换,自动识别CPU的类型。实验仪可以不和PC机联机,自成一体,通过一组键盘命令完成所有软硬件实3验,每个实验程序固化在实验监控中。此时,开关JK要置“系统”位置,键盘/显示选择系统配置的8255接口芯片。2、DJ-8086K软件主窗口软件启动后的界面如下图,可分为三个区域。顶部为菜单栏和工具栏,提供调试全部命令和功能;中间部分为工作窗口区,提供软件调试、寄存器、标志位、存储器、汇编代码对照、编译信息显示等窗口;底部为状态栏,提示软件联机状态等信息。图2.1DJ-8086K软件主窗口第三章8255A并行接口芯片介绍1、8255芯片的内部结构及引脚8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作:方式0—基本输入/输出方式方式1—选通输入/输出方式4方式2—双向选通输入/输出方式8255内部结构框图如图3.1所示:图3.18255内部结构框图8255引脚图如图3.2所示,各引脚功能如下:D7~D0——与CPU侧连接的八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0、A1——片内寄存器选择输入信号;PA7~PA0——A口外设双向数据线;PB7~PB0——B口外设双向数据线;PC7~PC0——C口外设双向数据线;RESET——复位输入信号5图3.28255引脚图2、8255端口地址端口地址PA口0FF28HPB口0FF29HPC口0FF2AH控制口0FF2BH第四章系统设计1、设计原理本系统设计的彩灯控制是以8088微处理器作为CPU,将8255A的PA口设置表3.18255端口地址表6为方式0并作为输入口,读取K1~K8个开关量,PB口设置为方式0作为输出口连接8个发光二极管。2、接线错误!未找到引用源。8255的PA0~PA7接K1~K8错误!未找到引用源。8255的PB0~PB7接L1~L83、程序流程图系统设计的程序流程图如图4.2所示:7YYNNYYNYNNYNYNYNYNN图2.1程序流程图Y开始初始化8255初始化BL=0读入PA口状态并赋给ALAL=0?BL自增BL8?把BL赋给ALAL=1?AL=2?AL=3?AL=4?AL=5?AL=6?AL=7?第i((i=AL)=8)种彩灯显示延时等待读入PA口状态并赋给ALAL=0?延时等待8第五章模块设计1、主控模块该模块实现控制程序流程的功能。具体实现方法为:根据8255的PA口状态(0或1),判断程序的走向。如果PA=0,彩灯全灭处于等待PA状态的变化;如果PA=1(第一次为1)则输出显示第1种彩灯,假设PA第N次为1,由于只有8种彩灯模式,所以输出显示为第[Nmod8]种彩灯。编写程序如下:CBC:MOVBL,00HAA:MOVDX,IOAPTINAL,DXCMPAL,00HJZK_0;全灭,等待PA口状态的变化INCBLCMPBL,08HJGCBCMOVAL,BLJMPCCBB:MOVDX,IOAPTINAL,DXCMPAL,00HJZK_0MOVAL,BLCC:CMPAL,01HJZK_1;第1种彩灯显示CMPAL,02HJZK_2;第2种彩灯显示CMPAL,03HJZK_3;第3种彩灯显示CMPAL,04HJZK_4;第4种彩灯显示CMPAL,05HJZK_5;第5种彩灯显示CMPAL,06HJZK_6;第6种彩灯显示CMPAL,07HJZK_7;第7种彩灯显示JMPK_8;第8种彩灯显示K_0:MOVAL,0FFHCALLIOLEDJMPAA92、第1种彩灯显示模块第一种彩灯为:8个彩灯一个一个顺序点亮,并且每次只点亮1个。具体实现方法为:由于有8个灯,每次点亮一个,所以只需赋值AL=0FEH并读出到PB口,再逻辑左移8次AL,即可实现一次完整的彩灯输出。编写程序如下:;依次点亮K_1:MOVCX,08HPUSHAXMOVAL,0FEHLOOP_1:CALLIOLEDROLAL,1LOOPLOOP_1POPAXJMPWAITING3、第2种彩灯显示模块第2种彩灯为:左右4个灯交替点亮,每次只点亮左4个灯或右4个灯。具体实现方法:赋值AL=0F0H并读出到PB口,再逻辑取反AL,即可实现一次完整的彩灯输出。编写程序如下:;左右4个交替点亮K_2:MOVCX,08HPUSHAXMOVAL,0F0HLOOP_2:CALLIOLEDNOTALLOOPLOOP_2POPAXJMPWAITING4、第3种彩灯显示模块第3种彩灯为:8个灯起初全亮,再全灭,然后循环。具体实现方法:赋值AL=00H并读出到PB口,再逻辑取反AL,即可实现一次完整的彩灯输出。编写程序如下:;先全亮,再全灭,然后循环K_3:MOVCX,09HPUSHAXMOVAL,00HLOOP_3:CALLIOLEDNOTALLOOPLOOP_3POPAXJMPWAITING5、第4种彩灯显示模块第4种彩灯为:循环点亮灯(1,5)、(2,6)、(3,7)、(4,8)。具体实现方法:赋值AL=0EEH并读出到PB口,再逻辑左移4次AL,即可实现一次完整的彩灯输出。编写程序如下:10;循环点亮(1,5)、(2,6)、(3,7)、(4,8)K_4:MOVCX,08HPUSHAXMOVAL,0EEHLOOP_4:CALLIOLEDROLAL,1LOOPLOOP_4POPAXJMPWAITING6、第5种彩灯显示模块第5种彩灯为:起初8个灯全亮,然后依次一个一个不亮,直至全灭。具体实现方法:赋值AL=00H并读出到PB口,再把AL加1B,加10B…加10000000B,直到灯全灭后再从头循环,即可实现一次完整的彩灯输出。编写程序如下:;先全亮,然后依次不亮K_5:MOVCX,09HPUSHAXMOVAL,00HMOVAH,01HLOOP_5:CALLIOLEDADDAL,AHROLAH,1LOOPLOOP_5POPAXJMPWAITING7、第6种彩灯显示模块第6种彩灯为:起初是两边4个灯亮,然后中间4个灯亮,再循环。具体实现方法:赋值AL=0C3H并读出到PB口,再逻辑取反AL,即可实现一次完整的彩灯输出。编写程序如下:;先两边亮,后中间亮,再循环K_6:MOVCX,09HPUSHAXMOVAL,0C3HLOOP_6:CALLIOLEDNOTALLOOPLOOP_6POPAXJMPWAITING8、第7种彩灯显示模块第7种彩灯为:起初8个灯全灭,然后一个一个点亮,直至全亮,再循环。具体实现方法:赋值AL=0FFH并读出到PB口,再把AL减1B,减10B…减10000000B,直到灯全灭后再从头循环,即可实现一次完整的彩灯输出。编写程序如下:K_7:MOVCX,09H11PUSHAXMOVAL,0FFHMOVAH,01HLOOP_7:CALLIOLEDSUBAL,AHROLAH,1LOOPLOOP_7POPAXJMPWAITING9、第8种彩灯显示模块第8种彩灯为:先点亮灯(1,3,5,7),再点亮灯(2,4,6,8),然后循环。具体实现方法:赋值AL=0AAH并读出到PB口,再逻辑逻辑取反AL,即可实现一次完整的彩灯输出。编写程序如下:K_8:MOVCX,08HPUSHAXMOVAL,0AAHLOOP_8:CALLIOLEDNOTALLOOPLOOP_8POPAXJMPWAITING1213附录:源程序CODESEGMENTASSUMECS:CODEIOCONPTEQU0FF2BHIOBPTEQU0FF29HIOAPTEQU0FF28HORG11B0HSTART:MOVAL,90HMOVDX,IOCONPTOUTDX,ALCBC:MOVBL,00HAA:MOVDX,IOAPTINAL,DXCMPAL,00HJZK_0INCBLCMPBL,08HJGCBCMOVAL,BLJMPCCBB:MOVDX,IOAPTINAL,DXCMPAL,00HJZK_0MOVAL,BLCC:CMPAL,01HJZK_1CMPAL,02HJZK_2CMPAL,03HJZK_3CMPAL,04HJZK_4CMPAL,05HJZK_5CMPAL,06HJZK_614CMPAL,07HJZK_7JMPK_8K_0:MOVAL,0FFHCALLIOLEDJMPAA;依次点亮K_1:MOVCX,08HPUSHAXMOVAL,0FEHLOOP_1:CALLIOLEDROLAL,1LOOPLOOP_