课程设计交通灯.docx
- 文档编号:14449733
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:18
- 大小:1.08MB
课程设计交通灯.docx
《课程设计交通灯.docx》由会员分享,可在线阅读,更多相关《课程设计交通灯.docx(18页珍藏版)》请在冰点文库上搜索。
课程设计交通灯
1.交通灯课程设计简介
1.1概述
交通灯设计课题简介
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,通常要么南北两方向绿灯各5秒;要么根据交通规律,东西方向5秒,时间控制都是固定的。
1.2设计要求及目的
目的:
通过实习进一步了解微型计算机的工作原理,熟悉微机基本输入、输出接口的组成及地址分析方法,了解各种接口芯片,熟悉试验机的软件与硬件系统的组成,掌握简单接口电路的设计原则,并完成有关接口程序的编制、运行和调试工作。
要求:
1)按照实习内容完成实习任务;
2)认真编写程序,并进行程序调试,在试验机上运行,完成接口程序的设计;
3)完成实验报告。
1.3设计思想
设计中使用了8088/8086和8255A可编程并行接口实现了,对南北、东西方向交通的分别计时、分别控制,设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。
1.交通灯采用红、黄、绿三色发光二极管构成交通灯亮灭规律;四个方向红灯亮(延时)南、北方向绿灯亮5秒;南、北方向绿灯灭,黄灯闪烁5秒;南、北方向红灯灭,东、西方向的绿灯亮5秒,黄灯闪烁5秒(延时),南、北方向绿灯亮5秒重复;
2.用数码管倒计时显示时间;
3.绘制电路原理图;
4.根据要求编程。
2.硬件电路介绍
2.18255并行接口芯片
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:
与CPU连接部分、与外设连接部分、控制部分。
2.28253可编程定时/计数接口芯片
intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)
8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
2.38086微处理器
Intel8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。
资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。
它提供64K8位元的输出输入(或32K16位元),以及固定的向量中断。
大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。
运算结果会储存在操作数中的一个寄存器。
Intel8086有四个内存区段(segment)寄存器,可以从索引寄存器来设定。
区段寄存器可以让CPU利用特殊的方式存取1MB内存。
8086把段地址左移4位然后把它加上偏移地址。
大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。
尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,,使在编程中使用指针(如C编程语言)变得困难。
它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。
更坏的是,这种方式产生要让内存扩充到大于1MB的困难。
而8086的寻址方式改变让内存扩充较有效率。
8086处理器的时钟频率介于4.77MHz(在原先的IBMPC频率)和10MHz之间。
8086没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。
2.4硬件连接
3.软件设计介绍
3.1十字路口交通灯状态转换表:
南北方向
东西方向
十六进制代码
红
绿
黄
红
绿
黄
0
0
1
0
0
0
1
0
22H
0
0
1
0
0
0
0
1
21H
0
0
0
1
0
1
0
0
14H
0
0
0
0
1
1
0
0
0CH
3.2主程序流程图:
3.4共阴数码管码表:
数字
0
1
2
3
4
编码
0x3F
0x06
0x5B
0x4F
0x66
数字
5
6
7
8
9
编码
0x6D
0x7D
0x07
0x7F
0x90
3.58259初始化说明
MOVAL,13H;写ICW1,需要ICW4、单片工作、边沿触发方式
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;写ICW2,设置中断向量号
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H;写ICW4,普通全嵌套方式、采用缓冲方式
OUTDX,AL
MOVAL,0F7H;写OCW1,只开IR3中断请求,其余屏蔽
OUTDX,AL
8253初始化说明
MOVDX,TCONTRO
MOVAL,10110100B;采用二进制计数方式,工作方式二,十六们计数,计数器二
OUTDX,AL
MOVDX,TCON2
MOVAL,0AH;计数初值为10,即1S中断一次
OUTDX,AL
MOVAL,00H
OUTDX,AL
8255初始化说明
MOVAL,80H;PA、PB、PC口都设定为输出工作方式
MOVDX,IOCONPT
OUTDX,AL
3.6具体代码及注释
CODESEGMENT
ASSUMECS:
CODE
INTPORT1EQU0020H;8259端口地址
INTPORT2EQU0021H;8259端口地址
INTQ3EQUINTREEUP3;8259IRQ3中断程序
CONTPORTEQU00DFH;8255控制地址
DATAPORTEQU00DEH;8279数据口
TCONTROEQU004BH;8253
TCON2EQU004AH
IOCONPTEQU0073H;所用芯片端口地址初始化
IOCPTEQU0072H
IOBPTEQU0071H;8255
DATA0EQU0580H
DATA1EQU0500H
DATA2EQU0508H
DATA3EQU0518H
DATA4EQU0520H
ORG1000H
START:
JMPTint1
Tint1:
CLI
MOVAX,0H
MOVDS,AX
MOVDX,CONTPORT;8279初始化及工作方式设定
MOVAL,00H
OUTDX,AL
MOVAL,2AH
OUTDX,AL
MOVAL,0d0h
OUTDX,AL
MOVAL,90h
OUTDX,AL
MOVAL,80H;8255初始化设定
MOVDX,IOCONPT;PA、PB、PC口都设定为输出工作方式
OUTDX,AL
MOVDX,TCONTRO;8253初始化及工作方式的设定
MOVAL,10110100B;采用二进制计数方式,工作方式二,十六进制,计数器2
OUTDX,AL
MOVDX,TCON2
MOVAL,0AH;计数初值为10,即0.1s×10=1s中断一次
OUTDX,AL
MOVAL,00H
OUTDX,AL
CALLFORMAT;调用FORMAT子程序建显示模型库
CLI
MOVDI,DATA0
MOVCX,08H
XORAX,AX
REPSTOSW
MOVSI,DATA3
CALLLEDDISP;数码管显示初始图案“-------”
MOVAX,0H
MOVDS,AX
CALLWRINTVER;调用子程序WRINTVER,设置中断地址向量表
MOVAL,13H;8259初始化及工作方式的设定
MOVDX,INTPORT1;写ICW1,需要ICW4,单片工作,边沿触发方式
OUTDX,AL
MOVAL,08H
MOVDX,INTPORT2;写ICW2,设置中断向量号
OUTDX,AL
MOVAL,09H;写ICW4,普通全嵌套方式、采用缓冲方式
OUTDX,AL
MOVAL,0F7H;写OCW1,只开IR3中断请求,其余屏蔽
OUTDX,AL
MOVBYTEPTRDS:
[0601H],03H
MOVBYTEPTRDS:
[0602H],00H
STI;开中断
WATING:
JMPWATING;等待中断,无限循环
WRINTVER:
MOVAX,0H;设定中断向量表子程序
MOVES,AX
MOVDI,002CH
LEAAX,INTQ3;IRQ3端口
STOSW
MOVAX,CS
STOSW
RET
INTREEUP3:
;中断子程序INTREEUP3
CLI
MOVAL,DS:
[0601H]
CALLCONVERS
MOVSI,DATA0;DATA0存放中断次数
CALLLEDDISP
CMPBYTEPTRDS:
[0601H],03H
JNZNEXT
MOVDX,IOBPT
COMP:
;判断DS:
[0602H]里面的值,并跟据结果来进行对应的转换
CMPBYTEPTRDS:
[0602H],00H;状态为00,则跳转到SI0
JZSI0
CMPBYTEPTRDS:
[0602H],01H;状态为01,则跳转到SI1
JZSI1
CMPBYTEPTRDS:
[0602H],02H;状态为10,则跳转到SI2
JZSI2
CMPBYTEPTRDS:
[0602H],03H;状态为11,则跳转到SI3
JZSI3
SI0:
MOVAL,22H;状态00,南北红灯亮,东西绿灯亮
ADDBYTEPTRDS:
[0602H],01H
JMPPUT;调用显示子程序
SI1:
MOVAL,21H;状态01,南北绿灯亮,东西黄灯亮
ADDBYTEPTRDS:
[0602H],01H
JMPPUT;调用显示子程序
SI2:
MOVAL,14H;状态10,南北绿灯亮,东西红灯亮
ADDBYTEPTRDS:
[0602H],01H
JMPPUT;调用显示子程序
SI3:
MOVAL,0CH;状态11,南北黄灯亮,东西红灯亮
MOVBYTEPTRDS:
[0602H],00H
JMPPUT;调用显示子程序
PUT:
MOVDX,IOBPT;输出当前状态,显示红黄绿灯
OUTDX,AL
NEXT:
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
SUBBYTEPTRDS:
[0601H],01H;计数次数减1
CMPBYTEPTRDS:
[0601H],00H
JZINTRE1;时间为0,则跳转到INTRE1,置位为5
JMPEX
CONVERS:
MOVBH,0H
ANDAL,0FH
MOVBL,AL
MOVAL,CS:
[BX+DATA2]
MOVBX,DATA0
MOVDS:
[BX],AL
RET
INTRE1:
;时间置位为5s
MOVBYTEPTRDS:
[0601H],05H
EX:
;中断结束控制方式OCW2,普通中断结束方式
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
STI
IRET
LEDDISP:
;显示子程序,从左到右一次送数,显示--------
MOVAL,90H
MOVDX,CONTPORT
OUTDX,AL
MOVBYTEPTRDS:
[0600H],00
LED1:
CMPBYTEPTRDS:
[0600H],07H
JALED2
MOVBL,DS:
[0600H]
MOVBH,0H
MOVAL,CS:
[BX+SI]
MOVDX,DATAPORT
OUTDX,AL
ADDBYTEPTRDS:
[0600H],01H
JNZLED1
LED2:
RET
FORMAT:
MOVBX,0;格式化内存,将数码管将要显示的字符的编码写入内存
MOVWORDPTRDS:
[BX+0500H],5050H;DATA1rr
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],0079H;E
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],0000H;全熄
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],0000H;全熄
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],063FH;DATA201
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],4F5BH;23
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],6D66H;45
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],077DH;67
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],6F7FH;89
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],7C77H;AB
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],5E39H;CD
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],7179H;EF
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],4040H;--
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],4040H;--
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],4040H;--
ADDBX,2
MOVWORDPTRDS:
[BX+0500H],4040H;--
ADDBX,2
RET
CODEENDS
ENDSTART
4.运行结果展示
交通灯初始化,数码管显示--------
交通灯运行
5.课程设计心得体会
1)微机原理是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时有要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学习了一些新知识,弄清楚一些原来保留的问题,又出现了一些新问题”的循环中,知道课程结束时,才把保留的问题基本搞清楚。
2)此次实习可以说是获益匪浅。
通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:
仔细谨慎,精益求精。
在程序中添加了黄灯闪烁,更加醒目。
另外加入能够实现各路口绿灯显示时间不同,适应在主干道和支线路口中使用。
在系统加电调试中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。
3)而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。
把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。
4)之前学习微机原理,汇编语言这两门课时,我都只是在emu8086上面编译,调制,运行,只是普通的编程,但是,这次课程设计是在dvcc上面
进行编译,调试,与解调。
更接近于实际一些。
期间遇到了一些问题,如端口的选择,obj文件找不到,但是通过杨老师的耐心讲解与自己的探索,终于找到了解决的办法。
发现问题独立思考解决问题,这是在科学探索里面最基本的机制。
5)另一个我觉得比较重要的问题就是时序的问题,在学习微机原理与接口技术这门课的时候,因为课堂上只是对基本知识进行讲解,因此对实践中非常重檐的时序就没进行过多的提及。
但是,其实,时序是非常重要的,这一点,在我对硬件进行调试的时候才逐渐的发觉。
6)通过本次课程设计,我对汇编语言也获得了更深层次的理解。
汇编语言是一个最基础最古老的计算机语言。
语言总是越基础越重要,在重大的编程项目中应用最广泛。
就我的个人理解,汇编是对寄存的地址以及数据单元进行最直接的修改。
而在某些时候,这种方法是最有效,最可靠的。
比如,在当今的战争中,首先就是运用这方面的知识来修改地方的系统程序。
让地方的卫星偏离轨道,从而不能发现目标。
其威力可见一斑。
然而,事物总有两面性,有优点自然缺点也不少。
其中,最重要的一点就是,汇编语言很复杂,对某个数据进行修改时,本来很简单的一个操作会用比较烦琐的语言来解决,而这些语言本身在执行和操作的过程中,占有大量的时间和成本。
在一些讲求效率的场合,并不可取。
汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。
学习事物总是从最简单基础的开始。
那么学习高级语言也当然应当从汇编开始。
学习汇编语言实际上是培养了学习计算机语言的能力和素养。
个人认为,学习汇编语言对学习其他语言很有促进作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 交通灯