十字路口交通灯模拟课程设计报告.doc_第1页
十字路口交通灯模拟课程设计报告.doc_第2页
十字路口交通灯模拟课程设计报告.doc_第3页
十字路口交通灯模拟课程设计报告.doc_第4页
十字路口交通灯模拟课程设计报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计总说明本课程设计题目的主要内容是模拟十字路口交通灯(红、黄、绿三色)的显示控制。完成的功能为:1 主干道计时60秒,次干道计时45秒,时间到则切换红绿灯;2 红绿灯不变期间,在七段数码管上显示每秒倒计时;3 计时到最后5秒时,两个方向的黄灯同时闪烁直至计时到0。4 出现特殊状况时人为给以中断限制交通。本文给出了利用西安唐都科教仪器公司的开放式微机教学实验系统TDN86/51模拟实现一个十字路口交通灯控制交通的详细过程。讨论了如何使用汇编语言对8259中断控制器、8255并行接口,和8253定时/计数器进行软件编程,以及硬件连接这些器件组成一个典型的微机系统的方法。运行结果表明,该系统工作良好,实现了要求的各项功能,并有所创新且达到了预期的效果。关键词:汇编程序,交通灯,8259A,8255,8253目录一、题目要求及方案分析 51.1、课程设计题目 51.2、基本要求 51.3、方案分析 5二、方案设计(硬件连线图,软件流程图) 52.1、模拟对象 62.2、芯片选择及硬件连线图 72.3、软件流程图 8三、试验程序10四、设计结果分析18五、设计过程中出现的问题及解决方法185.1、模块建立185.2、算法分析和源代码的编写185.3、调试18六、心得体会19七、致谢20八、参考文献20一、 题目要求及方案分析1.1、课程设计题目:十字路口交通灯模拟使用8255A的A口、B口、C口模拟十字路口交通灯的闪烁情况1.2、基本要求:1、设计实验电路(要求利用TDN86/51(西安唐都科教仪器公司产品)试验仪的硬件资源)2、分析实验原理3、采用汇编语言编写实验程序4、通过实验验证功能的实现5、编写课程设计说明书。1.3、方案分析:1.3.1、主要内容:模拟十字路口交通灯(红、黄、绿三色)的显示控制。1.3.2、设计要求为:(1)、主干道计时60秒,次干道计时45秒,时间到则切换红绿灯;(2)、红绿灯不变期间,在七段数码管上显示每秒倒计时;(3)、计时到最后5秒时,两个方向的黄灯同时闪烁直至计时到0。 1.3.3、具体分析: 利用TDN86/51(西安唐都科教仪器公司产品)中的8259A作为中断控制器;8253A作为计数器;用8255A实现交通灯的模拟;用实验仪器上的8个发光二极管的亮、灭来模拟红灯、绿灯、黄灯(具体见图)。二、方案设计(硬件连线图,软件流程图)2.1、模拟对象图2.1.1 十字路口交通灯模拟图 东 西 南 北 东 西 南 北 红 绿图2.1.2 实验仪器上的8个LED微机交通灯实时控制系统用于城市十字路口的交通管理。南北和东西路口各设红(Rm、Rs)、黄(YM、YS)、绿(GM、GS)三个交通灯(用LED模拟)。南北(A)向和东西(B)向的交通灯定时60秒或45秒交换一次。每次交换前,最后5秒8个 LED全部闪烁表示黄灯,共闪烁5次。2.2、芯片选择及硬件连线图 2.2.1、芯片选择: 8259A可编程中断控制器,并用其IQR7、IQR6、IQR5、IQR2、IQR1、IQR0中断实现对应一秒计时,复位等功能;8253可编程定时器/计数器,发放方波脉冲信号实现一秒计时。8255A并行接口三个芯片, 其中用C口控制LED来显示道路交通灯信息。2.2.2、硬件连线图:PB0PB78255APA0PA1PA2PA3PC0PC7SW-LED UNITD0D7 CLK28253AGATE2OUT2IRQ78259AIRQ6IRQ5IRQ2IRQ1IRQ0 OPCLK (1.19MHZ) +5V 50ms的方波 5个中断控制开关 图2.2.1 交通灯模拟_硬件连线图2.3、软件流程图图2.3.1 主程序流程图填IRQ7、IRQ6、IRQ5、IRQ2、IRQ1、IRQ0中断向量初始化8253开放IRQ7、IRQ6、IRQ5、IRQ2、IRQ1、IRQ0中断源初始化8255计数器CX置20开中断并等待中断调用绿灯显示程序最后5S?点亮绿灯N点亮黄灯CX为0?修改时间时间为0?NYYNY计数器CX置20开中断并等待中断调用红灯显示程序最后5S?点亮黄灯点亮红灯CX为0?修改时间时间为0?YNYNY开始 保存寄存器熄灭显示DI指向显示缓冲区CL指向第一位取一位数转为七段码送段码送位码延时5ms2位显示完了?图2.3.2显示子程序流程图DI+1,CL移位恢复寄存器记数变量减1发生中断结束命令图2.3.5中断IRQ6、IRQ2、 IRQ1 服务流程图图2.3.3 中断IRQ7服务流程图调用 MLOAD 或 SLOAD发生中断结束命令图2.3.4 中断IRQ5、IRQ0服务流程图8255 C口输出控制灯亮信号发生中断结束命令调用 DISP2开始中断入口中断出口中断入口中断入口中断出口中断出口出口三、试验程序STACK SEGMENT DB 64H DUP(60)STACK ENDSDATA SEGMENT T1 DB 00H T2 DB 06H LEDTAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: CLI;关中断 MOV AX,DATA MOV DS,AX MOV BX,OFFSET LEDTAL;8断码的首地址送BX PUSH DS MOV AX,0000H;填IQR7中断向量表 MOV DS,AX MOV AX,OFFSET IRQ7 ADD AX,2000H MOV SI,003CH MOV SI,AX MOV AX,0000H MOV SI,003EH MOV SI,AX POP DS CLI;关中断 PUSH AX PUSH DS MOV AX,0000H;填IQR6中断向量表 MOV DS,AX MOV AX,OFFSET IRQ6 ADD AX,2000H MOV SI,0038H MOV SI,AX MOV AX,0000H MOV SI,003AH MOV SI,AX POP DS POP AX CLI;关中断 PUSH AX PUSH DS MOV AX,0000H;填IQR5中断向量表 MOV DS,AX MOV AX,OFFSET IRQ5 ADD AX,2000H MOV SI,0034H MOV SI,AX MOV AX,0000H MOV SI,0036H MOV SI,AX POP DS POP AX CLI;关中断 PUSH AX PUSH DS MOV AX,0000H;填IQR2中断向量表 MOV DS,AX MOV AX,OFFSET IRQ2 ADD AX,2000H MOV SI,0028H MOV SI,AX MOV AX,0000H MOV SI,002AH MOV SI,AX POP DS POP AX CLI;关中断 PUSH AX PUSH DS MOV AX,0000H;填IQR1中断向量表 MOV DS,AX MOV AX,OFFSET IRQ1 ADD AX,2000H MOV SI,0024H MOV SI,AX MOV AX,0000H MOV SI,0026H MOV SI,AX POP DS POP AX CLI;关中断 PUSH AX PUSH DS MOV AX,0000H;填IQR1中断向量表 MOV DS,AX MOV AX,OFFSET IRQ1 ADD AX,2000H MOV SI,0020H MOV SI,AX MOV AX,0000H MOV SI,0022H MOV SI,AX POP DS POP AX IN AL,21H;开#7,#6,#5,#4,#2,#1,#1中断源,其中#4为串口 AND AL,08H OUT 21H,AL MOV AL,80H;初始化8255 ,A,B,C三口均工作在方式0 OUT 63H,AL MOV AL,0B6H;初始化8253,计数器#2工作在方式3,产生方波信号 OUT 43H,AL MOV AX,59500;传入50毫秒的初值 OUT 42H,AL;C口传出数据,先传低4位,然后传高4位 MOV AL,AH OUT 42H,AL MLOAD: MOV T1,00H;初始值显示60秒,并开始倒计时 MOV T2,06H COUNT_1: MOV CX,14H;作为1秒的中断次数计数器;主干道倒计时程序 DEC_60: STI;开中断 CALL DISP1 CMP T2,00H;判断十位是否减到0,如果不是则保持主干道绿灯亮 JNZ K1 CMP T1,05H;判断各位是否为5秒,如果是则用全部的灯闪烁表示黄灯 JG K1 MOV AL,00H;此处实现闪烁,8个发光二极管全亮 OUT 62H,AL CMP CX,0AH JG K2 MOV AL,0FFH;8个发光二极管全灭 OUT 62H,AL JMP K2 K1: MOV AL,33H ;显示主干道绿灯亮 通行 OUT 62H,AL K2: CMP CX,00H;判断是否到了一秒,然后倒计时减1 JNZ DEC_60 CMP T1,05H JG LIGHT_60 CMP T2,00H JNZ N1 TEST T1,0FFH;判断是否个位、十位均减到0 JNZ LIGHT_60 ;不是则继续倒计时 JMP SLOAD ;是则(标志位ZF=0)跳转到次干道程序 N1: TEST T1,0FFH;此处的功能是判断个位是否为0,且十位不为0 JNZ LIGHT_60 MOV T1,09H;是则使个位为9 DEC T2;十位减1 JMP COUNT_1 LIGHT_60:DEC T1 JMP COUNT_1 ;次干道倒计时程序(次干道内的程序注释与主干道的对应一致)。 SLOAD: MOV T1,05H MOV T2,04H COUNT_2: MOV CX,14H DEC_45: STI;开中断 CALL DISP1 CMP T2,00H;判断十位是否减到0,如果不是则保持主干道绿灯亮 JNZ K3 CMP T1,05H;判断各位是否为5秒,如果是则用全部的灯闪烁表示黄灯 JG K3 MOV AL,00H;此处实现闪烁,8个发光二极管全亮 OUT 62H,AL CMP CX,0AH JG K4 MOV AL,0FFH;8个发光二极管全灭 OUT 62H,AL JMP K4 K3: MOV AL,0CCH;显示次干道绿灯亮 通行 OUT 62H,AL K4: CMP CX,00H;判断是否到了一秒,然后倒计时减1 JNZ DEC_45 CMP T1,05H JNBE LIGHT_45 TEST T2,0FFH JNZ N2 TEST T1,0FFH;判断是否个位、十位均减到0 JNZ LIGHT_45 ;不是则继续倒计时 JMP MLOAD ;是则(标志位ZF=0)跳转到主干道程序,依次循环 N2: TEST T1,0FFH;此处的功能是判断个位是否为0,且十位不为0 JNZ LIGHT_45 MOV T1,09H;是则使个位为9 DEC T2;十位减1 JMP COUNT_2LIGHT_45:DEC T1 JMP COUNT_2 EMER_M: MOV T1,40H;输出“”符号,表示不记时状态 MOV T2,40H STI;开中断 CALL DISP2 MOV AL,33H OUT 62H,AL JMP EMER_M EMER_S: MOV T1,40H;输出“”符号,表示不记时状态 MOV T2,40H STI;开中断 CALL DISP2 MOV AL,0CCH OUT 62H,AL JMP EMER_S NIGHT: MOV T1,40H;输出“”符号,表示不记时状态 MOV T2,40H STI;开中断 CALL DISP2 MOV AL,00H;发光二极管的亮灭闪烁 OUT 62H,AL CALL DELA MOV AL,0FFH OUT 62H,AL CALL DELA JMP NIGHT IRQ7: DEC CX ;确定是否为1秒的中断服务程序 MOV AL,20H OUT 20H,AL IRET IRQ6: MOV AL,20H ;此处的中断服务为突发状况时,允许主干道通行 OUT 20H,AL JMP EMER_M IRET IRQ5: MOV AL,20H ;此处的中断服务为突发状况后, ;回复主干道通行并正常进行交通灯管制 OUT 20H,AL JMP MLOAD IRET IRQ2: MOV AL,20H ;此处的中断服务为突发状况时,允许次干道通行 OUT 20H,AL JMP EMER_S IRET IRQ1: MOV AL,20H ;此处的中断服务为夜间“黄灯”闪烁提示 OUT 20H,AL JMP NIGHT IRET IRQ5: MOV AL,20H ;此处的中断服务为突发状况后, ;回复次干道通行并正常进行交通灯管制 OUT 20H,AL JMP SLOAD IRET DISP1 PROC NEAR ;显示子程序_1,用来显示8段数码管中0-9数字。 MOV DL,0FEH MOV SI,OFFSET T1;显示内容首地址送SI L1: MOV AL,DL;点亮最左边的显示器,位码送AL TEST AL,04H;判断是否点亮了从右往左的第二个LED JZ END1;已经点亮了 OUT 60H,AL;位码送A口 ROL AL,01H;改变位码 MOV DL,AL;位码送DL保存 MOV AL,SI;去要显示的字符 XLAT;把显示字符换成相应的8断段码 OUT 61H,AL;显示字符的8段码送端口B CALL DELAY;延时,1位显示器点亮的时间 INC SI;地址指正调整 JMP L1 END1: RET DISP1 ENDP DISP2 PROC NEAR;显示子程序_2:用来显示8段数码管中“”符号;表示为不计时状态。 MOV DL,0FEH MOV SI,OFFSET T1;显示内容首地址送SI L2: MOV AL,DL;点亮最左边的显示器,位码送AL TEST AL,04H;判断是否点亮了从右往左的第二个LED JZ END2;已经点亮了 OUT 60H,AL;位码送A口 ROL AL,01H;改变位码 MOV DL,AL;位码送DL保存 MOV AL,SI;去要显示的字符 OUT 61H,AL;显示字符的8段码送端口B CALL DELAY;延时,1位显示器点亮的时间 INC SI;地址指正调整 JMP L2 END2: RET DISP2 ENDP DELAY PROC NEAR ;软件延时子程序_1:延时5毫秒 PUSH DX PUSH AX MOV DX,20 LOOP1: MOV AX,10 L4: DEC AX JNZ L4 DEC DX JNZ LOOP1 POP AX POP DX RET DELAY ENDPDELA PROC NEAR ;软件延时子程序_2:延时约半秒用来控制;夜间“黄灯”闪烁时的亮灭延时 PUSH DX PUSH AX MOV DX,9500 LOOP2: MOV AX,10 L5: DEC AX JNZ L5 DEC DX JNZ LOOP2 POP AX POP DX RET DELA ENDP CODE ENDS END START 四、设计结果分析执行程序后8段数码管显示60,递减到5,期间南北绿灯亮,再减到0时红绿灯同时闪烁(表示黄灯),从0变为45,再递减到5,期间南北红灯亮,再减到0时红绿灯同时闪烁(表示黄灯),重复开始,实现交通灯的功能.与此同时我组还进行了任务创新,即增加了紧急情况下的中断控制;夜间无人情况下的“黄灯”闪烁提示以及完成紧急任务后或清晨时的交通管制回复(其中可以随时人为的选择主干道或次干道回复通行)。五、设计过程中出现的问题及解决方法在整个设计过程,每一阶段都存在一些或大或小问题,从开始的模块建立到最主要的算法分析和代码编写再到最后的调试成功。5.1、模块建立:要能够正确完整的解决问题,最关键的就是分析题目并对其建立相应的模块。此次实验我们将此题分为五大模块。分别是:实现“1”秒模块;实现显示模块;实现60秒倒计时模块;实现“黄灯”闪烁模块;中断控制实现复位、固定显示模块5.2、算法分析和源代码的编写:这一阶段是对所建立模块的具体实现过程,也是整个课程设计最重要的一步。开始思想过于混乱,最终借助于上学期已有的程序重新设立新的方案。我们把已有的电子钟程序经过细微的变动,使它成为我们需要的倒计时;然后加入红绿灯的显示子程序;最终就整体修改并不断完善。5.3、调试:这一阶段是最后的收尾工作,课程设计的每一步都是至关重要的。只用在不断的调试过程中,才会发现问题,解决问题,不断的去完善它。5.3.1、 语句格式问题:程序编好之后,进行调试,出现“OUT OF MEMORY”提示内存溢出,发现语句中的分号显示异常,在我们用微软输入的情况下,分号的显示与在拼音输入情况下的不一样,所以在同种输入环境下进行程序的编写,再次进行调试,以上问题得到解决。 5.3.2、硬件连接:在显示时数码管乱码或是数字显示十位与各位交叉,开始以为程序出错,在张老师的提示下才知道是数码管得连线接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论