带数码管显示的交通灯模拟控制系统设计.docx
《带数码管显示的交通灯模拟控制系统设计.docx》由会员分享,可在线阅读,更多相关《带数码管显示的交通灯模拟控制系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
![带数码管显示的交通灯模拟控制系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/6/60ce0027-204f-4ee1-94e0-b751dd59a12a/60ce0027-204f-4ee1-94e0-b751dd59a12a1.gif)
带数码管显示的交通灯模拟控制系统设计
成绩
南京工程学院
课程设计说明书(论文)
题目带数码管显示的交通灯模拟控制系统设计
课程名称微机原理及应用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
一、设计说明
硬件方面:
8253产生1HZ的方波,脉冲到8259的IR1端,产生中断,调中断服务子程序。
在加入紧急车道后,单脉冲()连到8259的IRO端,产生一个高级的中断请求信号。
软件方面:
主程序先对各个硬件初始化,在开CPU中断,然后空操作,等待中断。
执行低级中断(IR1)时,8255的PA口负责选数码管,PB口负责显示数字,用查表法可查到0~9的数码管编码。
采用循环扫描方法,人眼即可看到连续的二位数。
当倒计时减到零时,对红绿灯取反。
若手动上下拨动单脉冲()一次,则产生一个高级中断(IR0),程序转而执行此中断处理程序,处理完后返回继续执行低级中断(IR1)。
1、硬件设计
1.1、硬件接线图
1.2连线说明:
C5区:
CS、A0、A1
————
A3区:
CS3、A0、A1
C5区:
OUT0
————
B3区:
CLK1
C5区:
GATE0、GATE1
————
C1区:
VCC
C5区:
CLK0
————
B2区:
2M
C5区:
OUT1
————
B3区:
IR1
B3区:
CS、A0
————
A3区:
CS2、A0
B3区:
INT、INTA
————
ES8688:
INTR、INTA
B3区:
IR0
————
B2区:
单脉冲(
)
B4区:
CS、A0、A1
————
A3区:
CS1、A0、A1
B4区:
PA口、PB口
————
G5区:
C口、B口
B4区:
PC口
————
G6区:
JP65(LED灯)
2、软件设计
1、程序流程图
二.源程序清单
IO8259_0EQU0E000H;8259地址偶地址端
IO8259_1EQU0E001H;8259地址奇地址端
K8255AEQU0F000H;8255的A口、B口、C口地址
K8255BEQU0F001H
K8255CEQU0F002H
K8255KEQU0F003H
ADD8253_0EQU0D000H;8253计数通道1#、2#、3#和控制口地址
ADD8253_1EQU0D001H
ADD8253_2EQU0D002H
ADD8253_CEQU0D003H
COUNTEREQU60H;倒计时数
RED_ONEQU0CCH;红灯亮
RED_OFFEQU0FFH;红灯灭
E_WEQU0C3H;东西方向通行
DATASEGMENT
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
COUNTDB?
SCANDW485;扫描次数
DATAENDS
STCKSEGMENTSTACK
DW64DUP(?
)
STCKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STCK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
NOP
MOVDX,K8255K;写8255控制字,A,B,C均为输出,方式0
MOVAL,80H
OUTDX,AL
START1:
MOVDX,K8255C;C口输出,控制灯
MOVCX,4
FLASH:
MOVAL,RED_ON;红灯亮
OUTDX,AL
CALLDELAY;调延时
MOVAL,RED_OFF;红灯灭
OUTDX,AL
CALLDELAY
LOOPFLASH
START2:
MOVDX,ADD8253_C;写8253控制字
MOVAL,37H;0#计数器,读写16位低高字节,方式三,BCD码
OUTDX,AL
MOVAX,1000H;写0#的计数初值1000H,根据输入设定2M=1000H*2000
MOVDX,ADD8253_0
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,ADD8253_C;写8253控制字
MOVAL,77H;1#计数器,读写16位低高字节,方式三,BCD码
OUTDX,AL
MOVAX,2000H;写1#计数初值2000H,根据输入设定,方波频率1HZ
MOVDX,ADD8253_1
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVCOUNT,COUNTER;写计数值(红绿灯变换的间隔时间)
CALLInit8259;调8259初始化子程序
CALLWriIntver_8;调写中断向量表子程序
CALLWriIntver_9;调写中断向量表子程序
MOVCL,E_W
MOVAL,CL
MOVDX,K8255C
OUTDX,AL
STI
NOP
START3:
JMP$;给出中断以外CPU的工作
Init8259PROCNEAR;8259初始化子程序
MOVDX,IO8259_0;写ICW1,边沿触发,单片,需写ICW4
MOVAL,13H
OUTDX,AL
MOVDX,IO8259_1;写ICW2,确定中断类型号
MOVAL,08H
OUTDX,AL
MOVAL,09H;写ICW4
OUTDX,AL
MOVAL,0FCH;写OCW1,除IR0、IR1全屏蔽
OUTDX,AL
RET
Init8259ENDP
WriIntver_9PROCNEAR;写中断向量表子程序
PUSHES
MOVAX,0
MOVES,AX
MOVDI,24H;中断类型号9,对应24H,25H,26H,27H四个单元
LEAAX,INT_9;取中断服务程序IP
STOSW
MOVAX,CS;取中段服务程序CS
STOSW
POPES
RET
WriIntver_9ENDP
WriIntver_8PROCNEAR;写中断向量表子程序
PUSHES
MOVAX,0
MOVES,AX
MOVDI,20H;中断类型号8,对应20H,21H,22H,23H四个单元
LEAAX,INT_8;取中断服务程序IP
STOSW
MOVAX,CS;取中段服务程序CS
STOSW
POPES
RET
WriIntver_8ENDP
INT_9:
MOVAL,COUNT
SUBAL,01H
DAS
MOVCOUNT,AL;中断服务程序
PUSHAX
PUSHDX
PUSHBX
PUSHCX
PUSHSCAN;保护循环值,否则取数码管显示会破坏
LOO:
MOVAL,55H
MOVDX,K8255A
OUTDX,AL
MOVAL,COUNT;选高位数码管
MOVAH,AL;暂存AH
MOVCL,4
SHRAL,CL
LEABX,TAB
XLAT;十进制转数码管编码
MOVDX,K8255B
OUTDX,AL;显数
CALLDL1ms;调延时
MOVAL,0
OUTDX,AL;清除
MOVAL,0AAH
MOVDX,K8255A
OUTDX,AL;选低位数码管
MOVAL,AH
SHLAL,CL
SHRAL,CL
XLAT;十进制转数码管编码
MOVDX,K8255B
OUTDX,AL;显数
CALLDL1ms
MOVAL,0
OUTDX,AL;清除
DECSCAN
CMPSCAN,0
JNZLOO;循环扫描
POPSCAN
POPCX
CMPCOUNT,0
JNZSTOP;计数到零则重新置数,并将灯取反,未到零则直接结束中断子程序
MOVCOUNT,COUNTER
NOTCL
MOVAL,CL
MOVDX,K8255C
OUTDX,AL
STOP:
MOVDX,IO8259_0;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零
MOVAL,20H
OUTDX,AL
POPBX
POPDX
POPAX
IRET
INT_8:
PUSHDX
PUSHAX
PUSHCX
MOVDX,K8255C;C口输出,控制灯
MOVCX,4
A:
MOVAL,RED_ON;红灯亮
OUTDX,AL
CALLDELAY;调延时
MOVAL,RED_OFF;红灯灭
OUTDX,AL
CALLDELAY
LOOPA
MOVDX,IO8259_0;结束中断服务,写OCW2,给8259送EOI命令,LSR1清零
MOVAL,20H
OUTDX,AL
POPCX
MOVDX,K8255C
MOVAL,CL
OUTDX,AL
POPAX
POPDX
IRET
DELAYPROC;延时子程序
PUSHBX
PUSHCX
MOVBX,04H
DELAY1:
MOVCX,0FFFFH
LOOP$
DECBX
JNZDELAY1
POPCX
POPBX
RET
DELAYENDP
DL1msPROCNEAR
PUSHAX
PUSHCX
MOVAX,0100H
MOVCX,AX
LOOP$
POPCX
POPAX
RET
DL1msENDP
CODEENDS
ENDSTART
三、调试现象
1、程序截图
2调试现象
程序调试时,交通信号灯系统初始状态为所有红灯闪烁4次,数码管此时不显示;系统初始状态之后东西向车行道绿灯亮,南北向车道红灯亮,此时数码管从60秒倒计时;当数码管数字减为0时,东西向、南北向红绿灯交换亮,即南北向车行道绿灯亮,东西向车道红灯亮,此时数码管重新从60秒开始计数,数码管数字减为0秒后,红绿灯再次交换,如此循环重复。
当道路发生紧急状况时,可拨单脉冲,使调试状态重新进入初始化,此时数码管停止计时(灭),初始化状态结束后,继续从刚刚被停止时刻开始计时,红绿灯状态仍为停止时刻的状态。
四、心得体会
一个星期的微机原理课程设计终于结束了。
在整整一星期的日子里,可以说得是苦尽甘来,从刚开始的完全迷惑到最后的豁然开朗,真是经历了很多,但是却让我们学到很多的东西,不仅可以巩固了课上所学过的理论知识,而且学到了很多在书本上所没有学到过的知识。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图画出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问:
调试程序时,发现只有初始化状态显示,知道了中断程序进不去,就开始查中断程序,最后查出原来是没写STI等待中断,所以中断才进不去。
在检查错误的过程中发现会自己的不足之处,发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固,同时对知识的理解和接受能力还不是太强。
这次课程设计任务终于顺利完成了,在设计中遇到了很多问题,最后在自己的努力下以及与同学之间和老师的探讨下,终于一个一个得解决了问题,当看到数码管和二极管按照自己编写的程序显示的时候,心情异常兴奋,好有成就感。
这次课程设计在培养我们编程能力的同时,也让我学会了要完成一项任务,除了需要过硬的技术和能力之外,还要有不屈不挠的精神,有些同学就是没有耐心做下去,才没有好好的完成任务。
所以,感谢我们的指导老师,谢谢!
五、参考文献
1、星研公司.StarES8688使用说明书。
2、李继灿.新编16/32位微型计算机原理及应用(第4版).北京:
清华大学出版社。
3、周荷琴,吴秀清.微型计算机原理与接口技术.合肥:
中国科学技术大学出版社。