当前位置:文档之家› 微机原理与接口技术课程设计-----交通灯设计

微机原理与接口技术课程设计-----交通灯设计

中南大学微机课程设计报告题目交通灯设计专业班级姓名学号指导老师林立新老师目录1.课程设计题目、功能、目的 (2)2.系统分析与设计 (3)2.1系统所用芯片分析 (3)2.2所选用芯片的简要介绍 (4)2.3系统框图 (6)3.程序设计 (7)3.1十字路口交通灯状态转换表 (7)3.2主程序流程图 (7)3.3 中断子程序流程图 (8)3.4 数码管码表 (8)3.5 各芯片初始化说明 (9)4.运行情况 (10)5.具体源代码及注释 (11)6.心得体会 (16)一、课程设计题目、功能、目的1.课程设计题目--------------交通灯设计2.本设计所实现功能1)实现十字路口交通灯各种状态的转换;2)各种状态转换的时间可进行灵活设置;3)采用中断的方法对状态转换进行控制,提高处理器效率;4)在各个状态转换的同时实现倒计时提醒。

3.本次课程设计目的1)通过《微机原理与接口》课程设计,使学生能够进一步了解微型计算机工作原理, 微型计算机的硬件结构及微型计算机软件编程。

2)要求学生根据接口电路的硬件要求进行计算机的汇编语言程序设计,使学生的软件编程能力得到加强,对接口电路的综合应用能力有较大提高。

二、系统分析与设计1.系统所用芯片分析1)首先本个系统需要一个中央处理器来负责对整个系统进行控制管理,因为《微机原理与接口技术》这门课上介绍了8086芯片,所以可以采用8086作为本系统的中央处理器。

2)由于本次的课程设计的题目是交通灯,而根据十字路口处的交通灯南北和东西方向各有红、绿、黄三种颜色的灯,因此可用8255来控制6个LED灯的实现模拟的南北和东西方向上的交通灯。

3)而交通灯的状态转换时间要由中断方式来控制,所以很容易想到了可以用8259作为中断芯片,与8086芯片相连。

4)交通灯的状态转换时间可灵活设置,于是想到了可以采用一块8253或8254芯片和一个脉冲源相连,8253对脉冲源送来的脉冲进行分频,然后将输出送到8259作为中断源,而8253采用不用的计数初值其输出脉冲的频率就不一样,因此实现了交通类状态转换时间的灵活设置。

5)最后关于交通灯状态转换的倒计时功能,可由一个七段数码管来显示倒计时,而本次课程设计的实验箱没有提供单个数码管,而是提供了一个八位一体七段数码管,所以还需一块8279芯片来对数码管进行控制。

2.所选用芯片的简要介绍8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

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位寄存器来用。

Intel 8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。

资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。

它提供64K 8 位元的输出输入(或32K16 位元),以及固定的向量中断。

大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。

运算结果会储存在操作数中的一个寄存器。

Intel 8086有四个内存区段(segment)寄存器,可以从索引寄存器来设定。

区段寄存器可以让CPU 利用特殊的方式存取1 MB内存。

8086把段地址左移 4 位然后把它加上偏移地址。

大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。

尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,,使在编程中使用指针(如C编程语言)变得困难。

它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。

更坏的是,这种方式产生要让内存扩充到大于 1 MB 的困难。

而8086 的寻址方式改变让内存扩充较有效率。

8086处理器的时钟频率介于4.77MHz(在原先的IBM PC频率)和10 MHz 之间。

8086 没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。

