资源描述
青 岛 大 学
理学与信息科学学院
通 信 原 理 课 程 设 计 报 告
设 计 题 目 交通灯微机接口设计
学生专业班级 电子信息工程07级2班
学生姓名(学号) 林飞(20074345)
指 导 教 师 孙洁老师
完 成 时 间
实 习(设计)地点 信息楼机房
微机原理课程设计报告
一、 设计题目
数字控制系统在交通路灯管理中的应用
二、 设计内容
设有一十字路口,1、3为南北方向,2、4为东西方向。每个路口均有红、黄、绿三个灯初始状态为四个路口的红灯亮,3秒之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口通车;延时45秒后,1、3路口绿灯闪烁3秒,后绿灯灭,黄灯亮,3秒后,1、3路口的红灯亮,而同时2、4路口的绿灯亮,2、4路口开始通车;延时40秒后,2、4路口绿灯闪烁3秒后绿灯灭,黄灯亮,3秒后,2、4路口的红灯亮,同时1、3路口的红灯亮(即四个路口的红灯亮),3秒之后,1、3路口的绿灯亮,2、4路口的红灯亮,重复上面的过程。
三、 设计思路与步骤
1)设计内容分析:
通过分析设计要求找出灯亮的规律:
1. 东西南北两个方向起始状态全为红,延续3秒。
2. 东西方向红灯亮,南北方向绿灯亮,延续45秒。
3. 东西方向红灯亮,南北方向绿灯以频率1HZ闪烁3秒。
4. 东西方向红灯亮,南北方向黄灯亮,延续3秒。
5. 东西方向绿灯亮,南北方向红灯亮,延续40秒。
6. 东西方向绿灯亮以频率1HZ闪烁3秒,南北方向红灯。
7. 东西方向黄灯亮,南北方向红灯亮,延续3秒。
8. 东西方向红灯亮,南北方向红灯亮循环以上步骤。
通过分析灯亮的规律,总结出如下的功能表:
交通灯亮灭功能表
灯
状态
南北
红L1
东西红L2
南北
黄L3
东西
黄L4
南北
绿L5
东西
绿L6
L7
无效
L8
无效
状态1
1
1
0
0
0
0
0
0
状态2
0
1
0
0
1
0
0
0
状态3
0
1
0
0
0
1
0
0
0
状态4
0
1
1
0
0
0
0
0
状态5
1
0
0
0
0
1
0
0
状态6
1
0
0
0
0
0
1
0
0
状态7
1
0
0
1
0
0
0
0
转换成控制码为:
交通灯控制码表
十六进制
二进制
状态1
03H
00000011B
状态2
12H
00010010B
状态3
02H
12H
00000010B
00010010B
状态4
06H
00000110B
状态5
21H
00100001B
状态6
01H
21H
00000001B
00100001B
状态7
09H
00001001B
2)电路设计的思路:
1、计时功能实现逻辑:
通过8253计数器0和计数器1级联实现准确定时;用8255的A口低六位控制东西、南北路口交通灯的状态;灯的亮灭可直接由8086输出0,1控制。用8259A管理可屏蔽中断即开机初始化。
采用两个计数器级联的方式, 并且计数器0工作于方式3用于产生方波信号,计数器1工作方式0,计数到时高电平信号。计数器1的输出端OUT1接入8255芯片的PC0口,通过查询8255的C口的值,以完成计时功能。将计数器0的输出OUT0接到计数器1的输入端CLK1,而CLK0的输入采用1.19MHZ的时钟频率, 计数器0计数初值为59499=0E86BH,则OUT0=20HZ, 即计数器1的时钟频率为20HZ。
当计数器1的记数初值为9时,0.5S后OUT1输出一高电平。8086通过读取8255C口的值,来决定对A口写入的数据。因此每隔0.5秒8086变换灯的状态,持续6次即完成3秒的闪烁功能。
当计数器1的记数初值为899时,45S后OUT1输出一高电平。通过查询8255的C口PC0的状态改变,达到延时45秒的作用。同理计数器1的计数初值分别为59、799时,分别为3、40秒的延时。
2、 译码电路设计
通过分析8259、8253、8255各端口地址,设计合理的地址译码电路。8259的地址为20H、21H,8253的地址为40H、41H、42H、43H,8255的端口地址为0F0H、0F1H、0F2H、0F3H。故芯片的地址只与8086的地址的低8位有联系,不妨设高十二为全为1将它们相与后作为38译码器的始能信号E3。再分析发现8259、8253、8255各端口地址的低八位其中D2、D3均为0,将8086的地址总线的D2、D3作为38译码器的始能信号E1、E2。将8086的地址总线的D0、D1分别与8253和8255的A0、A1连接,利用D4、D5、D6、D7构成译码电路。将8086的地址总线的D0与8259的A0连接,利用D2、D4、D5、D6、D7通过38译码器构成译码电路。具体见下图所示:
3、 总体硬件电路构成框图
8259
3片8282
地址译码电路
8253
8286数据缓冲器
8255
交通灯
8086
8284
A口控制灯
提供时钟信号
计数器1的OUT1向8255的C口PC0写
8086通过读8255C口的数来记时,相当于构成了反馈系统
4、 电路图:
初始化8259、8253、8255
且L1、L2亮
等待8253延时3s时间是否到?
否
等待8253延时45s时间是否到?
否
等待8253延时3s时间是否到?
否
等待8253延时3s时间是否到?
否
L2、L5亮
L2亮,L5闪烁
L2、L3亮
L1、L6亮
等待8253延时40s时间是否到?
否
L1亮,L6闪烁
等待8253延时3s时间是否到?
否
L1、L4亮
等待8253延时3s时间是否到?
否
3)软件流程图:
4)程序代码:
*****************************************************************
MY8259_ICW1 EQU 20H ;实验系统中 8259的ICW1端口地址
MY8259_ICW2 EQU 21H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU 21H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU 21H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU 21H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU 20H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU 20H ;实验系统中8259的OCW3端口地址
MY8253_COUNT0 EQU 40H ;实验系统中8253计数器0端口地址
MY8253_COUNT1 EQU 41H ;实验系统中8253计数器1端口地址
MY8253_COUNT2 EQU 42H ;实验系统中8253计数器2端口地址
MY8253_MODE EQU 43H ;实验系统中8253控制寄存器端口地址
MY8255_A EQU 0F0H ;实验系统中8255的A口地址
MY8255_B EQU 0F1H ;实验系统中8255的B口地址
MY8255_C EQU 0F2H ;实验系统中8255的C口地址
MY8255_MODE EQU 0F3H ;实验系统中8255的控制寄存器地址
*****************************************************************
DATA SEGMENT
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,3508H
INT 21H
MOV IP_BAK, ES ;保存INTR原中断处理程序入口偏移地址
MOV CS_BAK, BX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG INITIAL
MOV DS,AX
MOV DX,OFFSET INITIAL
MOV AX,2508H
INT 21H ;设置中断向量
MOV DX,MY8259_ICW1 ; 初始化实验系统中8259的ICW1
MOV AL,13H ;边沿触发、单片8259、需要ICW4
OUT DX,AL
MOV DX, MY8259_ICW2 ;初始化实验系统中8259的ICW2
MOV AL,08H ;IR0中断类型号
OUT DX,AL
MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL,03H ;自动结束EOI
OUT DX,AL
MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL,0FEH ;打开IR0的屏蔽位
OUT DX,AL
MOV AL,00H
MOV DX, MY8259_OCW2 ;初始化实验系统中8259的OCW2,完成8259的初始化
OUT DX,AL
QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令
MOV AL,0CH
OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应
JZ QUERY ;没有响应则继续查询
AND AL,01H
CMP AL,00H
JNE QUERY ;若不是IR0请求,继续查询
L4: INT 08H ;调用08H中断程序
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAY45S ;延时45秒
MOV CX, 03H ;周期1S,循环三次完成灯闪烁
L2: MOV DX,MY8255_A ;写8255的A口
MOV AL,02H
OUT DX,AL ; L2亮 、L5灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAYHALFS ;延时0.5秒
DEC CX
JNZ L2 ;L2亮,L5闪烁
MOV DX,MY8255_A ;写8255的A口
MOV AL,06H
OUT DX,AL ; L2、L3亮
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAY45S ;延时40秒
MOV CX,03H ;周期1S,循环三次完成灯闪烁
L3: MOV DX,MY8255_A ;写8255的A口
MOV AL,01H
OUT DX,AL ; L1亮 、L6灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAYHALFS ;延时0.5秒
DEC CX ;L1亮,L6闪烁
JNZ L3
MOV DX,MY8255_A ;写8255的A口
MOV AL,09H
OUT DX,AL ; L1、L4亮
CALL DELAY3S ;延时3秒
JMP L4 ;循环一次完成,跳到L4重新开始循环
MOV AH,4CH
INT 21H ;返回DOS
INITIAL PROC ;中断类型号08H的中断子程序
MOV DX,MY8253_MODE ;对8253初始化
MOV AL,36H
OUT DX,AL
MOV AX, 0E86BH
MOV DX,MY8253_COUNT0
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器0工作方式3 ,OUT0为频率20HZ的方波
MOV DX, MY8255_MODE
MOV AL,89H
OUT DX,AL ;8255初始化完成 A口输出,C口输入
MOV DX,MY8255_A
MOV AL,03H
OUT DX,AL ;两个红灯L1、L2亮,灯初始化完成
IRET
INITIAL ENDP ;开机初始化完成
DELAY3S PROC ;延时3S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,59H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为59
L1: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L1
RET
DELAY3S ENDP
DELAY45S PROC ;延时45S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0899H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为899
L5: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L5
RET
DELAY45S ENDP
DELAYHALFS PROC ;延时0.5S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,09H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为9
L6: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L6
RET
DELAYHALFS ENDP
DELAY40S PROC ;延时40S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0799H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为799
L7: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L7
RET
DELAY40S ENDP
CODE ENDS
END START
四、 设计总结
设计心得:
通过这次课程设计针对设计的内容和要求,我利用8086、8259、8253、8255、8282、8286以及38译码器和门电路设计了交通灯数字控制系统。通过利用汇编,编写了软件控制程序。同时查阅资料,用PROTEL软件设计出了硬件系统。在这次课程设计的过程中,我无论是在关于X86系列的相关知识或在接口芯片的初始化及应用方面还是在利用所学到知识全面设计系统方面收获都很大。
刚拿到设计题目觉得无从下手,经过仔细分析问题之后找到了行之有效的解决问方法。虽然六盏灯一共有七种不同的亮灭状态,其实只需用8255的A口的低六位不同状态即可控制。针对不同的延时时间,采用8253的计数器0和计数器1的级联可以准确定时。考虑到绿灯闪烁频率为1HZ,故让8253的计数器0的输出OUT0为20HZ的方波作为计数器1的时钟频率。这样对8253计数器1的计数初值写不同的值即可实现不同的定时。本系统的核心计时方法是:8253计数器1的输出OUT1送给8255的C口的PC0,然后8086读8255的C口的值来判断是否改变灯的状态。8255的C口相当于控制系统中的反馈环节,是本系统的能够准确及时的原因所在。
对于硬件系统的设计查阅相关资料,从而引入了8284、8282、8286芯片使硬件系统更加完善。硬件设计最大的问题是地址译码电路的设计,针对这一问题我先找出8259、8253、8255芯片的端口地址之间的联系再利用数字电子技术知识解决了地址译码电路问题。
通过设计交通灯数字控制系统将软硬充分相结合,学会了很多有用的知识锻炼了软硬相互协调的能力。同时也增强了全面系统考虑问题的能力,以及硬件设计能力。可以说这次课程设计很成功,在自己学习独立思考的情况下找到了分析问题解决问题的方法。这对以后的学习和工作具有重要的指导意义!
设计中存在的问题:
虽然这个系统用到了8259并编写中断子程序,但是仅仅应用于系统的开机初始化或复位。对于程序执行并没起到调用中断减轻系统负担的作用,有待改进。计时功能的实现是通过8086不断查询8255C口状态来实现的,加重了8086的负担不利于系统的快速执行。
此外利用PROTEL软件花硬件系统图,虽然充分利用到总线的作用简化了电路连接问题,但是应用总线时没有标号这是不规范的。如果是设计真正的硬件系统必须要符合电路绘制的要求,否则无法实现仿真和应用。
对课程设计的建议:
虽然花了很长时间编写软件程序设计硬件系统,但这一切还是理论上的。汇编程序通过汇编、编译、链接生成、执行,但是却还是不知道能不能与硬件系统很好的配合。希望学校能提供机会和条件,让我们能够去真正将理论和实践相结合。
最后谢谢老师这个学期的指导和帮助!
五、 参考资料
1、王忠民等. 微型计算机原理. 西安:西安电子科技大学出版社. 2003年7月
2、洪永强. 微机原理与接口技术. 北京:科学出版社. 2004年
3、朱定华. 微机原理、汇编与接口技术. 北京:清华大学出版社 2005年
4、周明德. 微机原理与接口技术实验指导与习题集. 北京:人民邮电出版社. 2002年
展开阅读全文