微机原理课程设计报告书课题名称多路流水灯控制程序的设计姓名**学号*********院、系、部物理与电信工程系专业通信工程指导教师***2011年7月4日※※※※※※※※※※※※※※※※※※※※※※※※2009级学生微机原理课程设计一、设计任务及要求1.以8086CPU为核心、并行接口芯片8255A和3个逻辑电平开关设计——多路流水灯控制程序;2.该多路流水灯控制程序能实现模拟水滴下落、左向移动流水灯和右向移动流水灯三种不同的模拟流水形式;3.该多路流水灯控制程序在输入有效代码时才能产生所需的流水形式,否则,小灯全灭。指导教师签名:2011年6月20日二、指导教师评语指导教师签名:2011年7月4日三、成绩验收盖章2011年7月4日多路流水灯控制程序的设计***********1、设计目的1.1了解各种各种小灯循环点亮和渐变效果的产生原理。1.2掌握并行接口芯片8255A逻辑功能及使用方法。1.3掌握一定的汇编语言知识,培养自己的动手操作能力。1.4学习程序设计的基本思路和方法。2、设计要求2.1以8086CPU为核心、并行接口芯片8255A和3个逻辑电平开关设计——多路流水灯控制程序;2.2该多路流水灯控制程序能实现模拟水滴下落、左向移动流水灯和右向移动流水灯三种不同的模拟流水形式;2.3该多路流水灯控制程序在输入有效代码时才能产生所需的流水形式,否则,小灯全灭。3、设计思路总体方案设计分析在本实验中要求用8255A的B口做为输出,接8个发光二极管,从而实现8位流水灯的显示效果,故基本的接线可以如下面图2所示。在C口的低三位接3个开关,实现3个扩展功能的控制,在PC0-PC7口分别对应的接八个发光二极管。3.1模拟水滴下落(1)现象模拟水滴下落分为两个过程:其一,水滴形成(渐变效果),即最左位的小灯的亮度逐渐增强;其二,水滴掉下(加速与拖尾效果),即小灯移动的速度逐渐加快以及渐隐效果。(2)原理水滴形成是在一个周期内,我们可以调节亮和灭的时间,达到调节亮度的目的。因为一次亮灭为一个周期,由于人眼对时间的分辨率有限,变化较快的的闪烁频率无法识别,只要周期够短,人眼就看不出闪烁了。因此利用此原理,亮的时间长一点,灭的时间短一点,看起来就亮一些,否则就暗一些从而实现渐变的效果及水滴的形成,给人的感觉是D0位小灯的亮度逐渐增大。水滴掉下过程是首先定义一些时间数组,然后通过数组所定义的时间的逐渐变化来使硬件产生小灯的加速移动的效果。拖尾效果是首先定义一些时间数组,然后通过数组所定义的时间的逐渐变化来使硬件产生小灯的渐隐的效果。3.2左向移动流水灯(1)现象左向移动流水灯的实验现象是首先最左边的灯亮,然后是最左边的灯灭,此时左起第二个灯亮,依次轮流亮,直到第八个灯亮。然后循环上述过程。(2)原理左向移动流水灯是根据发光二极管的显示原理,首先点亮最右的二极管,然后进位置一,通过带进位的循环左移指令编写程序以实现模拟流水灯的左向移动。3.3右向移动流水灯(1)现象右向移动流水灯的实验现象是首先最右边的灯亮,然后是最右边的灯灭,此时右起第二个灯亮,依次轮流亮,直到第八个灯亮。然后循环上述过程。(2)原理右向移动流水灯是根据发光二极管的显示原理,首先点亮最左的二极管,然后进位置一,通过带进位的循环右移指令编写程序以实现模拟流水灯的右向移动。4、电路及连线设计图4.2系统硬件连接图8086CPU处理PB0-PB78255A输入PC0-PC2LED显示K0—K2图4.1系统逻辑框图图4.38255A与8086CPU连接及外部接线图图4.48255A与LED及开关的连接及外部接线图5、程序设计5.1主程序流程图5.1主程序流程图5.2子程序流程图(1)模拟水滴子程序水滴形成(渐变效果):开始设置8255A的工作方式(81H)读C口低三位模拟水滴下落输出00H右向流水灯灯左向流水灯灯结束无有效按键时输出YNYYNYK2是否被按下NNK3是否被按下K1是否被按下图5.2水滴形成过程子程序图水滴掉下(加速与拖尾效果):保护现场NYYNNYBX=0吗DL加1YY恢复现场CX等于0吗NCX等于0吗CX等于0吗N恢复现场开始初始化寄存器保护现场BX模4保护现场B口输出7FH,BX加1恢复现场YB口输出FFHBX=DX吗图5.3水滴掉下过程子程序图YNNYYN[SI+2]的内容通过AX给[SI+4],DL加1CX等于0吗CX等于0吗YNCX等于0吗判断是否满足程序所给的条件,输出相应结果恢复现场YNBL=AL吗CX等于0吗恢复现场初始化寄存器保护现场保护现场保护现场保护现场恢复现场结束恢复现场(2)左向移动流水灯图5.4左向移动流水灯子程序图(3)右向移动流水灯图5.5左向移动流水灯子程序图开始CF置1,07FH→ALB口输出AL带进位循环右移一位延时开始CF置1,0FEH→ALB口输出AL带进位循环左移一位延时5.3源程序设计(见附录)5.4仿真实物连接图图5.6硬件仿真图6、设计总结这次微机原理课程设计我学到了很多在书本上所没有学到过的知识。以前在上课的时候对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以及当寄存器不够用时如何用存储单元代替寄存器、怎么去使用循环嵌套、怎么去正确使用8255芯片等方面都有了很大程度的提高。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,但总的来说还是圆满的7、参考文献[1]楼顺天,周佳社.微机原理与接口技术[M].北京:科学出版社,2006:25-71,163-164,295-305[2]周明德.微机原理与接口技术[M].北京:人民邮电出版社,2007.225-243附录:CODESEGMENTASSUMECS:CODEORG11e0HSTART:JMPSTART0IOCONPTEQU0FF2BHIOAPTEQU0FF28HIOBPTEQU0FF29HIOCPTEQU0FF2AHBUFDB?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?DATA0:DB00H,01H,02H,04H,06H,10H,20H,40H;亮度数组以实现拖尾效果DATA1:DB00H,22H,30H,3BH,44H,4CH,54H,5BH,61H,67H,6AH,72H,77H,7BH,7EH;时间数组以实现加速效果DATA2:DB7H,6H,5H,4H,3H,2EH,1H,00H,8H,9H,0AH,0BH,0CH,0DH,0EH,0FHSTART0:MOVAL,81H;写8255A方式控制字MOVDX,IOCONPTOUTDX,ALMO:MOVDX,IOCPT;检测开关信号INAL,DXCMPAL,01H;检测按键1是否被按下JZK1CMPAL,02H;检测按键2是否被按下JZK2CMPAL,04H;检测按键3是否被按下JZK3JMPTHEEND;检测是否按键1,2,3均未被按下K1:JMPL1K2:JMPL2K3:JMPL3L1:MOVDX,IOBPTMOVAL,0FFHOUTDX,ALLL1:XORDX,DXXORBX,BXMOVCX,0FDHL1_0:;水滴形成(渐变效果)PUSHAX;嵌套循环来控制灯亮灭的时间PUSHDX;使实现模拟水滴形成的渐变效果MOVDL,4;即感觉D0位小灯的亮度逐渐增大MOVAX,BXDIVDLMOV[SI+6],AH;判断BX除以4后的余数是否为0,POPDX;若不为0则调转到L1_1POPAXCMP[SI+6],00HJNZL1_1INCDLL1_1:PUSHCXPUSHBXXORBX,BXMOVCX,11HL1_100:MOVDX,IOBPT;从B口输出7FHMOVAL,7FHOUTDX,ALPUSHCXPUSHBXXORBX,BXMOVCX,41HL1_2:CMPBL,DLJNZL1_22MOVDX,IOBPT;从B口输出0FFHMOVAL,0FFHOUTDX,ALL1_22:INCBLLOOPL1_2;第三次循环POPBXPOPCXINCBLLOOPL1_100;第二次循环POPBXPOPCXL1_00:INCBLLOOPL1_0;第一次循环;水滴形成(渐变效果)程序结束,水滴掉下(加速与拖尾效果)PUSHCX;保护现场PUSHBXXORBX,BXMOVCX,0FFHL1_3:;嵌套循环来控制灯亮灭的时间MOVSI,4000H;使实现模拟水滴的加速掉下及拖尾效果PUSHAXMOVAX,00HMOV[SI],AXMOV[SI+2],AX;存储单元清零MOV[SI+4],AXPOPAXPUSHCX;保护现场PUSHDXXORDX,DXMOVCX,10HL1_4:PUSHAX;保护现场,依次取DATA1的内容PUSHBXMOVBX,OFFSETDATA1ADDBX,DXMOVAL,[BX]POPBXCMPBL,ALPOPAXJNZL1_40PUSHAX;依次取DATA2的内容PUSHBXMOVBX,OFFSETDATA2ADDBX,DXMOVAL,[BX]POPBXMOV[SI+2],ALPOPAXL1_40:INCDXLOOPL1_4POPBXPOPCXXX:PUSHCXPUSHBXXORBX,BXMOVCX,041HL1_5:PUSHCXPUSHDXXORDX,DXMOVCX,08HL1_6:PUSHAXPUSHBX;依次取DATA0的内容MOVBX,OFFSETDATA0ADDBX,DXMOVAX,[BX]POPBXCMPBX,AXPOPAXJNZL1_60PUSHCXPUSHBXMOVCL,DLMOVBX,1SHLBX,CLOR[SI],BXPOPBXPOPCXPUSHAXMOVAX,[SI]NOTAXMOV[SI],AXPOPAXPUSHAXMOVAX,[SI]MOV[SI+4],AXPOPAXPUSHAXMOVAX,[SI+2]CMPAX,08HPOPAXJNAL1_600PUSHAX;保护现场PUSHCXMOVAX,[SI+4]MOVCL,[SI+2]SUBCL,8HSHLAX,CLNOTAXMOVDX,IOBPT;从B口输出OUTDX,ALPOPCX;恢复现场POPAXL1_600:PUSHAX;保护现场PUSHCXMOVAX,[SI+4]MOVCX,[SI+2]SHRAX,CLPOPCXNOTAXMOVDX,IOBPT;从B口输出OUTDX,ALPOPAX;恢复现场L1_60:INCDXLOOPT2T2:JMPL1_6POPDX;恢复现场POPCXINCBXLOOPT1POPBX;恢复现场POPCXT1:JMPL1_5INCBXLOOPT2POPBX;恢复现场POPCXT3:JMPL1RET;水滴掉下(加速与拖尾效果)程序结束L2:;模拟流水灯左移MOVDX,IOBPT;设置B口输出STC;进位置1MOVAL,0FEHL2_0:OUTDX,AL;B口输出RCLAL,1;AL带进位左移一位CALLDELAY;调用延时子程序JMPL2_0RETL3:MOVDX,IOBPT;模拟流水灯左移STC;设置B口输出MOVAL,07FH;进位置1L3_0:OUTDX,AL;B口输出RCRAL,1;AL带进位左移一位CALLDELAY;调用延时子程序JMPL3_0RETDELAY:;延时子程序PUSHAXPUSHCXMOVCX,0030HDEALY_1:CALLDELAY_2LOOPDEALY_1POPCXPOPAXRETDELAY_2:PUSHCXMOVCX,100HDE