微机原理与接口设计报告
学 院: 信息科学与工程学院_______ 班 级: 学 号: 姓 名: _ 指导老师: 梁建武、杨迎泽 完成时间: 20xx年06月24号
目 录
一、设计目的…………………………………………………1
二、设计任务及要求…………………………………………1
1、设计任务………………………………………………………………………………1
2、设计内容………………………………………………………………………………1
3、设计器材………………………………………………………………………………2
三、设计原理及设计方案的选择……………………………3
1、设计原理………………………………………………………………………………3
2、系统原理………………………………………………………………………………4
2.1 8255的工作原理及内部结构…………………………………………………………………4
2.2 发光二极管显示原理……………………………………………………………………………5
四、总体设计…………………………………………………5
五、详细设计…………………………………………………6
1、电路设计………………………………………………………………………………6
2、延时模块设计…………………………………………………………………………6
3、交通灯主程序设计……………………………………………………………………7
六、运行结果及说明…………………………………………9
七、课程设计总结及体会……………………………………9
八、参考文献…………………………………………………10 九、程序源代码…………………………………………………10
一、设计目的
1、了解交通灯管理的基本工作原理。
2、熟练掌握8255A可编程并行接口芯片的接口编程方法,掌握8255A在不同工作方式下通过输出对显示灯的控制。
3、熟练掌握8253芯片的编程及应用,掌握不同方式下定时计数的方法,知道用8253芯片控制时间和申请中断。
4、熟练掌握8259芯片的编程及应用,掌握8259芯片对中断的控制。
5、熟悉掌握对硬件的运用,能够通过软件编程来达到对硬件的控制。
6、掌握多位LED显示问题的解决。
7、学习单板方式下扩展简单I/O接口的方法以及双色灯的使用。
8、进一步学习微处理器的编程技术。
二、设计任务及要求
1、设计任务
这次课程设计的题目是交通灯控制的设计与实现,主要是模拟十字路口的红绿灯。
交通灯控制器的设计与实现主要是通过编写汇编语言程序利用8255A的B口和C口实现对灯的亮与灭进行控制。首先,要了解的是8255A是如何工作的,包括它的B、C口和控制端口是如何写数据的,还包括芯片的初始化等。在编写程序时得先规划好红绿黄所要接的端口,继而编写相应的端口控制程序。对于红绿灯的持续时间我用到的软件延时。最后要在实验室通过一个软件进行调试,调试通过后即可看到设计的结果。
2、设计内容
城市十字交叉路口红绿灯控制系统主要负责控制东西走向和南北走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计,通过设计实现以下功能:
本实验本要用12个发光二级管,由于实验板上只有8个发光二级管,所以
– 1 –
我只是用到其中的六个发光二级管实现了相邻两个路口的红绿灯控制。其总共分有四个状态:
1.状态一:刚开始是设置的是所有路口都禁止车辆通行,故所有的路口都是亮红灯,维持5秒;然后跳到下一个状态。
2.状态二:第一个状态结束,紧接着就是南北(假设南北路口)路口的红灯熄灭,绿灯亮起,此路口可以通车,东西路口红灯继续亮着,这个状态持续15秒。
3.状态三:东西方向的红灯熄灭(老师指出的缺陷:东西路口不该所有的灯都熄灭,应持续到南北路口黄灯闪烁之后再熄灭),南北方向的黄灯闪烁三次后,转为东西方向放行15秒钟。即南北方向的红灯和东西方向的绿灯同时点亮15秒钟。
4.状态四:东西方向放行15秒钟后,转为东西方向的黄灯闪烁5秒钟,以警示将切换红绿灯。
5.东西方向的黄灯闪烁5秒钟后,再转为南北方向车辆放行15秒钟。如此循环重复。
十字路口交通灯分布示意图
3、设计器材
超想—3000TB综合实验/仿真系统
导线若干
– 2 –
微机原理及接口技术试验箱
三、设计原理及设计方案的选择
1、设计原理
实验原理图如图5—9所示,PB4~PB7分别与发光二极管电路L1~L12相连,本实验为模拟交通灯实验。交通灯的亮灭规则如下:
设有一个十字路口,1、3为南北方向,2、4为东西方向,初始为四个路口的红灯全亮,之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车;延时一段时间后,1、3路口的绿灯熄灭,而1、3路口黄灯开始闪烁,闪烁若干次以后,1、3路口的红灯亮,而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间以后,2、4路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后重复上述过程。
8255A的PB4~PB7对应黄灯,PC0~PC3对应红灯,PC4~PC7对应绿灯。8255A工作与模式0,并置为输出。由于个发光二极管为共阳极,使其点亮应使8255A相应端口清0.
图5—9
– 3 –
2、系统原理
本次课程设计使用到的芯片就只有8255, 使用这块芯片首先应该明白了解这块芯片的功能、工作方式以及初始化方式等。
2.1 8255的工作原理及内部结构:
图1:8255的内部结构及引脚
1) 数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255与微机系统数据总线的接口。输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
2) 两个端口B和C:B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
3) 读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
8255A的工作方式:
方式0—基本输入输出方式;
方式1—选通输入输出方式;
方式2—双向选通输入输出方式。
– 4 –
图2:8255工作方式控制字和C口按位置位/复位控制字格式
2.2 发光二极管显示原理:
发光二极管显示模块由8255的B口和C口来控制发光二极管的亮灭。各口控制的二极管以及各二极管的亮灭及颜色控制如下所示:
PB4一L2 PC0一L3 PC4一L1
PB5一L5 PC1一L6 PC5一L4
PB6一L8 PC2一L9 PC6一L7
PB7一L11 PC3一L12 PC7一L10
这个设计在试验箱上仿真时只利用L1~L6这六个发光二级光来简单模拟。
四、总体设计
整体实验设计思想如下图所示:
五、详细设计
1、电路设计
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,因此在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。完整系统的硬件连接如图所示。硬件电路由控制模块、发光二极管构成。
2、延时模块设计
在设计任务时,由于期间交通灯闪烁的情况,设计时先让交通灯亮,在采用软件延时的方法来让其亮一段时间,在设置让其灭,再延时后让其亮,这样交通灯就会出现一闪一闪的情况了。在设计软件延时,利用执行一条指令所需要的指令周期来达到延长时间的目的。其程序设计如下:
DELAY1: PUSH AX
PUSH CX MOV CX,0030H
DELY2: CALL DELAY2
DELAY2: PUSH CX
– 6 –
LOOP DELY2 POP CX POP AX RET
MOV CX,8000H
DELA1: LOOP DELA1
POP CX RET
3、交通灯主程序设计
主程序实现4种状态及循环,其程序如下: START: MOV AX,0H
MOV DS,AX
MOV AL,82H
MOV DX,IOCONPT
OUT DX,AL
MOV AL,00H
NOP
NOP
MOV BYTE PTR DS:[0501H],AL
MOV DX,IOCONPT
MOV AL,80H
OUT DX,AL
MOV DX,IOBPT
MOV AL,DS:[0501H]
OR AL,0F0H
OUT DX,AL
MOV DX,IOCPT
MOV AL,0FH
OUT DX,AL
CALL DELAY1
IOLED0: MOV AL,01011010B
MOV DX,IOCPT
OUT DX,AL
CALL DELAY1
CALL DELAY1
AND AL,0F0H
OUT DX,AL
MOV CX,8H
IOLED1: MOV DX,IOBPT
MOV AL,DS:[0501H]
OR AL,01011111B
OUT DX,AL
CALL DELAY2
AND AL,00000000B
– 7 –
OUT DX,AL CALL DELAY2 LOOP IOLED1 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL CALL DELAY2
MOV AL,10100101B OUT DX,AL CALL DELAY1 CALL DELAY1 AND AL,0F0H OUT DX,AL MOV CX,8H IOLED2: MOV DX,IOBPT
MOV AL,DS:[0501H] OR AL,10101111B OUT DX,AL CALL DELAY2
AND AL,00000000B OUT DX,AL CALL DELAY2 LOOP IOLED2 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL CALL DELAY2 JMP IOLED0 DELAY1: PUSH AX PUSH CX
MOV CX,0030H DELY2: CALL DELAY2 LOOP DELY2 POP CX
POP AX
RET
DELAY2: PUSH CX
MOV CX,8000H DELA1: LOOP DELA1 POP CX
RET
CODE ENDS
END START
– 8 –
六、运行结果及说明
1.刚开始是设置的是所有路口都禁止车辆通行,故所有的路口都是亮红灯,维持5秒;然后跳到下一个状态。
2.第一个状态结束,紧接着就是南北(假设南北路口)路口的红灯熄灭,绿灯亮起,此路口可以通车,东西路口红灯继续亮着,这个状态持续15秒。
3.东西方向的红灯熄灭(老师指出的缺陷:东西路口不该所有的灯都熄灭,应持续到南北路口黄灯闪烁之后再熄灭),南北方向的黄灯闪烁三次后,转为东西方向放行15秒钟。即南北方向的红灯和东西方向的绿灯同时点亮15秒钟。
4.东西方向放行15秒钟后,转为东西方向的黄灯闪烁5秒钟,以警示将切换红绿灯。
5.东西方向的黄灯闪烁5秒钟后,再转为南北方向车辆放行15秒钟。如此循环重复。
七、课程设计总结及体会
本次实验较为成功,实现了交通灯的基本功能,但也还有不足之处。比如设计交通灯黄灯闪烁的时候,其使用了软件延时来控制灯亮灭的时间实现闪烁的效果,这样的话就会使软件延时和硬件计时同时存在调用,这样就会产生时间差,比实际的时间稍有延迟,虽在不影响闪烁效果前提下计过程中延时次说已经很短,但偏差还是存在,另外就是在黄灯开始闪烁的同时其相邻路口的红灯熄灭了,现实中是要等黄灯闪烁完毕再熄灭的。
经过将近一个星期的接口课程设计及学习,虽然实现的功能不是很多,并且其中还是有些问题,但是还是基本符合要求,,最主要的就是在设计过程中,让我学到了很多在课本中学不到的知识,收获颇丰。而且也让我更深层次了解了接口,懂得了怎样快速学习运用软件来编程,来设计东西。懂得怎样快速把自己所学的运用到实际中。在这个过程中我过得很充实,很有意义。
此次实习可以说是获益匪浅。通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要
– 9 –
的是明白写程序的态度:仔细谨慎,精益求精。
在实际操作过程中犯的一些错误还会有意外的收获,感觉设计很有意思。在具体操作中对这学期所学的接口技术的理论知识得到巩固,尤其是对于书本中的比较重要的芯片,平时在做题目过程中,总感觉对于芯片的应用更多的是被动的通过题目来熟悉再理解,而这次是通过实际操作然后在理解的基础上再熟记于心。这是一种飞跃的进步。达到设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到科技的魅力所在。
总之,通过这次微机原理及接口课程设计实验,增加了自己的动手能力,锻炼了学习能力,达到了熟练课程的目的,培养了自己学习的热情。同时也明白了学习过程中不能在完全学会了才动手去做,我们应该边学边做,在摸索中学习,不断发现问题,不断解决问题,这样才能在更正错误、补充不足中不断进步。尤其在现在这个信息时代,一切更新都是那么的快,新的技术层出不穷。所以我们更应当有学习的精神,和快速学习和应用的能力,经过这次课程实验,我认为,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,通过查找大量资料,请教老师和同学,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在设计中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。坚信:付出就一定有收获!
八、参考文献
微机原理与接口技术 主编:梁建武 中国水利水电出版社
IBM-PC汇编语言程序设计 清华大学出版社
单片机基础 北京航空航天出版社
九、程序源代码
CODE SEGMENT
ASSUME CS:CODE
IOCONPT EQU 0073H
IOAPT EQU 0070H
– 10 –
IOBPT EQU 0071H IOCPT EQU 0072H
IOBDATA EQU 0500H DATA1 EQU 0640H
START: MOV AX,0H
MOV AL,00H NOP
NOP
MOV BYTE PTR DS:[0501H],AL MOV DX,IOCONPT MOV AL,80H OUT DX,AL MOV DX,IOBPT MOV AL,DS:[0501H] OR AL,0F0H OUT DX,AL MOV DX,IOCPT MOV AL,0FH OUT DX,AL CALL DELAY1 MOV DS,AX MOV AL,82H MOV DX,IOCONPT OUT DX,AL
IOLED0: MOV AL,01011010B
MOV DX,IOCPT OUT DX,AL
– 11 –
CALL DELAY1 CALL DELAY1 AND AL,0F0H OUT DX,AL MOV CX,8H IOLED1: MOV DX,IOBPT MOV AL,DS:[0501H] OR AL,01011111B OUT DX,AL CALL DELAY2
AND AL,00000000B OUT DX,AL CALL DELAY2 LOOP IOLED1 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL CALL DELAY2
MOV AL,10100101B OUT DX,AL CALL DELAY1 CALL DELAY1 AND AL,0F0H OUT DX,AL MOV CX,8H IOLED2: MOV DX,IOBPT MOV AL,DS:[0501H] OR AL,10101111B OUT DX,AL CALL DELAY2
– 12 –
AND AL,00000000B OUT DX,AL CALL DELAY2 LOOP IOLED2 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL CALL DELAY2 JMP IOLED0 DELAY1: PUSH AX PUSH CX
MOV CX,0030H DELY2: CALL DELAY2 LOOP DELY2 POP CX POP AX RET
DELAY2: PUSH CX
MOV CX,8000H DELA1: LOOP DELA1 POP CX RET
CODE ENDS
END START