微机原理课程设计模拟交通灯.docx
微机原理课程设计模拟交通灯 微机原理课程设计报告书 湖南科技大学 信息与电气工程学院 微机原理与接口技术课程设计 题 目: 模拟交通灯 专 业: 通信工程 班 级: 通信一班 姓 名: 学 号: 指导老师: 欧青立 微机原理课程设计报告书 目录 前 言1 第一章:模拟交通灯的功能与设计方案1 1.1 功能规划1 1.2 设计思路1 第二章:模拟交通灯的硬件电路 1 2.1 8255A与8259A芯片原理1 2.2 交通灯控制模块电路设计4 2.3 倒计时显示模块电路设计5 2.4 中断电路设计5 2.5 PCB图 5 第三章:模拟交通灯的软件设计 6 3.1 程序流程图6 3.2 程序代码6 第四章:模拟交通灯的调试10 4.1 调试过程 10 4.2 调试中产生的问题以及解决办法 11 第五章:设计体会与小结11 参考文献 12 微机原理课程设计报告书 微机原理课程设计报告书 前言 此次课程设计为模拟交通灯,是采用计算机通过编写汇编语言程序控制的。红灯停,绿灯行的交通规则。广泛用于十字路口,车站, 码头等公共场所,成为人们出行生活中不可少的必需品,由于计算机技术的成熟与广泛应用,使得交通灯的功能多样化,远远超过老式交通灯, 交通灯的数字化给人们生产生活带来了极大的方便,而且大大地扩展了交通灯的功能。诸如闪烁警示、鸣笛警示,时间程序自动控制、倒计时显示,所有这些,都是以计算机为基础的。还可以根据主、次干道的交通状况的不同任意设置各自的不同的通行时间。或者给红绿色盲声音警示的人性化设计。现在的交通灯系统很多都增加了智能控制环节,比如对闯红灯的车辆进行拍照。当某方向红灯亮时,此时相应的传感器开始工作,当有车辆通过时,照相机就把车辆拍下。 要将交通灯系统产品化,应该根据客户不同的需求进行不同的设计,应该在程序中增加一些可以人为改变的参数,以便客户根据不同的需要随时调节交通灯。因此,研究交通灯及扩大其应用,有着非常现实的意义。 第一章:模拟交通灯的功能与设计方案 1.1 功能规划 通过调研与资料搜寻,了解交通灯的工作过程。经过分析,该课程设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时。在运行的过程中要显示红绿灯等待时间,使程序顺利运行,交通灯持续工作。 1.2 设计思路 1南北方向车辆放行9秒钟。即东西方向红灯和南北方向的绿灯同时点亮9钟; 29秒钟后,南北方向的绿灯闪烁三次,以警示车辆将切换红绿灯。此时东西方向仍维持红灯点亮。 3南北方向的绿灯闪烁三次后,转为东西方向放行9秒钟。即东西方向的绿灯和南北方向的红灯同时点亮9秒钟; 4东西方向放行9秒钟后,转为东西方向的绿灯闪烁三次,以警示将切换红绿灯。此时南北方向仍维持红灯点亮。 5东西方向的绿灯闪烁三次后转为南北方向放行9秒钟。如此循环重复。 第二章 :模拟交通灯的硬件电路 2.1 8255A与8259A芯片原理 2.1.1 8255A芯片介绍 芯片概述 Intel 8086/8088 系列的可编程外设接口电路,具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。全部输入输出均与TTL电平兼容。他有三个输出端,每侧端口都可以通过编程设定为输入端口或输出端口,芯片还有为输入输出端口提供的控制联络1 信号,端口寻址信号等。 微机原理课程设计报告书 8255A的内部结构 8255A内部由PA、PB、PC三个8位可编程双向I/O口,A组控制器和B组控制器,数据缓冲器及读写控制逻辑四部分电路组成。 8255A的引脚功能 数据总线:D0D7,用于传送CPU和8255A间的数据、命令和状态字。 控制总线: RESET:复位线,高电平有效。 /CS:片选线,低电平有效。 /RD、/WR:/RD为读命令线,/WR为写命令线,皆为低电平有效。 A0、A1:地址输入线:用于选中PA、PB、PC口和控制寄存器中哪一个工作。 并行I/O总线 :用于和外设相连,共分三组 8255A控制字和状态字 8255A有两个控制字:方式控制字和C口置位/复位控制字。用户通过程序可以把这两个控制字送到8255A的控制寄存器,以设定8255A的工作方式和C口各位状态。 方式控制字用于设定8255A三个端口工作于什么方式,是输入还是输出方式。 方式控制字: 方式控制字用于设定8255A三个端口工作于什么方式,是输入还是输出方式。 2 微机原理课程设计报告书 图2.1.1工作方式控制字 图2.1.1 复位控制字 C口置位/复位控制字 本控制字可以使C口各位单独置位或复位,以实现某些控制功能。见图 2.1.2 8259A芯片介绍 芯片概述 8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259A能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。8259A有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。 在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。 8259A的内部结构 结构如图2.1.2 1)中断请求寄存器,中断请求寄存器为8位,接受来自IR0IR7的中断请求信号,当IR0IR7上出现某一中断请求信号时,IRR对应位被置1; 3 微机原理课程设计报告书 2)中断屏蔽寄存器IMR,中断屏蔽寄存器IMR 为8位,若IRR中记录的8个中断请求中有任何一个需要屏蔽,只要将IMR的相应位置1即可,未被屏蔽的中断请求可以进入优先权判别器;它的内容由CPU通过对8259初始化时设置设定。 3)中断服务寄存器ISR,8位,保存当前正在处理的中断请求,例如,如果ISR的D2=1,表示CPU正在为来自IR2的中断请求服务。 4)优先权判别器PR,若某中断请求正在被处理,8259A外部又有新的中断请求,则由优先权判别器将新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高。若新的中断请求比正在处理的中断级别高,由PR通过控制逻辑向CPU发出中断申请INT,正在处理的中断自动被禁止,先处理级别高的中断。 5)数据总线缓冲器,用于8259A与数据总线的接口,传输命令控制字、状态字和中断类型码。 6)读/写控制逻辑,确定数据总线缓冲器中数据的传输方向,选择内部的各命令字寄存器。当CPU发读信号时将8259A的状态信息放到数据总线上;当CPU发写信号时,将CPU发来的命令字信息送入指定的命令字寄存器中。 7)级联缓冲/比较器,用来存放和比较在系统中用到的所有8259A的级联地址。主控8259A通过CAS0、CAS1和CAS2发送级联地址,选中从控8259A。 8259A的功能 功能:就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。 8259A操作命令字 操作命令字如下: 2.2 交通灯控制模块电路设计 交通灯控制模块采用8255控制四个双色灯来实现,用8255的PC口连接实验板上的双色灯模块,PA0PA7分别连接双色灯的DG0、DG1、DG2、DG3、DR0、 DR 1、DR2、 DR3。4 微机原理课程设计报告书 8255片选端cs接74ls138译码电路模块的210H口。 电路如图: 2.3 倒计时显示模块电路设计 计时模块电路采用实验板上的串并转换模块来实现,用8255的PA0口连接到串并转换模块的数据端,用PB0产生clk脉冲,连接到串并转换模块的脉冲端口。 电路如图: 2.4 中断模块电路 电路如图:采用IR0作为中断源。CS片选接138译码器Y0。 2.5 PCB图 5 微机原理课程设计报告书 第三章:模拟交通灯的软件设计 3.1 设计流程图 初始化 设置8255各口为输出 清LED 四灯全红延时 南北绿灯,东西红灯,延时 绿灯闪三次 南北黄灯,延时 南北红灯,东西绿灯,延时 绿灯闪三次 6 微机原理课程设计报告书 3.2程序代码: 程序代码如下: 6.程序代码: ;程序标识初始化 PA0 EQU 0210H ;将8255PA口地址标识为PA PB0 EQU 0211H ;8255PB口地址 PC EQU 0212H ;8255PC口地址 PCT EQU 0213H ;8255控制口地址 DATA SEGMENT PB DB ? DATA ENDS STACK SEGMENT STACK STA DW 50 DUP(?) ;定义堆栈大小50 word DW类型 TOP EQU LENGTH STA ;指向栈顶 STACK ENDS ;开始 CODE SEGMENT ;代码段开始声明 ASSUME CS:CODE,DS:CODE ;假定伪指令,CODE为代码段 START: MOV AL,13H ;初始化8259A MOV DX,200H OUT DX,AL MOV AL,8 MOV DX,201H OUT DX,AL MOV AL,01H OUT DX,AL MOV AX,0 MOV DS,AX LEA AX,INT0 MOV DS:4*8,AX MOV AX,CS MOV DS:4*8+2,AX IN AL,DX 7 微机原理课程设计报告书 AND AL,0FEH OUT DX,AL PUSH CS ;压栈指令,将IP压栈,用于保存断点 POP DS ;出栈指令 MOV DX,PCT ;设置8255口为输出口 MOV AL,10000000B ;全输出模式 OUT DX,AL MOV DX,PC ;设置PC口为输出电平端口 MOV AL,00H OUT DX,AL MOV DX,PC MOV AL,0FH OUT DX,AL MOV BX,7fH CALL DELAY BEGIN: MOV AL,96H ; OUT DX,AL MOV BX,D2 CALL TIME ; MOV DX,PC ; MOV CX,03H JNZ UPDOWN UPDOWN: MOV AL,9FH ; OUT DX,AL MOV BX,D1 CALL DELAY MOV AL,96H ; OUT DX,AL MOV BX,D1 CALL DDELAY LOOP UPDOWN ; MOV AL,06H ; OUT DX,AL MOV BX,D1 CALL DELAY MOV BX,D1 CALL DELAY MOV AL,69H ; OUT DX,AL MOV BX,D2 CALL TIME ; MOV DX,PC ; ;四个双色LED都置低电平 上下绿灯,左右红灯 倒计时9秒 上下左右灯均亮红灯 上下绿灯灭 上下绿灯亮 循环至UPDOWN,循环cx次,执行一次cx减一上下灯黄色 上下灯红,左右灯绿 倒计时9秒 将PC口地址送dx 8 微机原理课程设计报告书 MOV CX,03 LEFTRT: MOV AL,6FH ;左右绿灯灭 OUT DX,AL MOV BX,D1 CALL DELAY MOV AL,69H ;左右绿灯亮 OUT DX,AL MOV BX,D1 CALL DELAY LOOP LEFTRT ; MOV AL,09H ; OUT DX,AL MOV BX,D1 CALL DELAY MOV BX,D1 CALL DELAY STI ; JMP BEGIN ; ; TIME PROC NEAR PUSH DX ;PUSH CX PUSH AX PUSH BX BEGIN1: MOV AL,0 MOV CH,0 NUMBER1: MOV AH,AL LEA BX,LED XLAT ;XLAT MOV CL,8H ;NUMBER2: MOV DX,PA0 OUT DX,AL PUSH AX MOV DX,PB0 ; MOV AL,0AH ;PB0 OUT DX,AL MOV AL,0BH ;PB0 OUT DX,AL POP AX 循环至LEFTRT,循环cx次,执行一次cx减一 左右灯黄色 开中断 无条件跳转至BG 压栈,用来保护原先各寄存器的值 为查表命令,其操作为BX+AL->AL 设置一个初值 利用8255PB0口控制DCLK时钟信号。 置"0" 置"1" 9 微机原理课程设计报告书 RCR AL,1 ;将AL右移一位 DEC CL ;自减1,初值在前面设置为8H CMP CL,0 ;比较指令,相等,则影响标志位zf=1、cf等 JNZ NUMBER2 ;ZF为0时跳转 CALL DELAY MOV AL,AH INC AL ;AL+1 INC CH CMP CH,0AH ;循环10次 JBE NUMBER1 ; POP DX POP CX POP BX POP AX ; RET TIME ENDP ; INT0: PROC NEAR PUSH CX PUSH AX PUSH BX MOV AL,0F6H OUT DX,AL MOV CX,10 ;DEY0: CALL DELAY LOOP DEY0 POP BX ; POP AX POP CX BG2: MOV DX,200H MOV AL,20H OUT DX,AL IRET INT0 ENDP ; DELAY PROC NEAR PUSH CX MOV BL,25 XH: MOV CX,2810H LOOP $ DEC BL JNZ XH POP CX 调用数码管 出栈,还原个寄存器的值 设置循环初值次数 出栈 10 微机原理课程设计报告书 RET DELAY ENDP ; LED: DB 09H,01H,1FH,41H,49H,99H,0DH,25H,9FH,03H ;9 8 7 6 5 4 3 2 1 0 CODE ENDS END START 第四章:模拟交通灯的调试 4.1调试过程 按照硬件电路设计连接好实验板上的电路后,使用adk88软件编写程序,程序编写完成后点击编译,确认无错误后打开实验板电源。点击链接,使PC机与实验板之间通信。完成程序里所描述的写入控制字等操作。然后观察实验板上的红绿灯闪烁情况以及串并转换模块里的倒计时情况是否顺利。 4.2 调试中产生的问题以及解决办法 a) 软件延时调节不精确 采用软件延时,设计简单,使用方便,但是无法进行精确计时,因此灯光闪烁间隔不明确。调节至大约一秒转换一次这个过程比较繁琐。后来经过查资料,统一使用一个1s的延时程序,解决了这个问题。 b)显示模块出现乱码 刚开始使用8253计时,然后8255连接数码管显示倒计时。但是实现较为复杂而且实验板结构限制,因此听取老师建议,使用了串并转换模块的倒计时而没有采用8253计时,节约了端口数的资源占用。比较好地解决了这个问题。 c) 地址发生冲突导致没观察到想要的交通灯循环现象 刚开始调试时,8259A地址与8255A地址由于实验板原因需要公用一个138译码器进行地址译码,在实验中也需要加载初始化程序和中断服务程序,并且需要指定中断服务地址和中断向量号。于是在初始化程序之后再加压栈出栈操作,解决了这个问题。 第五章:设计体会与小结 首先感谢这两周以来各位老师与研究生学长学姐对我们各种问题的耐心回答与给予我们的帮助。此次课程设计可以说是获益匪浅。通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:仔细谨慎,精益求精。在程序中添加了绿灯闪烁,更加醒目。另外加入能够实现各路口绿灯显示时间不同,适应在主干道和支线路口中使用。在系统加电调试中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术11 微机原理课程设计报告书 对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对微机原理与系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了微机系统是如何处理命令的,如何协调各个部件运行,对微机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。此次的课程设计,对我的帮助非常之大,让我在复习微机原理课程时得心应手。 参考文献 1 欧青立,沈洪远.微机原理与接口技术实验指导书M.湖南.湖南科技大学出版社.2014 2 朱晓华,李洪涛.微机原理与接口技术(第二版)M.北京.电子工业出版社,2012 3 龚尚福.微机原理与接口技术M.西安:西安电子科技大学出版社,2003 4 王忠民.微型计算机原理M.西安:西安电子科技大学出版社,2003 5 李彦宏.百度百科M.北京.网络出版社.2014 12