1、微型计算机技术课程设计报告长江大学332020年4月19日文档仅供参考,不当之处,请联系改正。微型计算机技术课程设计指导教师: 李鹏 蔡明文 班 级: 计科11205班 姓 名: 专 学 号: 班内序号: 35 课设日期: 12月22日 1月4日 课设题目: 电梯控制系统电路及程序设计一、课设目的1经过本设计,使学生综合运用汇编语言与微型计算机技术、数字电子技术等课程的内容,为今后从事计算机检测与控制工作奠定一定的基础。2掌握接口芯片8253、8255A、8259等可编程器件、译码器74LS138、8路同相三态双向总线收发器74LS245、六缓冲器/驱动器/反相器74LS06、点阵显示器件和七
2、段数码管的使用。3学会用汇编语言编写一个较完整的实用程序。4掌握微型计算机技术应用开发的全过程,包括需求分析、原理图设计、元器件选用、布线、编程、调试、撰写报告等步骤。二、课设内容1电梯程序启动后的初始状态点阵显示器件能够显示的三种状态分别为:“ “”、“-”。含义分别为电梯“向上运行中”、“ 向下运行中”、“停止,乘客上下”。这三种状态的点阵数据需要自己生成或经过点阵软件生成。其初始状态为“-”。当电梯在某层停止时,黄色发光二极管每秒闪烁一次,15秒用于乘客上下(这个时间在调试时为了节省时间能够减少为5秒。也可用“”控制乘客上下时间小于15秒时关门启动,用“”控制乘客上下时间大于15秒时开门
3、等待,选作);15秒后黄色发光二极管灭,触发绿色发光二极管每秒闪烁一次,表示电梯正在运行中;相邻的两层之间运行3秒,绿色发光二极管灭,触发七段数码管显示的楼层数加1或减1。两个发光二极管的初始状态都为“灭”,七段数码管能够显示的楼层为“09”,其初始状态为“0”,表示地下室或地下停车场。2电梯程序运行状态电梯程序启动后,接收来自键盘的数据进入运行状态。来自键盘的合法数据只有“09”、“”、“” 、“”、“”、“空格”和Esc,程序应该检查来自键盘数据的合法性。除Esc是结束程序运行外,来自键盘的数据应为“数字+方向+数字”。来自键盘的数据能够是连续的,也能够是间断的。输入的数据要尽可能测试到各
4、种情况,至少完成电梯一次完整的升降,如“35 57 57 53 13 94 96 Esc”的一种可能的处理过程为035796401390。另一种可能的处理过程为013579640。3结束电梯程序运行状态按下Esc键结束程序。点阵显示器件显示“-”, 两个发光二极管的状态都为“灭”,七段数码管显示的楼层为“0”。三、设计所需器材及工具1一块实验面包板(内含时钟信号1MHz或2MHz)。 2可编程芯片8253、8255、74LS245、74LS06各一片,74LS138两片;发光二极管2个(绿色、黄色各1个);排电阻1个;七段数码管1个;200欧母电阻16个;88点阵显示器件一片。3导线若干。4示
5、波器、万用表、常见工具等共用(从实验室现借现还)。四、设计思路1利用一个74LS138设计地址译码电路,8255端口地址:300H303H,8253端口地址:304H307H。274LS245用于总线和8253、8255之间的双向传输和隔离。3利用面包板上时钟(1MHz或2MHz)和8253设计一个1秒定时电路,将定时信号(1秒方波)接到总线的IRQ2或IRQ10送给8259。48255的PA口控制点阵显示器件行变化,200欧母电阻接在PA口和点阵显示器件之间。PB口经过另一个74LS138控制点阵显示器件列变化,PB口经过还需经过74LS06控制发光二极管的的变化。5PC口控制七段数码管变化
6、,200欧母电阻接在PC口和七段数码管之间。6每个74LS06中包含了6个非门,它的输入来自PB口的某一位,输出接到发光二极管的负极。7每个发光二极管的正极接排电阻的从2到9的一个引脚,排电阻的1脚接VCC(+5V)。五、设计步骤1设计电路原理图,用protues画出电路图如下2用所给器件布线,按照protues里面的仿真图搭建好硬件电路。3选用汇编语言编写电梯运行的主程序以及各芯片调试子程序。4调试并排除括硬件电路设计错误和软件设计错误,使系统达到设计要求。六、设计原理图七、芯片介绍(1) 74LS245数据总线缓冲器 74LS245功能表(2)74LS06(3)74LS138(4)8253
7、定时计数器 (5)8255A (6)七段数码管 (7)发光二极管 (8)排电阻(9)点阵显示器788BS八、电梯流程图初始化等待确认本层与目标层 目标层与本层是否同层 是否目标层楼层检测电梯运行电梯选向停止九、程序设计SSEG SEGMENT STACKDW 200 DUP(?)SSEG ENDS DATA SEGMENT MESG2 DB Please input the direction and the number of the elevator ,0ah,0dh DB as dir (UPorDOWN) + num (0-9),0ah,0dh DB Exit with Esc,0ah
8、,0dh,$NOW_FLOOR DB(1);电梯现在楼层NEXT_FLOOR DB(1);电梯目标楼层STATE DB(0);电梯运行的状态 0表示暂停 1表示向上 2表示向下TIMECOUNTDB(0);时钟计数SIGNDB(1)UP DB 18H,0CH,06H,0FFH,0FFH,06H,0CH,18HDOWN DB 18H,30H,60H,0FFH,0FFH,60H,30H,18HSTOP DB 00H,18H,18H,18H,18H,18H,18H,00HSEVLED DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10HSIGN_BUF DB(0)UP
9、_BUF DB 10 DUP(0)DOWN_BUF DB 10 DUP(0)MESG1 DB THE NUMBER IS ERROR,0DH,0AH,$INTOA_OFF DW(?)INTOA_SEG DW(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV DX,DATAMOV DS,DXMOV DX,SSEGMOV SS,DX MOV AH,09H MOV DX,OFFSET MESG2 INT 21H ;显示提示信息 ;初始化8255MOV DX,303HMOV AL,10000000BOUT DX,ALMOV DX,300HMO
10、V AL,00HOUT DX,ALMOV DX,301HMOV AL,00HOUT DX,ALMOV DX,302HMOV AL,0FFHOUT DX,AL;中断的设置MOV AX,3572HINT 21HMOV INTOA_OFF,BXMOV BX,ESMOV INTOA_SEG,BXCLIMOV AX,2572HMOV DX,SEG LEDLIGHTPUSH DSMOV DS,DXMOV DX,OFFSET LEDLIGHTINT 21HPOP DSSTI;打开IRQ10和IRQ2IN AL,0A1HAND AL,0FBHOUT 0A1H,ALIN AL,21HAND AL,0FBHOUT
11、 21H,AL;8253初始化产生1S的计时MOV DX,307HMOV AL,01110110BOUT DX,ALMOV DX,305HMOV AL,0E8HOUT DX,ALMOV AL,03HOUT DX,ALMOV DX,307HMOV AL,10110110BOUT DX,ALMOV DX,306HMOV AL,0E8HOUT DX,ALMOV AL,03HOUT DX,ALINPUT:CALL FAR PTR MATRIX_SHOWCALL FAR PTR DIGITRON_SHOW MOV AH,0BHINT 21HCMP AL,00HJZ INPUTMOV AH,00HINT
12、16HCMP AL,0DHJZ NEXT0;若没有输入为回车,进入运行状态CMP AL,1BHJNZ NEXT;若输入ESC则退出程序JMP EXITNEXT:CMP AH,48HJZ M_UPCMP AH,50HJZ M_DOWNJMP INPUTERRORM_UP:MOV AH,01HINT 21HCMP AL,0JB INPUTERRORCMP AL,9JA INPUTERRORSUB AL,30HMOV AH,00HMOV SI,AXMOV UP_BUFSI,01HJMP INPUTM_DOWN:MOV AH,01HINT 21HCMP AL,0JB INPUTERRORCMP AL,
13、9JA INPUTERRORSUB AL,30HMOV AH,00HMOV SI,AXMOV AX,0009HSUB AX,SIMOV SI,AXMOV DOWN_BUFSI,01HJMP INPUTNEXT0:CALL FAR PTR MATRIX_SHOWCALL FAR PTR DIGITRON_SHOWCMP SIGN_BUF,14HJZ REPEATCMP TIMECOUNT,02HJBE NEXT0MOV TIMECOUNT,00HCALL FAR PTR RUNJMP NEXT0REPEAT:MOV SIGN_BUF,00HMOV AL,NEXT_FLOORMOV NOW_FLO
14、OR,ALMOV STATE,00HJMP INPUTINPUTERROR:MOV AH,09HMOV DX,OFFSET MESG1INT 21HJMP INPUTEXIT:MOV AX,2572HMOV DX,INTOA_SEGPUSH DSMOV DS,DXMOV DX,INTOA_OFFINT 21HPOP DSIN AL,0A1HOR AL,04HOUT 0A1H,ALIN AL,21HOR AL,04HOUT 21H,ALMOV AH,4CHINT 21H;电梯状态与运行程序RUN PROC FARPUSH AXPUSH BXPUSH SIMOV AL,NEXT_FLOORCMP
15、AL,NOW_FLOORJA RUPCMP AL,NOW_FLOORJB RDOWNMOV AL,SIGNMOV STATE,ALMOV AH,00HMOV BX,OFFSET UP_BUFR0:MOV AL,SIGN_BUFMOV SI,AXCMP BYTE PTRBX+SI,01HJZ R1INC SIGN_BUFCMP SIGN_BUF,14HJNZ R0JMP RBACKR1:MOV BYTE PTRBX+SI,00HCMP SIGN_BUF,09HJA R2MOV AL,SIGN_BUFMOV NEXT_FLOOR,ALJMP RBACKR2:MOV STATE,02HMOV AL,
16、SIGN_BUFSUB AL,0AHMOV AH,09HSUB AH,ALMOV NEXT_FLOOR,AHJMP RBACKRUP:ADD NOW_FLOOR,01HMOV STATE,01HMOV SIGN,01HMOV AL,NOW_FLOORCMP AL,NEXT_FLOORJZ R3JMP RBACKRDOWN:SUB NOW_FLOOR,01HMOV STATE,02HMOV SIGN,02HMOV AL,NOW_FLOORCMP AL,NEXT_FLOORJZ R3JMP RBACKR3:MOV STATE,00HJMP RBACKRBACK:POP SIPOP BXPOP AX
17、RETRUN ENDP;点阵显示程序MATRIX_SHOW PROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SICMP STATE,00HJZ MSTOPCMP STATE,02HJZ MDOWNMOV BX,OFFSET UPMOV CL,00001000BJMP MRUNMSTOP:MOV BX,OFFSET STOPMOV CL,00010000BJMP MRUNMDOWN:MOV BX,OFFSET DOWNMOV CL,00001000BMRUN:MOV SI,0000HMLP:MOV DX,300HMOV AL,BX+SIOUT DX,ALMOV
18、DX,301HMOV AL,CLOUT DX,ALINC SIINC CLCALL FAR PTR DELAYCMP SI,0008HJNZ MLPPOP SIPOP DXPOP CXPOP BXPOP AXRETMATRIX_SHOW ENDP;7数码管显示程序DIGITRON_SHOW PROC FARPUSH AXPUSH DXPUSH SIMOV DX,302HMOV AH,0000HMOV AL,NOW_FLOORMOV SI,AXMOV AL,SEVLEDSIOUT DX,ALPOP SIPOP DXPOP AXRET ENDP;延迟程序DELAY PROC FARPUSH CXP
19、USH BXMOV BX,0FFHDLP2:MOV CX,0FFFHDLP1:LOOP DLP1DEC BXJNZ DLP2POP BXPOP CXRETDELAY ENDP;中断服务程序LEDLIGHT PROC FARPUSH AXPUSH DXCLIADD TIMECOUNT,01HIBACK:;发出EOI命令MOV AL,62HMOV DX,0A0HOUT DX,ALOUT 020H,ALSTIPOP DXPOP AXIRETLEDLIGHT ENDPCODE ENDSEND START十 课设截图十一 课设总结首先刚刚拿到这个课设题目时我一下子懵了,不知道程序怎么写。我的小伙伴桂蓉也
20、是,我们两就在网上搜集了一些资料,然后相互讨论。我主要负责写程序,她主要负责连线。当我们拿到实验箱之后我们就开始积极分工互助合作。连线比较麻烦特别是要仔细,不能出错。很快我们摸清了连线的套路,实验箱上的带有绿线的一竖条是联通的,接地。带有红线的一条是联通,接VCC(+5v)。每一个块的一横条是联通的,芯片跨越在两个横块之间。我们开始布局芯片的位置,布局完了就开始连线。我们两一起对照着每个芯片的引脚图开始连线,经过两个多小时的奋斗,线终于连好了。于是我们开始调试程序,当我们开始测8255时,没有任何反应,于是我们又仔细检查连线,果然reset接口没有接。当我们接好之后再次测量终于成功接好了。关于
21、硬件调试我们弄了好几天,我的小伙伴桂蓉主要负责连线。我主要写程序和调试,说到写程序,开始的时候我纠结了好久,不知道到底用c语言编还是用汇编语言编,毕竟c语言我熟一些,汇编只是刚刚接触。可是毕竟我们学微机原理真门课主要讲的还是汇编,因此我想锻炼一下自己,果断用汇编语言写。当然开始存在很多问题,比如说不知道中断如何使用,不知道如何输出3秒和5秒的时间间隔,另外我也对汇编里面的语法不是很熟,上课老师讲的很清楚,可是现在我忘记了一些。面对如此多的问题,这时候,我翻开书本上的汇编语言程序设计那一章。我看了书上很多例子,我渐渐明白了软中断的各个用法,现在摆在我面前的是如何用这些软中断,以及8253输出的一
22、秒中断怎么使用。大致思路我都懂,就是不知道如何调用这些中断。我又翻开中断那一章以及我们做的实验9(8259),我明白了中断的具体用法,现在我开始我的编程了!,首先有一个数据段,里面要放很多东西,定义一个变量存放当前的楼层,定义一个数组存放输入的楼层,定义一个堆栈保护现场。再我的不懈努力下,终于程序写完了。可是正当我准备调试的时候,我发现我的实验箱上的8253运行不了,然后我和我的小伙伴桂蓉仔细检查连线,我们同时也拿来万用表测量,最后我们确定是8253出了问题 ,于是我们们换掉了8253,果然,这次成功了,可是我写的程序却运行不了,执行起来没有错误,可是不出结果,这最让人脑壳疼。我又静下心来仔细
23、检查我的程序,发现了一些逻辑上的错误,中断程序在执行的过程中,当调用点阵显示的子程序时,陷入了死循环当中不能出看来,当下一个中断信号来临时,所需要的子程序无法继续执行,陷入了忙等状态。这时候,我又在网上查询了一些中断程序的写法,真的。我做出来,可是点阵码有点乱,向上箭头和向下箭头不是很完美,我又仔细检查连线,原来有两根线没有按顺序连好。当一切ok了之后,终于程序正常的运行了。我和我的小伙伴都非常开心,尽管我们不是前几个做出来,可是这连线,这写程序让我学到了很多。在此,我想说经过这个课设,我真的学到了很多东西,第一:耐心,我和我的小伙伴都重连了好几次线,这确实要耐心,开始我有点烦躁,幸好我的小伙伴及时安慰我,她很相信我能解决一些难题,我也很相信她能把线连的perfect!第二:合作,我和我的小伙伴都学会了如何分工合作,现在她把连线记得相当熟练,我把程序也理解的相当透彻,我们两在一起分工合作真的很有效!第三:动手能力大大提高,我和我的小伙伴在连线的过程中,不断地剪线,插线,确实很大程度上锻炼了自己!第四:对微机原理这门课程又得到了相当大的了解,对寄存器,存储器,以及寻址方式等理解的更透彻!也相当于复习了这次微机原理的期末考试!总之,收益匪浅啊,感谢老师给了我这么好一次锻炼自己的机会!指导老师意见:成绩 教师签名