汇编语言交通灯控制系统设计 - 图文 下载本文

LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示 LEDFEQ EQU 38H ;扫描频率 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA CODE SEGMENT ASSUME CS:CODE CONT DB 0 CONT1 DB 0 CONT2 DB 0 BKSD DB 0 BKAD DB 0 BKDA DB 0 TEMP DB 0

;******************************************* START: MOV AX,0 MOV DS,AX

MOV AX,OFFSET IRQ0 ADD AX,2000H MOV SI,0FH*4 MOV [SI],AX MOV AX,0

MOV [SI+2],AX IN AL,218H AND AL,7FH OUT 219H,AL CLI

MOV AL,80H ;初始化8255 OUT EE,AL MOV AL,00 OUT EA,AL MOV AL,0f0H OUT EA,AL

MOV DX,218H ;8259初始化 MOV AL,00010010b OUT DX,AL MOV AL,08H MOV DX,219H OUT DX,AL

MOV DX,203H ;设置为全输出 MOV AL,80H

页码:5

OUT DX,AL MOV DX,200H MOV AL,0ffh

OUT DX,AL ;清LED MOV DX,200H ;全红 MOV AL,0F0H OUT DX,AL

MOV AL,00110110b ;初始化 8254 OUT CONTROL,AL MOV AX,2500 MOV DX,COUNT0 OUT DX,AL MOV AL,AH

OUT COUNT0 ,AL MOV AX,DATA MOV DS,AX

中断服务程序: A1: STI HLT JMP A1

IRQ0: ;写数码管程序,暂缺 JMP COMPARE

COMPARE:CMP DL,0 JZ STATE0 CMP DL,1 JZ STATE1 CMP DL,2 JZ STATE2 CMP DL,3 JZ STATE3

STATE0: ;状态0:东西红南北绿 mov al,01011010b out D2,al DEC SI

JNZ CHANGE1 DEC DH

MOV SI,100

CHANGE1:DEC CX CMP CX,0 JNZ M0

MOV CX,500

STATE1: DEC DI ;状态1:东西方向黄灯闪烁,南北绿灯

页码:6

CMP DI,0 JNZ SHINE1

MOV AL, 00001010b ;东西灭,南北绿 OUT D2,AL MOV DI,50 JMP CHANGE

SHINE1: MOV AL,11111010B ;东西黄,南北绿 OUT D2,AL

CHANGE: DEC SI JNZ CHANGE2 DEC DI

MOV SI,100

CHANGE2:DEC CX CMP CX,0 JNZ M1

MOV CX,2000 MOV DH,25

STATE2: MOV AL,10100101b ;状态2:东西绿灯,南北红灯 OUT D2,AL DEC SI

JNZ CHANGE3 DEC DH

MOV SI,100

CHANGE3:DEC CX CMP CX,0 JNZ M2

MOV CX,500

STATE3: DEC DI ;状态3:东西绿灯,南北黄灯闪烁 CMP DI,0 JNZ SHINE2

MOV AL,10100000B ;东西绿灯,南北灭 OUT D2,AL MOV DI,50 JMP SOURCE

SHINE2: MOV AL,10101111B ;东西绿,南北黄 OUT D2,AL

SOURCE: DEC SI JNZ CHANGE4 DEC DH

MOV SI,100

CHANGE4:DEC CX CMP CX,0 JNZ M3

MOV CX,6000

页码:7

MOV DH,65

M0: MOV DL,0 ;下次进入状态0 JMP EXIT

M1: MOV DL,1 ;下次进入状态1 JMP EXIT

M2: MOV DL,2 ;下次进入状态2 JMP EXIT

M3: MOV DL,3 ;下次进入状态3 EXIT: MOV AL,20H OUT 218H,AL IRET

CODE ENDS END START 程序运行结果

1.即东西方向的绿灯和南北方向的红灯同时点亮1分钟;

2.1分钟后,东西方向的黄灯闪烁5秒钟,。此时南北方向仍维持红灯点亮。 3.东西方向的黄灯闪烁5秒钟后,转为东西方向的红灯和南北方向的绿灯同时点亮20秒钟;

4. 20秒钟后,转为南北方向的黄灯闪烁5秒钟,此时东西方向仍维持红灯点亮。

5.南北方向的黄灯闪烁5秒钟后,东西方向的绿灯和南北方向的红灯同时点亮1分钟。如此循环重复。。

五、结果测试分析

1.状态灯显示测试 当电路连接完毕后,将写好的测试程序刷写到芯片内,K1 和K2分别给端口送高电平和低电平,通电即可检测。 2.数码管的测试

将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可测试。

六、总结

1、软件延时与定时器计时

软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进行使用,本次设计采用了,定时器0进行计时,每10ms产生一个脉冲信号,可以准确的计时并方便8段数码管进行显示 2、中断使用的作用

页码:8

使用中断比较麻烦,在试验中需要两次加载初始化程序和中断服务程序,并且需要手工指定中断服务地址和中断向量号;但是使用中断可以进行多样化设计,强化程序功能与执行效率。

在本设计中程序每10MS请求一次中断,实现精确定时与数码管显示刷新。 3、心得体会

本次课程设计的过程是艰辛的,不过收获却是很大的。

在设计过程中,会出现了一些问题,但都是常见的小问题,如:代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是经常性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。

综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流。

由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高等等,这需要在实践中进一步完善。

当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我,不断进取,能使自己的能力进一步的提升。

七、参考文献

史新福等《32位机微型计算机原理接口技术及其应用》 清华大学出版社 孙万容等《数字电子技术基础》 西安电子科技大学出版社 张迎新等《单片机中级教程》 北京航空航天大学出版社。 丁元杰等《单片机原理与应用》 机械工业出版社。

页码:9