1、带数码管显示的交通灯模拟控制系统设计成绩 南京工程学院课程设计说明书(论文)题 目 带数码管显示的交通灯模拟控制系统设计 课 程 名 称 微机原理及应用A 院 系 能源与动力工程 专 业 热能与动力工程(生产过程自动化)班 级 热自101 学 生 姓 名 黄郑 学 号 * 设 计 地 点 工程实践中心8-216 指 导 教 师 陆京、徐懂理 设计起止时间:2012年12月3日至2012年12月7日 一、方案说明 2 1、硬件设计 2 1.1、硬件接线图 2 1.2、主机接线说明3 2、软件设计 3 2.1、程序流程图 4 二.源程序清单 5三、调试现象 10四、心得体会 12五、参考文献 13
2、一、设计说明硬件方面:8253产生1HZ的方波,脉冲到8259的IR1端,产生中断,调中断服务子程序。在加入紧急车道后,单脉冲()连到8259的IRO端,产生一个高级的中断请求信号。软件方面:主程序先对各个硬件初始化,在开CPU中断,然后空操作,等待中断。执行低级中断(IR1)时,8255的PA口负责选数码管,PB口负责显示数字,用查表法可查到09的数码管编码。采用循环扫描方法,人眼即可看到连续的二位数。当倒计时减到零时,对红绿灯取反。若手动上下拨动单脉冲()一次,则产生一个高级中断(IR0),程序转而执行此中断处理程序,处理完后返回继续执行低级中断(IR1)。1、硬件设计 1.1、硬件接线图
3、1.2连线说明:C5区:CS、A0、A1A3区:CS3、A0、A1C5区:OUT0B3区:CLK1C5区:GATE0、GATE1C1区:VCCC5区:CLK0B2区:2MC5区:OUT1B3区:IR1B3区:CS、A0A3区:CS2、A0 B3区:INT、INTAES8688:INTR、INTAB3区:IR0B2区:单脉冲() B4区:CS、A0、A1A3区:CS1、A0、A1 B4区:PA口、PB口G5区:C口、B口B4区:PC口 G6区:JP65(LED灯)2、软件设计1、程序流程图二.源程序清单IO8259_0 EQU 0E000H ;8259地址偶地址端IO8259_1 EQU 0E0
4、01H ;8259地址奇地址端 K8255A EQU 0F000H ;8255的A口、B口、C口地址K8255B EQU 0F001HK8255C EQU 0F002HK8255K EQU 0F003HADD8253_0 EQU 0D000H ;8253计数通道1#、2#、3#和控制口地址ADD8253_1 EQU 0D001HADD8253_2 EQU 0D002HADD8253_C EQU 0D003HCOUNTER EQU 60H ;倒计时数RED_ON EQU 0CCH ;红灯亮RED_OFF EQU 0FFH ;红灯灭E_W EQU 0C3H ;东西方向通行DATA SEGMENTT
5、AB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHCOUNT DB ?SCAN DW 485 ;扫描次数DATA ENDSSTCK SEGMENT STACK DW 64 DUP(?)STCK ENDSCODE SEGMENT ASSUME CS:CODE , DS:DATA,SS:STCKSTART:MOV AX,DATA MOV DS,AX MOV ES,AX NOP MOV DX,K8255K ;写8255控制字,A,B,C均为输出,方式0 MOV AL,80H OUT DX,ALSTART1: MOV DX,K8255C ;C口输出,控制灯 MO
6、V CX,4FLASH: MOV AL,RED_ON ;红灯亮 OUT DX,AL CALL DELAY ;调延时 MOV AL,RED_OFF ;红灯灭 OUT DX,AL CALL DELAY LOOP FLASH START2: MOV DX,ADD8253_C ;写8253控制字 MOV AL,37H ;0#计数器,读写16位低高字节,方式三,BCD码 OUT DX,AL MOV AX,1000H ;写0#的计数初值1000H,根据输入设定2M=1000H*2000 MOV DX,ADD8253_0 OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,ADD825
7、3_C ;写8253控制字 MOV AL,77H ;1#计数器,读写16位低高字节,方式三,BCD码 OUT DX,AL MOV AX,2000H ;写1#计数初值2000H,根据输入设定,方波频率1HZ MOV DX,ADD8253_1 OUT DX,AL MOV AL,AH OUT DX,AL MOV COUNT,COUNTER ;写计数值(红绿灯变换的间隔时间) CALL Init8259 ;调8259初始化子程序 CALL WriIntver_8 ;调写中断向量表子程序 CALL WriIntver_9 ;调写中断向量表子程序 MOV CL,E_W MOV AL,CL MOV DX,K
8、8255C OUT DX,AL STI NOPSTART3: JMP $ ;给出中断以外CPU的工作Init8259 PROC NEAR ;8259初始化子程序 MOV DX,IO8259_0 ;写ICW1,边沿触发,单片,需写ICW4 MOV AL,13H OUT DX,AL MOV DX,IO8259_1 ;写ICW2,确定中断类型号 MOV AL,08H OUT DX,AL MOV AL,09H ;写ICW4 OUT DX,AL MOV AL,0FCH ;写OCW1,除IR0、IR1全屏蔽 OUT DX,AL RETInit8259 ENDPWriIntver_9 PROC NEAR ;
9、写中断向量表子程序 PUSH ES MOV AX,0 MOV ES,AX MOV DI,24H ;中断类型号9,对应24H,25H,26H,27H四个单元 LEA AX,INT_9 ;取中断服务程序IP STOSW MOV AX,CS ;取中段服务程序CS STOSW POP ES RETWriIntver_9 ENDPWriIntver_8 PROC NEAR ;写中断向量表子程序 PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H ;中断类型号8,对应20H,21H,22H,23H四个单元 LEA AX,INT_8 ;取中断服务程序IP STOSW MOV AX,C
10、S ;取中段服务程序CS STOSW POP ES RETWriIntver_8 ENDPINT_9:MOV AL,COUNT SUB AL,01H DAS MOV COUNT,AL ;中断服务程序 PUSH AX PUSH DX PUSH BX PUSH CX PUSH SCAN ;保护循环值,否则取数码管显示会破坏LOO: MOV AL,55H MOV DX, K8255A OUT DX,AL MOV AL,COUNT ;选高位数码管 MOV AH,AL ;暂存AH MOV CL,4 SHR AL,CL LEA BX,TAB XLAT ;十进制转数码管编码 MOV DX, K8255B O
11、UT DX,AL ;显数 CALL DL1ms ;调延时 MOV AL,0 OUT DX,AL ;清除 MOV AL,0AAH MOV DX, K8255A OUT DX,AL ;选低位数码管 MOV AL,AH SHL AL,CL SHR AL,CL XLAT ;十进制转数码管编码 MOV DX, K8255B OUT DX,AL ;显数 CALL DL1ms MOV AL,0 OUT DX,AL ;清除 DEC SCAN CMP SCAN,0 JNZ LOO ;循环扫描 POP SCAN POP CX CMP COUNT,0 JNZ STOP ;计数到零则重新置数,并将灯取反,未到零则直接
12、结束中断子程序 MOV COUNT,COUNTER NOT CL MOV AL,CL MOV DX,K8255C OUT DX,ALSTOP: MOV DX,IO8259_0 ;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零 MOV AL,20H OUT DX,AL POP BX POP DX POP AX IRETINT_8:PUSH DX PUSH AX PUSH CX MOV DX,K8255C ;C口输出,控制灯 MOV CX,4A: MOV AL,RED_ON ;红灯亮 OUT DX,AL CALL DELAY ;调延时 MOV AL,RED_OFF ;红灯灭 OUT
13、 DX,AL CALL DELAY LOOP A MOV DX,IO8259_0 ;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零 MOV AL,20H OUT DX,AL POP CX MOV DX,K8255C MOV AL,CL OUT DX,AL POP AX POP DX IRETDELAY PROC;延时子程序 PUSH BX PUSH CX MOV BX,04HDELAY1:MOV CX,0FFFFH LOOP $ DEC BX JNZ DELAY1 POP CX POP BX RET DELAY ENDP DL1ms PROC NEAR PUSH AX PUSH
14、 CX MOV AX,0100H MOV CX,AX LOOP $ POP CX POP AX RETDL1ms ENDPCODE ENDS END START 三、调试现象1、程序截图 2调试现象程序调试时,交通信号灯系统初始状态为所有红灯闪烁4次,数码管此时不显示;系统初始状态之后东西向车行道绿灯亮,南北向车道红灯亮,此时数码管从60秒倒计时;当数码管数字减为0时,东西向、南北向红绿灯交换亮,即南北向车行道绿灯亮,东西向车道红灯亮,此时数码管重新从60秒开始计数,数码管数字减为0秒后,红绿灯再次交换,如此循环重复。当道路发生紧急状况时,可拨单脉冲,使调试状态重新进入初始化,此时数码管停止计
15、时(灭),初始化状态结束后,继续从刚刚被停止时刻开始计时,红绿灯状态仍为停止时刻的状态。四、心得体会一个星期的微机原理课程设计终于结束了。在整整一星期的日子里,可以说得是苦尽甘来,从刚开始的完全迷惑到最后的豁然开朗,真是经历了很多,但是却让我们学到很多的东西,不仅可以巩固了课上所学过的理论知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图画出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完
16、成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问:调试程序时,发现只有初始化状态显示,知道了中断程序进不去,就开始查中断程序,最后查出原来是没写STI等待中断,所以中断才进不去。在检查错误的过程中发现会自己的不足之处,发现自己
17、对以前所学过的知识理解得不够深刻,掌握得不够牢固,同时对知识的理解和接受能力还不是太强。这次课程设计任务终于顺利完成了,在设计中遇到了很多问题,最后在自己的努力下以及与同学之间和老师的探讨下,终于一个一个得解决了问题,当看到数码管和二极管按照自己编写的程序显示的时候,心情异常兴奋,好有成就感。这次课程设计在培养我们编程能力的同时,也让我学会了要完成一项任务,除了需要过硬的技术和能力之外,还要有不屈不挠的精神,有些同学就是没有耐心做下去,才没有好好的完成任务。所以,感谢我们的指导老师,谢谢!五、参考文献1、星研公司. Star ES8688使用说明书。2、李继灿.新编16/32位微型计算机原理及应用(第4版).北京:清华大学出版社。3、周荷琴,吴秀清.微型计算机原理与接口技术.合肥:中国科学技术大学出版社。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1