1、交通灯设计1中南大学微机课程设计报告题 目 交通灯设计 专 业班级 姓 名 学 号 指导老师 林立新老师 交通灯设计2目录1. 课程设计题目、功能、目的22. 系统分析与设计32.1 系统所用芯片分析32.2 所选用芯片的简要介绍42.3 系统框图63. 程序设计.73.1 十字路口交通灯状态转换表73.2 主程序流程图73.3 中断子程序流程图83.4 数码管码表83.5 各芯片初始化说明.94. 运行情况.105. 具体源代码及注释116. 心得体会.16交通灯设计3一、 课程设计题目、功能、目的1. 课程设计题目-交通灯设计2. 本设计所实现功能1) 实现十字路口交通灯各种状态的转换;2
2、) 各种状态转换的时间可进行灵活设置;3) 采用中断的方法对状态转换进行控制,提高处理器效率;4) 在各个状态转换的同时实现倒计时提醒。3. 本次课程设计目的1) 通过微机原理与接口课程设计,使学生能够进一步了解微型计算机工作原理, 微型计算机的硬件结构及微型计算机软件编程。2) 要求学生根据接口电路的硬件要求进行计算机的汇编语言程序设计,使学生的软件编程能力得到加强,对接口电路的综合应用能力有较大提高。交通灯设计4二、 系统分析与设计1. 系统所用芯片分析1) 首先本个系统需要一个中央处理器来负责对整个系统进行控制管理,因为微机原理与接口技术这门课上介绍了8086 芯片,所以可以采用 808
3、6 作为本系统的中央处理器。2) 由于本次的课程设计的题目是交通灯,而根据十字路口处的交通灯南北和东西方向各有红、绿、黄三种颜色的灯,因此可用 8255 来控制 6 个 LED 灯的实现模拟的南北和东西方向上的交通灯。3) 而交通灯的状态转换时间要由中断方式来控制,所以很容易想到了可以用 8259 作为中断芯片,与 8086 芯片相连。4) 交通灯的状态转换时间可灵活设置,于是想到了可以采用一块 8253 或 8254 芯片和一个脉冲源相连, 8253 对脉冲源送来的脉冲进行分频,然后将输出送到 8259 作为中断源,而8253 采用不用的计数初值其输出脉冲的频率就不一样,因此实现了交通类状态
4、转换时间的灵活设置。5) 最后关于交通灯状态转换的倒计时功能,可由一个七段数码管来显示倒计时,而本次课程设计的实验箱没有提供单个数码管,而是提供了一个八位一体七段数码管,所以还需一块8279 芯片来对数码管进行控制。交通灯设计52. 所选用芯片的简要介绍8255 是 Intel 公司生产的可编程并行 I/O接口芯片,有 3 个 8 位并行 I/O 口。具有 3个通道 3 种工作方式的可编程并行接口芯片(40 引脚) 。 其各口功能可由 软件选择,使用灵活,通用性强。8255 可作为 单片机与多种外设连接时的中间接口电路。8255 作为主机与外设的连接芯片,必须提供与主机相连的 3 个总线接口
5、,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口 A、B、C 口。由于 8255 可编程, 所以必须具有逻辑控制部分,因而8255 内部结构分为 3 个部分:与 CPU 连接部分、与外设连接部分、控制部分。intel8253 是 NMOS 工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz) ,8253-5(5MHz) 8253 内部有三个计数器,分别称为计数器0、计数器 1 和计数器 2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通
6、过三个引脚和外部联系,一个为时钟输入端 CLK,一个为门控信号输入端 GATE,另一个为输出端 OUT。每个计数器内部有一个 8 位的控制寄存器,还有一个 16 位的计数初值寄存器CR、一个计数执行部件 CE 和一个输出锁存器OL。执行部件实际上是一个 16 位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。输出锁存器的值是通过程序设置的。输出锁存器 OL 用来锁存计数执行部件 CE 的内容,从而使 CPU 可以对此进行读操作。顺便提一下,CR、CE 和 OL 都是 16 位寄存器,但是也可以作 8 位寄存器来用。交通灯设计6Intel 8086 拥有四个 16
7、 位的通用寄存器,也能够当作八个 8 位寄存器来存取,以及四个 16位索引寄存器(包含了堆栈指标) 。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供 64K 8 位元的输出输入(或32K 16 位元) ,以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个寄存器。Intel 8086 有四个 内存区段(segment)寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取 1 MB 内存。8086 把段地址左移 4 位然后把它加上偏移地址。大部分的人都认为这是一个很不好的设计,因
8、为这样的结果是会让各分段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用) ,可以完全地控制分段,使在编程中使用指针(如 C 编程语言) 变得困难。它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是,这种方式产生要让内存扩充到大于 1 MB 的困难。而 8086 的寻址方式改变让内存扩充较有效率。8086 处理器的时钟频率介于 4.77MHz(在原先的 IBM PC 频率)和 10 MHz 之间。 8086 没有包含浮点指令部分(FPU) ,但是可以通过外接数学辅助处理器来增强浮点计算能力。交通灯设计73. 系统框图交通灯设计8三、 程序设计1.
9、 十字路口交通灯状态转换表:南北方向 东西方向 十六进制代码红 绿 黄 红 绿 黄0 0 1 0 0 0 1 0 22H0 0 1 0 0 0 0 1 21H0 0 0 1 0 1 0 0 14H0 0 0 0 1 1 0 0 0CH2. 主程序流程图:交通灯设计93. 中断子程序流程图:4. 共阴数码管码表:数字 0 1 2 3 4编码 0x3F 0x06 0x5B 0x4F 0x66数字 5 6 7 8 9编码 0x6D 0x7D 0x07 0x7F 0x90交通灯设计1058259 初始化说明MOV AL,13H ;写 ICW1,需要 ICW4、单片工作、边沿触发方式MOV DX,INT
10、PORT1OUT DX,ALMOV AL,08H ;写 ICW2,设置中断向量号MOV DX,INTPORT2OUT DX,ALMOV AL,09H ;写 ICW4,普通全嵌套方式、采用缓冲方式OUT DX,ALMOV AL,0F7H ;写 OCW1,只开 IR3 中断请求,其余屏蔽OUT DX,AL68253 初始化说明MOV DX,TCONTROMOV AL,10110100B;采用二进制计数方式,工作方式二,十六们计数,计数器二OUT DX,ALMOV DX,TCON2MOV AL,0AH ;计数初值为 10,即 1S 中断一次OUT DX,ALMOV AL,00HOUT DX,AL78
11、255 初始化说明MOV AL,80H ;PA、PB、PC 口都设定为输出工作方式MOV DX,IOCONPTOUT DX,AL交通灯设计11四、 运行情况经多次调试后,系统运行良好,实现了要求和设想中的全部功能,如上图为实际运行时的图片。交通灯设计12五、 具体代码及注释CODE SEGMENTASSUME CS:CODEINTPORT1 EQU 0020HINTPORT2 EQU 0021HINTQ3 EQU INTREEUP3 ;8259CONTPORT EQU 00DFHDATAPORT EQU 00DEH ;8279TCONTRO EQU 004BH ;8253TCON2 EQU 0
12、04AHIOCONPT EQU 0073H 所用芯片端口地址初始化IOCPT EQU 0072HIOBPT EQU 0071H ;8255DATA0 EQU 0580HDATA1 EQU 0500HDATA2 EQU 0508HDATA3 EQU 0518HDATA4 EQU 0520HORG 1000HSTART: JMP Tint1Tint1: CLIMOV AX,0HMOV DS,AXMOV DX,CONTPORTMOV AL,00HOUT DX,AL MOV AL,2AHOUT DX,AL MOV AL,0d0hOUT DX,AL MOV AL,90hOUT DX,AL MOV AL,
13、80HMOV DX,IOCONPT8279 初始化及工作方式的设定8255 初始化及工作方式的设定交通灯设计13OUT DX,ALMOV DX,TCONTROMOV AL,10110100BOUT DX,ALMOV DX,TCON2MOV AL,0AHOUT DX,ALMOV AL,00HOUT DX,ALCALL FORMATCLIMOV DI,DATA0MOV CX,08HXOR AX,AXREP STOSWMOV SI,DATA3CALL LEDDISP ;数码管显示初始图案“-”MOV AX,0HMOV DS,AXCALL WRINTVER ;调用子程序,设置中断地址向量表MOV AL
14、,13HMOV DX,INTPORT1OUT DX,ALMOV AL,08HMOV DX,INTPORT2OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0F7HOUT DX,ALMOV BYTE PTR DS:0601H,03HMOV BYTE PTR DS:0602H,00HSTI ;开中断WATING: JMP WATING ;等待中断,无限循环WRINTVER:MOV AX,0HMOV ES,AXMOV DI,002CHLEA AX,INTQ3STOSWMOV AX,CSSTOSWRET8253 初始化及工作方式的设定设置中断地址向量表子程序8259 初始化及工作
15、方式的设定交通灯设计14INTREEUP3: ;中断子程序CLIMOV AL,DS:0601HCALL CONVERSMOV SI,DATA0CALL LEDDISPCMP BYTE PTR DS:0601H,03HJNZ NEXTMOV DX,IOBPTCOMP: CMP BYTE PTR DS:0602H,00HJZ SI0CMP BYTE PTR DS:0602H,01HJZ SI1CMP BYTE PTR DS:0602H,02HJZ SI2CMP BYTE PTR DS:0602H,03HJZ SI3SI0: MOV AL,22HADD BYTE PTR DS:0602H,01HJM
16、P PUTSI1: MOV AL,21HADD BYTE PTR DS:0602H,01HJMP PUTSI2: MOV AL,14HADD BYTE PTR DS:0602H,01HJMP PUTSI3: MOV AL,0CHMOV BYTE PTR DS:0602H,00HJMP PUTPUT: MOV DX,IOBPTOUT DX,ALNEXT:MOV AL,20HMOV DX,INTPORT1OUT DX,ALSUB BYTE PTR DS:0601H,01HCMP BYTE PTR DS:0601H,00HJZ INTRE1JMP EXCONVERS:MOV BH,0H判断 DS:0
17、602H里面的值,并跟据结果来进行对应的转换交通灯设计15AND AL,0FHMOV BL,ALMOV AL,CS:BX+DATA2MOV BX,DATA0MOV DS:BX,ALRETINTRE1: MOV BYTE PTR DS:0601H,03H EX:MOV AL,20HMOV DX,INTPORT1OUT DX,ALSTIIRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:0600H,00LED1:CMP BYTE PTR DS:0600H,07HJA LED2MOV BL,DS:0600HMOV BH,0HMO
18、V AL,CS:BX+SIMOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:0600H,01HJNZ LED1LED2: RETFORMAT: MOV BX,0 ;MOV WORD PTR DS:BX+0500H,5050HADD BX,2MOV WORD PTR DS:BX+0500H,0079HADD BX,2MOV WORD PTR DS:BX+0500H,0000HADD BX,2MOV WORD PTR DS:BX+0500H,0000HADD BX,2MOV WORD PTR DS:BX+0500H,063FHADD BX,2MOV WORD PTR
19、DS:BX+0500H,4F5BH显示子程序,从左到右依次送数格式化内存,将数码管将要显示的字符的编码写入内存中断结束控制方式 OCW2,普通中断结束方式交通灯设计16ADD BX,2MOV WORD PTR DS:BX+0500H,6D66HADD BX,2MOV WORD PTR DS:BX+0500H,077DHADD BX,2MOV WORD PTR DS:BX+0500H,6F7FHADD BX,2MOV WORD PTR DS:BX+0500H,7C77HADD BX,2MOV WORD PTR DS:BX+0500H,5E39HADD BX,2MOV WORD PTR DS:BX
20、+0500H,7179HADD BX,2MOV WORD PTR DS:BX+0500H,4040HADD BX,2MOV WORD PTR DS:BX+0500H,4040HADD BX,2MOV WORD PTR DS:BX+0500H,4040HADD BX,2MOV WORD PTR DS:BX+0500H,4040HADD BX,2RETCODE ENDSEND START交通灯设计17六、 心得体会本学期的微机原理和接口技术及其课程设计都已经结束。在这个过程中,我们有所付出,也有所回报,让我感受颇多。 对于微机原理与接口技术这门课程而言,初学时,感觉摸不着头绪。面对着众多的术语、概
21、念及原理性的问题不知道该如何下手。在了解课程的特点后,我发现,应该以微机的整机概念为突破口,在如何建立整体概念上下功夫。 “麻雀虽小,五脏俱全” ,可以通过学习一个模型机的组成和指令执行的过程,了解和熟悉计算机的结构、特点和工作过程。 微机原理与接口技术课程有许多新名词、新专业术语。透彻理解这些名词、术语的意思,为今后深入学习打下基础。一个新的名词从首次接触到理解和应用,需要一个反复的过程。而在众多概念中,真正关键的并不是很多。比如“中断”概念,既是重点又是难点,如果不懂中断技术,就不能算是搞懂了微机原理。在学习中凡是遇到这种情况,绝对不轻易放过,要力求真正弄懂,搞懂一个重点,将使一大串概念迎
22、刃而解。学习过程中,我发现许多概念很相近,为了更好地掌握,将一些容易混淆的概念集中在一起进行分析,比较它们之间的异同点。比如:微机原理中,引入了计算机由五大部分组成这一概念;从中央处理器引出微处理器的定义;在引出微型计算机定义时,强调输入/输出接口的重要性;在引出微型计算机系统的定义时,强调计算机软件与计算机硬件的相辅相成的关系。微处理器是微型计算机的重要组成部分,它与微型计算机、微型计算机系统是完全不同的概念。 微处理器、微型计交通灯设计18算机和微型计算机系统在微机中,最基础的语言是汇编语言。汇编语言是一个最基础最古老的计算机语言。语言总是越基础越重要,在重大的编程项目中应用最广泛。就我的
23、个人理解,汇编是对寄存的地址以及数据单元进行最直接的修改。而在某些时候,这种方法是最有效,最可靠的。比如,在当今的战争中,首先就是运用这方面的知识来修改地方的系统程序。让地方的卫星偏离轨道,从而不能发现目标。其威力可见一斑。 然而,事物总有两面性,有优点自然缺点也不少。其中,最重要的一点就是,汇编语言很复杂,对某个数据进行修改时,本来很简单的一个操作会用比较烦琐的语言来解决,而这些语言本身在执行和操作的过程中,占有大量的时间和成本。在一些讲求效率的场合,并不可取。汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。学习事物总是从最简单基础的开始。那么学习高级语言也当然应当从汇编开始。学
24、习汇编语言实际上是培养了学习计算机语言的能力和素养。个人认为,学习汇编语言对学习其他语言很有促进作用。 汇编语言在本学期微机学习中有核心地位。本学期微机原理课程内容繁多,还学习了可编程的计数/定时的8253,可编程的外围接口芯片 8255A 等。学的都是芯片逻辑器件,而在名字前都标有“可编程” ,其核心作用不可低估。我认为,在学习中要考虑到“学以致用” ,因此,在接下来我们又安排了微机原理与接口技术的课程设计。 经过本次微机课题的设计与研究,我们深入的学习了除课本以外交通灯设计19的很多微机附件的内容,掌握了很多实验室操作技能。我们在实际设计中遇到很多问题,但结合所学知识以及参考资料的帮助,不
25、断地尝试,设计了一种能够解决实际问题的系统。同时也加深了我们对于现实生活中,实际的嵌入式操作系统的原理的理解。 在实际设计过程中,我们遇到了诸多设计的问题。例仿真系统中某些芯片没有,这一问题主要是因为我们所设计的功能诸多,刚开始对于这一设计在硬件方面设计不是非常的合理,后来通过使用所用仿真软件的绘画功能,新增加了一个芯片便解决了所有的按键和现实问题。 在程序设计中,我们更加深入了解了 8086 的使用与本质。为了能设计成功,我们查阅了各种关于其硬件连接和软件设计的资料,同时也发现了理论资料与实践上的区别,通过多次尝试,成功完成了硬件和软件的设计。在这次课题设计过程中,我们合理的分工,适宜的规划进度的进展,不仅仅按时完成了预先设计的内容,而且学到了很多书本上没有的知识。 在这一过程中,我们充分发挥我们的主观能动性,想象创造性,攻克了很多之前都没有想过的难关,真的受益匪浅。这次设计不仅仅耗时耗力,而且还要整天对着电脑进行仿真且不停的调试、修改,这次课程设计对我们理论和实验都有很大的提升,我想这些对于我们今后的学习生活都有很重要的意义,这将是我们在程序设计以及大学学习过程中的宝贵经验和财富。