微机原理课程设计交通灯.docx
《微机原理课程设计交通灯.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计交通灯.docx(16页珍藏版)》请在冰豆网上搜索。
![微机原理课程设计交通灯.docx](https://file1.bdocx.com/fileroot1/2023-2/1/25c79118-ecf1-4b2f-be35-070dd5d0f382/25c79118-ecf1-4b2f-be35-070dd5d0f3821.gif)
微机原理课程设计交通灯
沈阳航空航天大学
课程设计报告
课程设计名称:
微机系统综合课程设计
课程设计题目:
带数字显示的交通灯
目录
第1章总体设计方案1
1.1课程设计的内容和要求1
1.2课程设计原理1
1.3课程设计思路2
第2章详细设计方案3
2.1实现方法3
2.2模块设计4
2.2.1主程序流程图________________________________________________4
2.2.2中断程序流程图______________________________________________5
2.3程序连线图6
第3章调试及结果分析7
3.1调试步骤及方法7
3.2实验结果7
参考文献8
附录(源程序)9
第1章总体设计方案
1.1课程设计的内容和要求
一、课程设计内容:
1.通过调研,了解交通灯的工作过程;
2.用实验箱中的数码管和红绿发光二极管实现带数字显示的交通灯;
3.两个数码管显示干线等待时间,另两个数码管显示支线等待时间;
4.干线等待时间为30S,支线等待时间为60S。
二、课程设计要求:
1.认真查阅相关资料;
2.独立设计、调试并通过知道教师现场验收;
3.撰写课程设计报告。
1.2课程设计原理
根据课设题目的要求,按照时间控制原则,利用8255A并行接口原则和8253定时器原则,采用8259时间中断方式和8279数码管显示设计一套十字路口交通灯管理系统,干线通行时间(或支线禁止时间)60秒,支线通行时间(或干线禁止时间)30秒,周而复始。
1.3课程设计思路
定时模块是为8259提供中断请求信号的。
由一片8253实现,选用定时器0#,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号。
中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间减少一秒,从而达到动态显示的效果。
显示模块是由一块8255A芯片与LED红绿显示灯组成,由8255A来接收信号,从而控制红绿灯亮灭的时间,实现交通灯控制。
计时模块是由8279实现的,通过计时器和中断同时控制实现数码管显示。
第2章详细设计方案
2.1实现方法
本程序由主程序、定时中断子程序和外部中断子程序组成。
主程序主要负责系统初始化和等待中断。
定时中断子程序主要负责数码管显示刷新和红绿灯各种状态切换。
8253计数的起由8255的PA0控制,8255的PA0输出1时,8253开始计数,通过8279显示在数码管上,交通灯按正常状态切换工作,PA0输出0时,计数器停止工作,交通灯不再按正常状态切换。
8253开始计数后每1s发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。
2.2模块设计
2.2.1主程序流程图
图2.1主程序流程图
2.2.2中断程序流程图
图2.2中断程序流程图
2.3程序连线图
图2.3程序连线图
第3章调试及结果分析
3.1调试步骤及方法
程序编好输入进电脑,将AEDK实验箱的硬件连接好,再进行调试,分步进行调试,看看每部分是否完善,再进行改错,主要检查中断是否产生,所有模块都能正常工作为止,全速运行得出想要的结果。
3.2实验结果
全速运行下,数码管上显示是60和00,LED灯显示是东西是红色的,南北是绿色的,并且60是递减变化,每次减1操作,当变为00时,红灯变绿灯,绿灯变红灯,这时00变成30,继续递减操作,每次减1,直到变成00为止,红绿灯也变为相反,周而复始。
参考文献
[1]龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2003
[2]沈美明,温冬蝉.IBM-PC汇编语言程序设计[M].北京:
清华大学出版社,2001
[3]郑初华.汇编语言、微机原理及接口技术[M].北京:
电子工业出版社,2006
[4]王忠民.微型计算机原理[M].西安:
西安电子科技大学出版社,2003
附录(源程序)
C8279EQU22AH
D8279EQU228H
C82590EQU220H
C82591EQU221H
STACKSEGMENT
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
MAIN:
JMPAA
tabDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0~9
NUMDB03H,05H,01H,02H,02H,07H,01H,09H
OLDKEYDB00H
FLAGDB00H
NOWDB00H
TIMEDB8DUP(0)
AA:
MOVAX,CS
MOVDS,AX
CLI
CALLINIT8255
CALLINIT8259
CALLINIT8253
CALLi8279
PUSHDI
LEADI,TIME
MOVBYTEPTR[DI+7],0
MOVBYTEPTR[DI+6],3
MOVBYTEPTR[DI+5],0
MOVBYTEPTR[DI+4],0
MOVBYTEPTR[DI+3],0
MOVBYTEPTR[DI+2],0
MOVBYTEPTR[DI+1],0
MOVBYTEPTR[DI],0
POPDI
CALLDIS_TIME
STI
JMP$
i8279:
MOVDX,C8279
MOVAL,0
OUTDX,AL
MOVAL,38H
OUTDX,AL
RET
INIT8255:
MOVAL,82H
MOVDX,213H
OUTDX,AL
MOVDX,210H
MOVAL,0FFH
OUTDX,AL
RET
INIT8259:
MOVAL,13H
MOVDX,220H
OUTDX,AL
MOVDX,221H
MOVAL,30H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVAL,0FEH;OCW1
OUTDX,AL
INAL,DX
MOVAX,0
MOVDS,AX
MOVSI,30H*4
MOVAX,OFFSETINTR0
MOV[SI],AX
MOVAX,CS
MOV[SI+2],AX
MOVAX,CS
movds,ax
RET
INIT8253:
MOVAL,36H
MOVDX,203H
OUTDX,AL
MOVAX,61440
MOVDX,200H
OUTDX,AL
MOVAL,AH
OUTDX,AL
RET
RUN_TIME:
PUSHAX
PUSHDX
PUSHCX
PUSHBX
PUSHDI
LEADI,TIME
CMPFLAG,1
JEZHUGAN
MOVBL,BYTEPTR[DI+7]
CMPBL,0
JEc7;有进位
DECBL;加百分之一秒
MOVBYTEPTR[DI+7],BL
JMPaddend0
c7:
MOVBYTEPTR[DI+7],9
MOVBL,BYTEPTR[DI+6]
CMPBL,0
JEc6
DECBL;有进位
MOVBYTEPTR[DI+6],BL
JMPaddend0
c6:
MOVBYTEPTR[DI+6],0
MOVBYTEPTR[DI+7],0
MOVFLAG,1
MOVBYTEPTR[DI+1],0
MOVBYTEPTR[DI],6
ZHUGAN:
MOVBL,BYTEPTR[DI+1]
CMPBL,0
JEc1;有进位
DECBL;加百分之一秒
MOVBYTEPTR[DI+1],BL
JMPaddend0
c1:
MOVBYTEPTR[DI+1],9
MOVBL,BYTEPTR[DI]
CMPBL,0
JEc0
DECBL;有进位
MOVBYTEPTR[DI],BL
JMPaddend0
c0:
MOVBYTEPTR[DI+1],0
MOVBYTEPTR[DI],0
MOVFLAG,0
MOVBYTEPTR[DI+7],0
MOVBYTEPTR[DI+6],3
addend0:
MOVAL,20H
MOVDX,C82590
OUTDX,AL
POPDI
POPBX
POPCX
POPDX
POPAX
RET
DIS_TIME:
PUSHDI
MOVAX,CS
MOVDS,AX;显示时间
LEABX,tab
MOVAL,90H
MOVDX,C8279
OUTDX,AL
MOVDX,D8279
LEADI,TIME
MOVAL,BYTEPTR[DI+7]
XLAT
OUTDX,AL
MOVAL,BYTEPTR[DI+6]
XLAT
OUTDX,AL
MOVAL,40H
OUTDX,AL
MOVAL,40H
OUTDX,AL
MOVAL,40H
OUTDX,AL
MOVAL,40H
OUTDX,AL
MOVAL,BYTEPTR[DI+1]
XLAT
OUTDX,AL
MOVAL,BYTEPTR[DI]
XLAT
OUTDX,AL
POPDI
RET
DIS_DENG:
CMPFLAG,1
JEDISZHUGAN
MOVAL,01H
MOVDX,210H
OUTDX,AL
JMPENDD
DISZHUGAN:
MOVAL,02H
MOVDX,210H
OUTDX,AL
ENDD:
NOP
RET
INTR0PROC
PUSHAX
PUSHDX
PUSHCX
PUSHBX
PUSHDI
CALLRUN_TIME
CALLDIS_TIME
CALLDIS_DENG
POPDI
POPBX
POPCX
POPDX
POPAX
IRET
CALLDIS_DENG
INTR0ENDP
CODEENDS
ENDMAIN
课程设计总结:
经过这次课程设计,我对汇编语言和各个接口芯片8259、8279、8253、8255有了进。
通过和同学的交流,开阔了自己的想法,通过使用更好的方法,程序更加高效。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。
因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有到的困惑,经过一番努力才得以解决。
整个课设过程中,我得到许多老师和同学的无私帮助和鼓励,这也是课设的另一个收获。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