微机原理交通灯控制实验及其详细

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

交通灯信号控制实验

一、实验目的

1、掌握并行接口8253的基本原理

2、掌握8253的编程方法

二、实验内容

如图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通变化规律亮灭。

三、编程提示

1、8255控制寄存器地址:28BH—0C40BH

A口地址:288H—04C408H

C口地址:28AH—04C40AH

2、十字路口交通灯的变化规律要求

(1)南北路口的绿灯、东西路口的红灯同时亮三秒;

(2)南北路口的黄灯闪烁三次,同时东西路口的红灯继续亮;

(3)南北路口的红灯、东西路口的绿灯同时亮三秒;

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁三次;

(5)转(1)重复。

3、程序设计流程

开始

设置8255C口输出

南北路口的绿灯、东西路口的红灯亮

长延时

南北路口的黄灯闪烁,东西路口红灯亮

南北路口的红灯、东西路口的绿灯亮

四、程序设计及实验调试

程序设计的思想及注意事项:

1.首先是在选择程序时是选用软件延时还是硬件延时。我采用的是C口方式0输入,所以选用了软件延时。

2.在选择循环的时间上,老师上课时说过,长延时可以采用双层嵌套,外层嵌套为0FFFFH,内层嵌套为4000H,我在编程时外层送进了0,相当于初值为65536,内层送进了4000H。为了达到闪烁和延时的区别,我在编闪烁的程序时,给外层嵌套送入初值3000H,内层0100H(这是我通过实验的结果)。人眼感觉闪烁的效果只是短延时的结果。

实验程序:

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,0C40BH

MOV AL,10010000B ;C口方式0输入

OUT DX,AL

FIRST: MOV DX,0C40AH

MOV AL,00100100B

OUT DX,AL ;南北绿,东西红写入C口

MOV CX,0 ;送入初值65536

MOV AX,4000H ;软件长延时,由经验值确定DELAY1: DEC AX

JNZ DELAY1

LOOP DELAY1

MOV BL,4 ;控制黄灯亮的次数SECOND:MOV DX,0C40AH

MOV AL,01000100B

OUT DX,AL ;南北黄,东西红

MOV CX,3000H

MOV AX,0100H

LI1:

DEC AX

JNZ LI1

LOOP LI1

MOV DX,0C40AH ;软件短延时

MOV AL,00000100B ;南北黄灭

OUT DX,AL

MOV CX,3000H

MOV AX,0100H

WEN1:

DEC AX

JNZ WEN1 ;软件短延时

LOOP WEN1

DEC BL

JNZ SECOND ;黄灯闪烁4次THIRD: MOV DX,0C40AH ;写入C口

MOV AL,10000001B

OUT DX,AL ;南北红,东西绿

MOV CX,0

MOV AX,4000H

DELAY2: DEC AX ;软件长延时

JNZ DELAY2

LOOP DELAY2

MOV BL,4 ;控制黄灯亮的次数FORTH: MOV DX,0C40AH ;写入C口

MOV AL,10000010B

OUT DX,AL ;南北红,东西黄

MOV CX,3000H

MOV AX,0100H

LI2:

DEC AX

JNZ LI2 ;软件短延时

LOOP LI2

MOV DX,0C40AH

MOV AL,10000000B

OUT DX,AL ;东西黄灭

MOV CX,3000H

MOV AX,0100H

WEN2:

DEC AX

JNZ WEN2

LOOP WEN2

DEC BL

JNZ FORTH ;黄灯闪烁4次

MOV DL,0FFH

MOV AH,06H

INT 21H ;执行键盘输入操作

JZ FIRST

MOV AH,4CH

INT 21H ;返回操作系统CODE ENDS

END START

实验中遇到问题及分析:

1.首先,实验出现的问题是在编程方面。由于自己使用了LOOP语句,而开始自己没有注意LOOP WEN2相当于DEC CX JNZ WEN2,而自己在赋值时,对CX赋值有点混乱。编程时由于粗心,写如C口的初值有错,导致二极管没能按预定结果亮,通过硬件结果,我很快发现了问题所在。

2.实验课上,自己认真听老师说怎样对六个灯进行赋值达到控制的结果,所以在编程时没有将灯的顺序搞混,在写入8255的C口时比较顺利。

3.实验时遇到了一些问题,有一个是按键下去返回操作系统。自己运行完执行文件,当按键下去返回操作系统时,却发现执行文件没有反应,而交通灯也在继续亮。我查看了自己的程序,发现有MOV AH,06H INT 21H JZ FIRST MOV AH,4CH INT 21H 几条语句,后来又试验了几次,并增加了停留时间,我最后发现是电脑运行较的问题。

五、实验结果及分析:

程序执行后实验板上首先是南北绿灯和东西红灯亮,几秒后南北向的黄灯闪烁两次,东西向红灯亮,之后南北向的红灯和东西向的绿灯同时亮几秒钟,之后东西黄灯闪烁四次,南北红灯亮。然后LED继续以上循环,若在执行文件中有按键按下,则结束程序。

本次编程中为了达到长延时的效果,我使用了双层嵌套的方法,通过嵌套编程,我熟悉了子程序的编写和调用。在延时语句的编写时,可以使用执行指令和定时器定时两种方法,我采用了执行指令(即软件延时)的方法。在处理黄灯闪烁的问题时,我令黄灯在短延时情况下交替亮灭,并可通过设置BL的值控制黄灯闪烁次数,达到了预期目的。

实验时遇到了按键很慢才返回操作系统的问题。运行完执行文件,按键下去交通灯也在继续亮。而程序中有MOV AH,06H INT 21H JZ FIRST MOV AH,4CH INT 21H 几条语句,感觉这就是对毅力的考验,通过反复实验,发现可以返回,只是电脑反应较慢。

六、实验总结:

本次实验为8255A并行接口实验,这次实验在代码编写阶段一开始找到了入手点。我在程序中使用了软件延时,时长取决与循环次数和计算机的速度,一开始编制的程序中短延时采用了两层循环,由于自己没有实践经验,所以最后通过实验结果确定了最后的数据。

通过此次程序设计,我认识到画软件流程图的重要性,画好流程图后可以很清晰的看清逻辑,不仅加快了编写过程,而且有利于出错时查找问题所在。虽然这次实验我是一步一步编程下来的,但是在调试结果时,仍发现了红灯错亮的问题,最后发现时写程序时的粗心所致。

相关文档
最新文档