3.系统框图三、程序设计1.十字路口交通灯状态转换表:南北方向东西方向十六进制代码红绿黄红绿黄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 0CH 2.主程序流程图:3.中断子程序流程图:4.共阴数码管码表:数字0 1 2 3 4 编码0x3F 0x06 0x5B 0x4F 0x66 数字 5 6 7 8 9 编码0x6D 0x7D 0x07 0x7F 0x905.8259初始化说明MOV AL,13H ;写ICW1,需要ICW4、单片工作、边沿触发方式MOV DX,INTPORT1OUT DX,ALMOV AL,08H ;写ICW2,设置中断向量号MOV DX,INTPORT2OUT DX,ALMOV AL,09H ;写ICW4,普通全嵌套方式、采用缓冲方式OUT DX,ALMOV AL,0F7H ;写OCW1,只开IR3中断请求,其余屏蔽OUT DX,AL6.8253初始化说明MOV DX,TCONTROMOV AL,10110100B;采用二进制计数方式,工作方式二,十六们计数,计数器二OUT DX,ALMOV DX,TCON2MOV AL,0AH ;计数初值为10,即1S中断一次OUT DX,ALMOV AL,00HOUT DX,AL7.8255初始化说明MOV AL,80H ;PA、PB、PC口都设定为输出工作方式MOV DX,IOCONPTOUT DX,AL四、运行情况经多次调试后,系统运行良好,实现了要求和设想中的全部功能,如上图为实际运行时的图片。

五、具体代码及注释CODE SEGMENTASSUME C S:CODEINTPORT1 EQU 0020HINTPORT2 EQU 0021HINTQ3 EQU INTREEUP3 ;8259CONTPORT EQU 00DFHDATAPORT EQU 00DEH ;8279TCONTRO EQU 004BH ;8253TCON2 EQU 004AHIOCONPT 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,ALMOV AL,2AHOUT DX,AL MOV AL,0d0h OUT DX,AL MOV AL,90h OUT DX,ALMOV AL,80H MOV DX,IOCONPT 8279初始化及工作方式的设定8255初始化及工作方式的设定OUT DX,AL MOV DX,TCONTROMOV AL,10110100B OUT DX,ALMOV DX,TCON2 MOV AL,0AH OUT DX,AL MOV AL,00H OUTDX,ALCALL FORMAT CLI MOV DI,DATA0 MOV CX,08H XOR AX,AX REP STOSW MOV SI,DATA3 CALL LEDDISP ;数码管显示初始图案“-------” MOV AX,0H MOV DS,AX CALL WRINTVER ;调用子程序,设置中断地址向量表 MOV AL,13H MOV DX,INTPORT1 OUT DX,AL MOV AL,08H MOV DX,INTPORT2OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,0F7H OUT DX,AL MOV BYTE PTR DS:[0601H],03H MOV BYTE PTR DS:[0602H],00H STI ;开中断 WATING: JMP WATING ;等待中断,无限循环 WRINTVER:MOV AX,0H MOV ES,AX MOV DI,002CH LEA AX,INTQ3 STOSW MOV AX,CS STOSW RET8253初始化及工作方式的设定设置中断地址向量表子程序 8259初始化及工作方式的设定INTREEUP3: ;中断子程序CLIMOV AL,DS:[0601H]CALL 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],01HJMP 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 EX CONVERS:MOVBH,0H 判断DS:[0602H]里面的值,并跟据结果来进行对应的转换AND AL,0FHMOV BL,ALMOV AL,CS:[BX+DATA2]MOV 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],00 LED1:CMP BYTE PTR DS:[0600H],07HJA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0;MOV WORD PTR DS:[BX+0500H],5050H ADD BX,2MOV WORD PTR DS:[BX+0500H],0079H ADD BX,2MOV WORD PTR DS:[BX+0500H],0000H ADD BX,2MOV WORD PTR DS:[BX+0500H],0000H ADD BX,2MOV WORD PTR DS:[BX+0500H],063FH ADD BX,2MOV WORD PTR DS:[BX+0500H],4F5BH 显示子程序,从左到右依次送数格式化内存,将数码管将要显示的字符的编码写入内存中断结束控制方式OCW2,普通中断结束方式ADD 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+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六、心得体会本学期的微机原理和接口技术及其课程设计都已经结束。

相关主题