课程设计说明书
2011 — 2012学年第一学期
题目:
模拟交通灯控制系统
学 院: 计算机学院 专业班级: 计算机科学技术 学 号:
学生姓名: 指导教师: 成 绩:
时 间:
2011年 12月 22
日
摘 要
随着城市人口的快速增长和机动车数量的大量增加,城市交通灯作为缓解交通压力、提高道路通行效率的重要手段,其作用越来越重要。因此,如何改进交通灯的设计,使其更好的适应城市交通的发展也成为一个重要课题。红绿灯控制系统是利用8253A定时/计数器芯片的定时功能,向8259A中断控制器芯片发出定时中断请求,驱动8255A可编程并行接口芯片改变路口的LED灯的亮灭。系统采用DVCC-598JH+微机原理与接口技术实验箱作为测试与运行的平台,8086汇编语言作为编程语言,并用MASM5.0作为汇编语言开发环境。
关键词:红绿灯控制系统 8253A定时器 8259A中断控制器 8255A可编程并行接口 DVCC-598JH+
I
北京理工大学珠海学院计算机学院课程设计
目 录
摘 要 ........................................... 201 1.十字路口基本情况分析 ........................... 201 2.交通灯状态转换分析 ............................... V 3.紧急通行情况分析 ................................. 5 4.硬件功能分析 ..................................... 6
4.1 8253A定时/计数器芯片 ........................... 6 4.2 8259A中断控制器芯片 ............................ 7 4.3 8255A可编程并行接口芯片 ........................ 9
5.系统设计 ........................................ 10
5.1硬件设计 ....................................... 10 5.1.1 电路分析 ..................................... 10 5.1.2 电路连接设计 ................................. 10 5.2软件设计 ....................................... 12 5.2.1 程序总体设计 ................................. 12 5.2.2 程序流程设计 ................................. 13 5.2.3 重要代码分析 ................................. XV
6.系统实现 ........................................ XX
6.1 软件开发与运行环境 ............................. 10 6.2 系统硬件环境 ................................... 20
II
北京理工大学珠海学院计算机学院课程设计
6.3 系统运行步骤 ................................... 20 6.4 系统测试结果 ................................... 20
参考文献 .......................................... 21 心得体会 .......................................... 22 教师评语 .......................................... 23 附录 .............................................. 24
III
北京理工大学珠海学院计算机学院课程设计
1 十字路口基本情况分析
设有一个十字路口,1、3为东西方向,2、4为南北方向,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车; 延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后重复上述过程。
IV
北京理工大学珠海学院计算机学院课程设计
2 交通灯状态转换分析
合理的设置每个路口、每个方向的交通灯的通行时间,对车辆能否及时疏散,有着决定性的作用。
状态1 的时候:1、3路口的绿灯熄灭,1、3路口的黄灯开始亮,当通行时间剩下5秒结束时,LED会闪烁,而同时2、4路口的红灯亮
状态2的时候:1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;
状态3的时候:1、3 路口红灯亮, 而同时2、4路口的黄灯亮; 状态4 的时候:1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。整个状态转换的过程见表2-1。
表2-1 路口四个状态和相互转换过程
状态 状态1(ZT1) 状态2(ZT2) 状态3(ZT3) 状态4(ZT4) 每个路口灯的点亮情况 路口1 黄 红 红 绿 路口2 红 绿 黄 红 路口3 黄 红 红 绿 路口4 红 绿 黄 红 间 5s 15s 5s 15s 通行时
完成四个状态的一次循环需要40秒, 红灯亮20秒 、绿灯亮15秒 、黄灯亮5秒
完成了在适当的时间限度内,有效的疏散较大的通行量的目的。
V
北京理工大学珠海学院计算机学院课程设计
3 紧急通行情况分析
手动拨动单脉冲一次,则产生一个优先级高一级的中断,程序转而执行此中断处理程序,处理完后返回继续执行低级中断。整个执行过程见图3-1
主程序 循环值入栈 红灯全亮 是否中断 结束中断服务程序 继续执行主程序 循环值出栈 图3-1 紧急中断程序
继续处理未完成的低级中断
VI
北京理工大学珠海学院计算机学院课程设计
4 硬件功能分析
4.1 8253A定时/计数器芯片
8253A定时/计数器具有定时、计数双功能。它具有三个相同且相互独立的16位减法计数器,分别称为计数器0、计数器1和计数器2。每个计数器计数频率为0-2MHZ。
其内部数据总线缓冲器为双向三态,故可直接连在系统数据总线上,通过CPU写入计数初值,也可由CPU读出计数当前值。读写控制逻辑,当选中该芯片时,根据读写命令和送来的地址信息控制整个芯片工作。其工作方式通过控制字确定。控制字寄存器用于接收数据总线缓冲器的信息。当写入控制字时,控制计数器的工作方式;当写入数据时则装入计数初值。控制寄存器为8位,只能写入不能读出。8253A内部结构见图4-1。
当8253A执行计数功能时,计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数。每来一个脉冲减1,当计数值减为0时,由OUT端输出一个标志信号。
当8253A执行定时功能时,计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数。当计数到零时,发计数结束定时信号。
8253A可以工作在方式0到方式5,常用的有方式2频率发生器方式和方式3方波发生器方式。在方式2时,当初值装入后,OUT变为高;计数结束,OUT变为低。该方式下如果计数未结束,但GATE为低时,立即停止计数,将OUT变为高;当GATE再变高时,便启动一次新的计数周期。在方式3时,当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。
在本系统中,8253A工作于方式3方波发生器方式。
VII
北京理工大学珠海学院计算机学院课程设计
D0-D7 数据总线缓冲器 计数器0 CLK0 GATE0 OUT0 CLK1 GATE1 OUT1 CLK2 GATE2 OUT2 -RD -WR A0 A1 -CS 读/写逻辑 计数器1 控制字寄存器 计数器2 图 4-1 8253A内部结构图
4.2 8259A中断控制器芯片
8259A是专为控制优先级中断而设计的芯片。它将中断源按优先级排队、辨认中断源和提供中断向量的电路集成于一体,只要用软件对它进行编程,就可以管理8级中断。
8259A的内部结构见图4-2。它由中断请求寄存器(IRR)、优先级分析器、中断服务寄存器(ISR)、中断屏蔽寄存器(IMR)、数据总线缓冲器、读写控制电路、级联缓冲器和比较器组成。
D0-D7 数据总线控制器 -RD -WR A0 -CS CAS0 CAS1 CAS2 读写电路 -INTA 控制逻辑 INT 级联缓冲器/比较器 服务寄存器 内部总线 优先级分析器 中断请求IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 中断屏蔽寄存器IMR SP/-EN 图 4-2 8259A的内部结构
VIII
北京理工大学珠海学院计算机学院课程设计
对8259A编程和初始化的时候,首先要写初始化命令字ICW1-ICW4。 写ICW1以确定中断请求信号类型,清除中断屏蔽寄存器,进行中断优先级排队和确定系统是用单片还是多片。
写ICW2用来定义中断向量的高五位类型码。
ICW3可以定义主片8259A中断请求线上IR0-IR7有无级联的8259A从片。 写ICW4用来定义8259A工作时用8085模式还是8088模式,以及中断服务寄存器复位方式等。
初始化命令字写完以后,要写8259A的控制命令字,它包括OCW1-OCW3。 写OCW1可以设置或清除对中断源的屏蔽。
写OCW2设置优先级是否进行循环、循环的方式和中断结束的方式。8259A复位时自动设置IR0优先权最高,IR7优先权最低。
写OCW3用来设置查询方式和特殊屏蔽方式,并可以读取8259A中断寄存器的当前状态。
在本系统中,使用8259A的循环等待中断工作方式。
4.3 8255A可编程并行接口芯片
8255A是一种可编程的芯片,它采用双列直插封装,用+5V电源供电。内部有3个8位的I/0端口:A口、B口和C口。这三个端口也可以分为各有12位的两组:A组和B组。A组包含A口8位和C口的高四位,B组包含B口8位和C口的低四位;A组控制和B组控制用于实现方式选择操作;读写控制逻辑用于控制芯片内部寄存器的数据和控制字经数据总线缓冲器送入各组接口寄存器中。由于8255A数据总线缓冲器是双向三态8位驱动器,因此可以直接和8088系统数据总线相连。8255A的内部逻辑结构见图4-3。
IX
北京理工大学珠海学院计算机学院课程设计
CPU接口 内部逻辑 A组控制 外设接口 A组端口 I/0 PA7-PA0 双向数据总线 D0-D7 -RD -WR A1 A0 RES-CS 数据总线缓冲器 A组端口 C高4位 I/0 PC7-PC0 I/0 PC0-PC20 I/0 PB7-PB0 读写控制逻辑 A组端口 C低4位 B组控制 B组端口 图4-3 8255A的内部结构
8255A有三种工作方式:方式0、方式1和方式2。它通过对控制寄存器写入不同的方式选择控制字来决定其三种不同的工作方式。
方式0是基本输入输出方式。该方式下的A口8位和B口8位可以由输入的控制字决定为输入或输出,C口分成高4位(PC4-PC7)和低4位(PC0-PC3)两组,也有控制字决定其输入或输出。需要注意的是,该方式下,只能将C口其中一组的四位全部置为输入或输出。
方式1选通输入输出方式,又叫单向输入输出方式。它分为A、B两组,A组由数据口A和控制口C的高4位组成,B组由数据口B和控制口C的低4位组成。数据口的输入输出都是锁存的,与方式0不同,由控制字来决定它是作为输入还是输出。C口的相应位用于寄存数据传送中所需的状态信号和控制信息。
方式2为双向输入输出方式。本方式只有A组可以使用。此时A口为输入输出双向口,C口中的5位(PC3-PC7)作为A口的控制位。 在本系统中,8255A的三个端口均工作于方式0,全部为输出口。
X
北京理工大学珠海学院计算机学院课程设计
5 系统设计
5.1硬件设计 5.1.1 电路分析
本系统要实现的功能是模拟十字路口红绿灯的工作状况。按照预先设定并优化的交通灯规则,控制LED指示灯的亮灭,同时在实验箱的数码管显示屏上显示剩余的时间。当时间递减到0的时候,改变LED灯的状态,并刷新显示屏显示的时间。
为了实现以上功能需求,本系统需要12个LED指示灯,来分别代表1、3方向(东西),2、4方向(南北);两个双位的数码管显示屏,用来显示1、3路口和2、4路口剩余的时间。
为了实时地更新数码管显示屏上的数字,需要使用8255A可编程芯片来即时地改变显示屏每个笔划的电平高低,从而准确地将需要显示的数字显示在数码管显示屏上。
由于交通灯需要按秒进行计数,所以需要一个均匀地时钟发生器。8253A芯片是个功能丰富、使用简单的定时/计数器。它可以根据需要设置不同的显示初值,从而产生所需频率的时钟脉冲,为系统提供计时和驱动其他事件的发生。8259A中断控制器芯片可以在收到8253A发出的时钟脉冲时,产生定时的中断,在中断服务程序中,更新显示缓冲区,并调用8255A芯片来执行相关程序,从而更新LED灯和数码管显示屏。
本系统使用集成的电路和实验环境,以方便进行电路的连接和测试,同时减少由于电路的复杂性而产生的错误。
5.1.2 电路连接设计
本系统所使用到的硬件包括8253A芯片、8259A芯片、8255A芯片、LED指示灯和数码管显示屏。
在电路连接的时候,将8255A芯片的PC口的PC5、PC4接红灯灯,PC3、PC2接绿灯,PC1、PC0接黄灯。通过改变8255A的PC口的值来实时地控制每个LED灯的亮灭,从而改变十字路口的交通状态。
将8253A的CLK0插孔连接至1MHZ的分频输出插孔T4。分频输出插孔所输出的频率是将系统的主频分解为一定的频率,以供其他硬件或者软件使用。8253A
XI
北京理工大学珠海学院计算机学院课程设计
从分频插孔得到1MHZ的固定频率,再根据芯片内部设定的计数初值,从而产生需要频率的时钟脉冲,由OUT0口输出,供其他芯片使用。在这里OUT0接CLK2。
将8253A的OUT2插孔连接至8259A的IRQ3插孔上。8259A的IRQ3中断口每隔固定的时间便会收到8253A发送过来的时钟脉冲,作为中断源来执行中断服务程序。在中断服务程序中,完成更新数码管显示值和改变交通灯状态的功能。 硬件的连接见图5-1和图5-2。
UB31 8253 D0 D1 D2 D3 D4 D5 D6 D7 D0 T0OUT D1 GATE0 D2 T0CLK D3 GATE2 D4 T2OUT D5 T2CLK D6 D7 8253A T0OUT VCC T0CLKVCC CK 1MHZ TOUT1 CS3 IOR IOW ADD0 ADD1 VCC IR0 D0 IR1 D1 IR2 D2 IR3 D3 IR4 ADD0 D4 IOW IR5 8259A IOR INTR D5 IR6 INTA D6 IR7 D7 VCC TCLK1 CS 图 5-1 系统电路图——8253A和8259A的连接图
RD PB0 PB1 WR CS_8255 PB2 A0 PB3 A1 PB4 RESET PB5 VCC CS PB6 Y7 PB7 8255A L2(控制黄灯) L5 L8 L11 L3(控制绿灯) L6 L9 L12 L1(控制红灯) L4 L7 L10 图 5-2 系统电路图——8255A和LED灯的连接图
XII
北京理工大学珠海学院计算机学院课程设计
5.2软件设计 5.2.1 程序总体设计
本系统采用“自上而下总体规划、自下而上应用开发”的策略进行总体设计和开发。先根据其功能需要,设定需要的功能模块,确定需要编写的子程序,从而使程序结构清晰,便于阅读和调试,加快了系统完成的速度。结构化的程序设计方法很适合用来开发汇编语言程序,因为汇编语言的特性决定了其无法使用面向对象的程序开发方法;使用瀑布程序开发模型,从开始的时候把系统的需求分析透彻,对系统的功能和各个模块进行清晰的规划,从而缩短系统开发所用的时间。
为了完成系统的功能,系统的程序部分应包含以下几个模块(见图5-3)。 初始化模块用来初始化各个芯片,分为以下几个步骤:
(1)初始化数据:T_1为1、3方向(东西)时间显示(如 5秒);T_2为2、4方向(南北)的时间显示。初值可同设为5秒。
(2)初始化8255A的工作方式:使A、B、C三个端口均工作于方式0,且为输出口;DVCC实验台8255口地址:FF28H—FF2BH
(3)初始化8253A芯片:选用方波发生器方式,并设定其使用通道0和2进行工作;DVCC实验台8253口地址:0040—0043H
(4)初始化8259A:设定其工作方式为单片、边沿触发、要写ICW4、循环等待中断方式。DVCC实验台8259口地址:0060—0061H
设置中断向量表 写2号、3号中断向量:INTREEUP2、INTREEUP3。
中断处理模块:
(1)INTREEUP3是主要的中断服务程序, 8253A每发来一次时钟脉冲便产生一次中断,两个路口所亮的灯对应的显示数值减一。并输出完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换 (2)其中INTREEUP2是增加行人手动按钮。实现可手动干预的(交通事故、步行可及时通行的)交通灯自动控制系统
有手动干预(按钮按下)时,交通灯立即处于该状态:两个方向均红灯亮(以便让行人及时通过)。10秒后,交通恢复到人工干预前状态,继续按正常状态循环切换。
显示模块(DISP)使用8255A将显示缓冲区的字符逐位显示在数码管显示屏上,在中断请求没有到来的时候,根据交通灯所处的状态,点亮相应的LED灯;有中断请求时,调用相应的中断服务程序。
XIII
北京理工大学珠海学院计算机学院课程设计
初始化模块 交通灯控制系统 中断处理程序 INTREEUP3 应急中断处理程序 显示模块DISP INTREEUP2 图 5-3 系统模块图
5.2.2 程序流程设计
程序运行的流程图见图5-4,中断应急流程图见5-5。
开始运行的时候,初始化程序,给初始显示区和电平错误显示区赋初值,显示相应的字符;定义数值对应的显示字符,便于转换程序取到时间数值对应的字符。
接着对8253A、8255A和8259A进行初始化。定义8253A使用通道0和2,工作于方式3,其计数初值为3C50,每隔20ms向8259A发出一个时钟脉冲;8255A的A、B、C三个端口均工作于输出方式;8259A工作于循环等待中断方式。
进入显示程序(DISP)使用8255A将显示缓冲区的字符逐位显示在数码管显示屏上,在中断请求没有到来的时候,根据交通灯所处的状态,点亮相应的LED灯。
当有中断的时候,则转到相应的中断服务程序,本系统主要为INTREEUP3程序。8253A每发来一次时钟脉冲便产生一次中断。INTREEUP3程序首先关闭中断,两个路口所亮的灯对应的显示数值减一。并输出以完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换。最后打开中断,并中断返回。
XIV
北京理工大学珠海学院计算机学院课程设计
开始
中断入口 初始化 保护现场
设置中断控制器工作方式
四个方向的红灯亮30秒 中断允许 输出中断结束命令
恢复现场
图5-4 主程序框图
状态循环切换,显示数字 中断返回 图5-5 中断程序框图
5.2.3 重要代码分析
(1)中断服务程序INTREEUP3是本系统的程序最核心的子程序。它用来计算收到8353A发来的中断,8253A每发来一次时钟脉冲便产生一次中断,两个路口所亮的灯对应的显示数值减一。并输出完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换,
以下是该程序的代码分析,并注有详细的功能说明。 中断服务程序
INTREEUP3: CLI ;处理中断时先关中断 push ax ;保存堆栈 push bx push dx
STI ;保存现场后开中断以可以实现中断嵌套 ; 1、3方向(东西)
XV
北京理工大学珠海学院计算机学院课程设计
DEC T_1 ;对当前数值减一 MOV AL,T_1
CMP AL,00H ;判断当前数值是否减到0
JE CHANGE1 ;若 当前数值为0则跳到CHANGE1 切换状态 JMP RIGHT ;若 当前数值不为0则跳到2、4方向(南北) CHANGE1: MOV AL,C ;读入并口状态 TEST AL,02H ;测试当前并口状态 JNZ RED1 TEST AL,08H JNZ YELLOW1 TEST AL,20H JNZ GREEN1
RED1: MOV DX,IOC ; 1 OR AL,20H AND AL,35H OUT DX,AL
MOV C,AL ; MOV T_1,14H ; JMP RIGHT
YELLOW1:MOV DX,IOC 1 OR AL,02H AND AL,17H OUT DX,AL
MOV C,AL ; MOV T_1,05H ; JMP RIGHT
GREEN1:MOV DX,IOC ; 1 OR AL,08H AND AL,1DH OUT DX,AL
MOV C,AL ; MOV T_1,0fH ; ;右边 RIGHT:
DEC T_2 MOV AL,T_2
、3方向(东西)亮红灯 保存c口状态
对新状态赋显示初值 、3方向(东西)亮黄灯 保存c口状态 对新状态赋显示初值 、3方向(东西)绿灯 保存c口状态 对新状态赋显示初值 XVI
北京理工大学珠海学院计算机学院课程设计
CMP AL,00H JE CHANGE2 JMP OUTPUT
CHANGE2: MOV AL,C ;读入c口状态 TEST AL,01H JNZ RED2 TEST AL,04H
JNZ YELLOW2
CMP AL,18H ;应急状态返回时2、4方向从新跳到红灯
JZ RED2 ; (同时,1、3方向为绿灯)
TEST AL,10H
JNZ GREEN2 RED2:MOV DX,IOC OR AL,10H AND AL,3AH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,14H JMP OUTPUT YELLOW2: MOV DX,IOC OR AL,01H AND AL,2BH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,05H JMP OUTPUT GREEN2: MOV DX,IOC OR AL,04H AND AL,2EH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,0fH ;输出数字 OUTPUT: MOV AL,T_1 MOV AH,T_1 AND AL,01H
XVII
北京理工大学珠海学院计算机学院课程设计
MOV CL,4 SHR AH,CL MOV AL,T_2 MOV AH,T_2 AND AL,01H MOV CL,4 SHR AH,CL ;计数器从新赋初值 MOV AL,36H OUT 43H,AL MOV AL,50H OUT 40H,AL MOV AL,11000011B OUT 40H,AL
MOV AL,10110110B ;计数器2 OUT 43H,AL MOV AL,02H OUT 42H,AL MOV AL,00H OUT 42H,AL
;=================================== ;========
MOV AL,T_1 CMP AL,03H JA RIGHTTEST JMP YLEDSTA RIGHTTEST:
MOV AL,T_2 CMP AL,03H JA RETBCAK YLEDSTA:
MOV AL,C AND AL,03H JNZ YLEDFLASH
XVIII
北京理工大学珠海学院计算机学院课程设计
JMP RETBCAK
;======== 时间小于等于3时 LED灯 闪烁 =========== YLEDFLASH:
PUSH CX ; PUSH DX
MOV CX,0AH ; 闪烁3次 MOV AL,C ;读入c口状态 AND AL,11111100B ; 灯灭 MOV DX,IOC OUT DX,AL
CALL DELAY ;短延时 MOV AL,C ;灯亮 OUT DX,AL
CALL DELAY ;短延时 ; LOOP YLEDFLASH ;循环 ; POP DX POP CX JMP RETBCAK ;;=================;短延时 DELAY:
CALL DELAY2
RET
MOV CX,6A45H ;;;; POP CX RET
DELAY2: PUSH CX DELA1: LOOP DELA1
;;=================
;==================================================================
RETBCAK:
MOV AL,20H ;写ocw2然后返回
MOV DX,0060h OUT DX,AL
CLI
XIX
北京理工大学珠海学院计算机学院课程设计
pop dx pop bx pop ax
STI IRET
;===============中断返回 ==============
6 系统实现
6.1 软件开发与运行环境
本系统的代码使用8086汇编语言编写,所以代码编写环境可以使用任何文本编辑器。如系统自带的记事本、DOS下的编辑工具EDIT和文本编辑工具UltraEdit等。
本系统使用了DVCC-598JH++实验箱附带的DV88联机软件。它可以读取其他编辑软件生成的MASM格式的汇编语言文件(*.ASM),也可以作为汇编代码的编辑、测试、运行环境。在显示代码的时候,可以把常用的汇编指令显示为蓝色,数值显示为红色,注释显示为绿色,从而使论文清晰易读,并容易发现代码中的错误。
DV88联机软件同样可以作为系统的运行环境。系统运行的时候需要将ASM源程序编译产生的OBJ文件传送到实验箱,由实验箱上的处理器和各个芯片负责执行。
6.2 系统硬件环境
交通灯控制系统采用的DVCC-598JH++通用微机原理及接口实验系统,集成了8253A计数/定时器芯片、8255A可编程并行接口芯片和8259A中断控制器芯片,并把大部分的引脚进行了封装,方便直接进行使用;并设有12个LED显示灯;系统分频器可以产生特定频率的时钟脉冲;固定的导线接口,方便使用导线把各芯片进行连接;并设有键盘,可以随时控制程序的运行,方便进行调试。
实验箱使用串行口连接线与PC机的串口相连,然后使用DV88联机软件与实验箱进行连接并传送运行的程序。
XX
北京理工大学珠海学院计算机学院课程设计
6.3 系统运行步骤
系统的代码编写完毕的时候,便可以进行程序的联机调试了。
将实验箱的电源线连接好,使用串口通信线将实验箱上的串口与PC机上的串口相连。将各个芯片和LED灯按照硬件连接设计图上的图示进行连接。
打开实验箱的电源,数码管显示屏上显示“P.”,提示实验箱初始化成功。 在PC机上打开DV88联机软件,调用编辑好的程序代码。首先进行编译,系统会自动调用MASM程序对代码进行编译。若没有提示错误,便可以点击连接按钮,调用LINK程序把编译生成的OBJ文件进行连接,生成EXE文件。再点进调试按钮,把生成的可执行文件传送到实验箱,进行调试状态,此时屏幕会显示实验箱各个寄存器的值。最后点击连续运行按钮,实验箱上的数码显示管和LED灯便会按照设计的要求进行工作。
在运行的过程中可以随时按实验箱上的RESET键,中断程序的执行,以便进行代码的修改或者结束系统的运行。
6.4 系统测试结果
按照表2-1中交通灯四个状态所对应的秒数,在程序中为各个状态子程序设定相应的时间初值。测试运行的结果如下:
开始运行时,系统在状态一下工作,两个显示屏显示剩余时间为5秒,并不断递减,同时LED灯的2、4路口的红灯点亮,1、3路口的黄灯点亮;当状态一的剩余时间减至零的时候,系统自动切换到状态二,2、4路口显示屏显示剩余时间变为15秒并递减,1、3路口显示屏显示剩余时间变为20秒并递减,同时1、3路口的红灯和2、4路口的绿灯点亮;状态二结束时,系统切换到状态三,两个显示屏的剩余时间变更为5秒,1、3路口的红灯和2、4路口的黄灯点亮;状态三结束时,进入状态四,2、4路口显示屏显示剩余时间变为20秒并递减,1、3路口显示屏显示剩余时间变为15秒并递减,同时1、3路口的绿灯点亮,2、4路口的红灯点亮。状态四结束时,自动切换到状态一循环执行。
XXI
北京理工大学珠海学院计算机学院课程设计
参考文献
[1] 季福坤:《计算机组织与体系结构》[M],中国水利水电出版社2006年版
[2] 李继灿:《微型计算机系统与接口》[M],清华大学出版社2005年版 [3]杨立:《微型计算机系统与接口》[M],中国铁道出版社2009年版
[4]《DVCC系列单片机微机仿真实验系统实验指导书》[M],启东计算机厂有限公司
[5]周秀清:《微型计算机原理与接口技术》[M],中国科学技术大学出版社. [6] 《红绿灯控制系统的设计》[C],
XXII
北京理工大学珠海学院计算机学院课程设计
心得 体会
通过这次课程设计,加强了我们动手、思考和解决问题的能力.虽然花了很多的时间,但学到了很多东西.做课程设计的时候,查阅了很多课本、资料书,增强了自己对知识的理解,很多以前不是很懂的问题现在都有了更高层次的理解. 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但这毕竟第一次自己设计一个程序,难免会遇到过各种各样的问题,同时在设计的过程中发现了我们的不足之处,各自都发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固,同时对知识的理解和接受能力还不是太强。
这次课程设计任务终于顺利完成了,在设计中遇到了很多技术性的问题,最后在我们的钻研以及与同学之间的探讨下,终于一个一个得解决了问题,这次课程设计在培养我们编程能力的同时,也让我学会了要完成一项任务,除了需要过硬的技术和能力之外,还要有不屈不挠的精神
在这次课程设计中,遇到最棘手也是最深刻的问题是不太了解所用平台的硬件资源以及其电路结构。深刻教训:使用汇编语言编写程序时,一定要好好了解所用平台的硬件资源!
这次课程设计之后,使我们明白了:做任何事情都要认真仔细,更要有不轻易放弃的勇气!不然的话,你会花更多的时间、转很多的弯路才会做好.课程设计有利于提高我们的动手能力,能把我们所学的书本知识运用到实际生活中去.同时也丰富了我们的业余生活,提高我们对知识的理解能力!
XXIII
北京理工大学珠海学院计算机学院课程设计
教师 评语
24
北京理工大学珠海学院计算机学院课程设计
附 录
CODE SEGMENT
ASSUME CS:CODE ORG 21B0H
IOC EQU 0FF2AH
T_1 DB 01H ;东西方向 T_2 DB 03H ;南北方向 C DB 00H
DATA1 DB 10 DUP(?)
BEGIN: ;初始化数据 MOV T_1,05H MOV T_2,05H
MOV BX,OFFSET DATA1
MOV BYTE PTR CS:[BX],0c0h MOV BYTE PTR CS:[BX+1],0f9h MOV BYTE PTR CS:[BX+2],0a4h MOV BYTE PTR CS:[BX+3],0b0h MOV BYTE PTR CS:[BX+4],99h MOV BYTE PTR CS:[BX+5],92h MOV BYTE PTR CS:[BX+6],82h MOV BYTE PTR CS:[BX+7],0f8h MOV BYTE PTR CS:[BX+8],80h MOV BYTE PTR CS:[BX+9],90h ;初始化并口
MOV DX,0FF2BH ;方式0,全输出模式 MOV AL,80H OUT DX,AL MOV DX,IOC MOV AL,21H
MOV C,AL ;把C口的状态记录下 OUT DX,AL
;初始化计数器
MOV AL,36H ;计数器0.方式3,先写高位后写低位,2进制计数 OUT 43H,AL MOV AL,52H OUT 40H,AL
MOV AL,11000011B OUT 40H,AL
MOV AL,10110110B ;计数器1,方式3,先写低位后写高位,2进制计数
25
北京理工大学珠海学院计算机学院课程设计
OUT 43H,AL MOV AL,02H OUT 42H,AL MOV AL,00H OUT 42H,AL
;设置中断向量表 MOV AX,0H MOV ES,AX MOV DI,002CH
MOV AX,OFFSET INTREEUP3 STOSW
MOV AX,0000H STOSW
MOV DI,0028H
MOV AX,OFFSET INTREEUP2 STOSW
MOV AX,0000H STOSW
;======= 8259 初始化 =====================
MOV AL,13H ;写ICW1,单片,边沿触发,要ICW4 OUT 60H,AL
MOV AL,08H ;写ICW2,中断类型号从8开始 OUT 61H,AL
;写ICW4,缓冲方式,8086/8088自动配置,即中断返回时要写OCW2 MOV AL,09H OUT 61H,AL ;省略不写OCW1 STI
WATING:CALL DISP JMP WATING ;中断服务程序 INTREEUP3: CLI
push ax push bx push dx STI
; 1、3方向 (东西) DEC T_1 MOV AL,T_1 CMP AL,00H JE CHANGE1 JMP RIGHT
CHANGE1: MOV AL,C ;读入并口状态
26
北京理工大学珠海学院计算机学院课程设计
TEST AL,02H JNZ RED1 TEST AL,08H JNZ YELLOW1 TEST AL,20H JNZ GREEN1 RED1: MOV DX,IOC OR AL,20H AND AL,35H OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_1,14H JMP RIGHT YELLOW1:MOV DX,IOC OR AL,02H AND AL,17H OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_1,05H JMP RIGHT GREEN1:MOV DX,IOC OR AL,08H AND AL,1DH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_1,0fH
;2、4方向 (南北)? RIGHT:
DEC T_2 MOV AL,T_2 CMP AL,00H JE CHANGE2 JMP OUTPUT
CHANGE2: MOV AL,C ;读入c口状态 TEST AL,01H JNZ RED2 TEST AL,04H JNZ YELLOW2 CMP AL,18H JZ RED2 TEST AL,10H JNZ GREEN2 RED2:MOV DX,IOC
27
北京理工大学珠海学院计算机学院课程设计
OR AL,10H AND AL,3AH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,14H JMP OUTPUT YELLOW2: MOV DX,IOC OR AL,01H AND AL,2BH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,05H JMP OUTPUT GREEN2: MOV DX,IOC OR AL,04H AND AL,2EH OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_2,0fH ;输出数字 OUTPUT: MOV AL,T_1 MOV AH,T_1 AND AL,01H MOV CL,4 SHR AH,CL MOV AL,T_2 MOV AH,T_2 AND AL,01H MOV CL,4 SHR AH,CL
;计数器从新赋初值 MOV AL,36H OUT 43H,AL MOV AL,50H OUT 40H,AL
MOV AL,11000011B OUT 40H,AL
MOV AL,10110110B ;计数器2 OUT 43H,AL MOV AL,02H OUT 42H,AL MOV AL,00H OUT 42H,AL
28
北京理工大学珠海学院计算机学院课程设计
;=================================== MOV AL,T_1 CMP AL,03H JA RIGHTTEST JMP YLEDSTA RIGHTTEST:
MOV AL,T_2 CMP AL,03H JA RETBCAK YLEDSTA:
MOV AL,C AND AL,03H JNZ YLEDFLASH JMP RETBCAK
;======== 时间小于等于3时 LED灯 闪烁 =========== YLEDFLASH:
PUSH CX
MOV CX,0bH ; 闪烁3次 MOV AL,C ;读入c口状态 AND AL,11111100B ; 灯灭 MOV DX,IOC OUT DX,AL
CALL DELAY ;短延时
MOV AL,C ;灯亮 OUT DX,AL
CALL DELAY ;短延时 POP CX
JMP RETBCAK
;;=================;短延时 =================================== DELAY:
CALL DELAY2 RET
DELAY2: PUSH CX
MOV CX,7aaaH ;;;; DELA1: LOOP DELA1 POP CX RET
;================================================================== RETBCAK:
29
北京理工大学珠海学院计算机学院课程设计
MOV AL,20H ;写ocw2然后返回 MOV DX,0060h OUT DX,AL cli pop dx pop bx pop ax sti IRET
;===============中断返回 ==============
;============== 应急 中断程序 =============== INTREEUP2: CLI
push ax push bx push dx
MOV AL,30H ; 全亮红灯 MOV DX,IOC OUT DX,AL
MOV C,AL ;保存c口状态 MOV T_1,0ah MOV T_2,0ah
MOV AL,20H ;写ocw2然后返回 MOV DX,0060h OUT DX,AL pop dx pop bx pop ax
STI IRET
;================================================================== DISP:
;过滤
MOV DX,0FF21H MOV AL,00000000B OUT DX,AL
;左边 ;;;;;;;;;;;;;;;;; ;个位
MOV BX,OFFSET DATA1 MOV AL,T_1
30
北京理工大学珠海学院计算机学院课程设计
CMP AL,0AH JAE LTEN1 ;小于十 MOV AH,00H ADD BX,AX JMP LDO1 ;大于十
LTEN1: SUB AL,0AH ;大于十去掉十位 MOV AH,00H ADD BX,AX LDO1: MOV DX,0FF22H
MOV AL,BYTE PTR CS:[BX] OUT DX,AL MOV DX,0FF21H MOV AL,00010000B OUT DX,AL ;过滤
MOV DX,0FF21H MOV AL,00000000B OUT DX,AL
;十位
MOV BX,OFFSET DATA1 MOV AL,T_1 CMP AL,0AH JAE LTEN2 ;小于十
MOV AX,0000H JMP LDO2
LTEN2: MOV AX,0001H
LDO2: ADD BX,AX MOV DX,0FF22H
MOV AL,BYTE PTR CS:[BX] OUT DX,AL MOV DX,0FF21H MOV AL,00100000B OUT DX,AL
;过滤
MOV DX,0FF21H MOV AL,00000000B OUT DX,AL
31
北京理工大学珠海学院计算机学院课程设计
;右边 ;;;;;;;;;;;;;;;;;;;;;;;;; ;个位
MOV BX,OFFSET DATA1 MOV AL,T_2 CMP AL,0AH JAE RTEN1 ;小于十 MOV AH,00H ADD BX,AX JMP RDO1 ;大于十
RTEN1: SUB AL,0AH ;大于十去掉十位 MOV AH,00H ADD BX,AX
RDO1: MOV DX,0FF22H
MOV AL,BYTE PTR CS:[BX] OUT DX,AL MOV DX,0FF21H MOV AL,00000001B OUT DX,AL
;过滤
MOV DX,0FF21H MOV AL,00000000B OUT DX,AL
;十位
MOV BX,OFFSET DATA1 MOV AL,T_2 CMP AL,0AH JAE RTEN2 ;小于十
MOV AX,0000H JMP RDO2
RTEN2:MOV AX,0001H
RDO2:ADD BX,AX MOV DX,0FF22H
MOV AL,BYTE PTR CS:[BX] OUT DX,AL MOV DX,0FF21H
32
北京理工大学珠海学院计算机学院课程设计
MOV AL,00000010B OUT DX,AL RET CODE ENDS
END BEGIN
33
因篇幅问题不能全部显示,请点此查看更多更全内容