OUT DX,AL
CALL DALLY1 ;延时30秒 MOV CX,08H
L1: MOV DX,PORTA ;写A口发出的数据,北方向黄灯亮,西方向红灯亮 MOV AL,0FCH OUT DX,AL
MOV DX,PORTB ;写A口发出的数据,南方向黄灯亮, 东方向红灯亮 MOV AL,0FCH OUT DX,AL CALL DALLY2
MOV DX,PORTA ;写A口发出的数据,北方向黄灯灭,东西方向红灯亮
MOV AL,30H OUT DX,AL
MOV DX,PORTB ;写B口发出的数据,南方向黄灯灭,东西方向红灯亮
MOV AL,30H OUT DX,AL CALL DALLY2 LOOP L1
MOV DX,PORTA ;写A口发出的数据,北方向红灯亮,西方向绿灯亮
MOV AL,0C3H OUT DX,AL
MOV DX,PORTB ;写B口发出的数据,南方向红灯亮,东方向绿灯亮
MOV AL,0C3H OUT DX,AL CALL DALLY1
MOV CX,08H ;黄灯闪烁的次数
L2: MOV DX,PORTA ;写A口发出的数据,西方向黄灯亮,北方向红灯亮 MOV AL,0F3H OUT DX,AL
MOV DX,PORTB ;写B口发出的数据,东方向黄灯亮,南方向红灯亮 MOV AL,0F3H OUT DX,AL CALL DALLY2
MOV DX,PORTB ;写A口发出的数据,东西方向黄灯灭,北方向红灯亮 MOV AL,0C0H OUT DX,AL
MOV DX,PORTC ;写B口发出的数据,东西方向黄灯灭,南方向红灯亮 MOV AL,0C0H OUT DX,AL CALL DALLY2 LOOP L2
MOV AH,1 ;判断功能,是否结束调用程序 INT 16H JZ LOOP1
QUIT: MOV AX,4C00H INT 21H ;系统功能调用
DALLY PROC NEAR ;软件延时子程序,通过设置指令的循环次数实现 PUSH CX PUSH AX
MOV CX,0FFFH ;循环次数 D1: MOV AX,0FFFFH D2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RET DALLY ENDP
DALLY1 PROC NEAR ;软件延时子程序,延时30秒 PUSH CX PUSH AX
MOV CX,1EH ;循环次数 D3: CALL DALLY LOOP D3 POP AX POP CX
RET DALLY1 ENDP
DALLY2 PROC NEAR ;软件延时子程序,黄灯亮与灭的闪烁时间间隔, PUSH CX PUSH AX
MOV CX,02H ;循环次数 D4: CALL DALLY LOOP D4 POP AX POP CX RET DALLY2 ENDP CODE ENDS END START
六、设计总结与心得
这次微机原理课程设计----交通灯的控制,是个与实际联系很紧密的课题,综合应用了微机学习的各方面知识,体现了汇编语言作为计算机领域的主要语言在解决实际问题方面表现出了优越之处,也使理论知识的学习得到了更深的理解和应用。这次主要是用8255A芯片来完成设计要求的,学习的时候对8255的结构、引脚及功能不是很清除,刚开始拿到这个课题时真不知如何下手,经过分析、查阅相关资料大致明白设计要点,通过流程图的绘制,按照流程一步步来分步设计,使问题得到了解决。由于汇编语言学的不是很好,对端口的使用下了一番苦功夫,因此,这次的课程设计也是对自己微机汇编语言学习的补缺及提升。学习的目的在于应用,纵使专业理论知识学的再好,不能有效的用到实际问题中去,也就无法把知识转化成自己的东西。由于对8253定时器的功能不太熟悉,所以这次设计
的不足之处是,用用软件延时(通过指令执行的次数)来实现延时要求的,但执行一条指令的具体时间很难去计算,因此只是大致达到了延时时间,不是很精确。 若用8253定时器来控制延时时间,应该可以得到比较精确的时间。这也激励自己今后对微机知识的学习要有更高的要求。总之,这次的微机课程设计感觉收获还是比较多的,重要的是使自己学习的知识得到了应用,暴露的不知之处今后需要倍加注意。
七、参考文献
《微机原理、汇编与接口技术》(朱定华,清华大学出版社,2005) 《微型计算机系统原理及应用》(杨素行,清华大学出版社,1995.10) 《微型计算机原理及运用》(谭浩强 清华大学出版社 2006)