MOV AL,80H OUT DX,AL
L3: MOV DX,0ce0AH
CALL DELAY CALL DELAY
;长延时,3s左右
MOV AL,24H OUT DX,AL
;南北绿灯,东西红灯亮
CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY
MOV BL,8 MOV AL,04H
L0: XOR AL,40H ;南北黄灯闪,东西红灯亮
MOV AL,81H OUT DX,AL
;南北红灯亮,东西绿灯亮
CALL DELAY OUT DX,AL CALL DELAY
;延时
CALL DELAY
DEC BL ;闪烁几次 JNZ L0
CALL DELAY
CALL DELAY
CALL DELAY ;长延时,3s左右
CALL DELAY CALL DELAY CALL DELAY CALL DELAY
MOV BL,9
MOV AL,80H
L1: XOR AL,02H ;南北红灯亮,东西黄灯闪
OUT DX,AL CALL DELAY DEC BL
5
;延时
CALL DELAY
JNZ L1 ;闪烁几次
CALL DELAY
;------------------------------
;-----------延时函数------------ DELAY : PUSH CX PUSH DX MOV CX,1FFFH LOP1: MOV DX,0FFFFH LOP2: DEC DX
LOOP LOP1 POP DX POP CX RET
JNZ LOP2 MOV AH,4CH INT 21H MOV DL,0FFH MOV AH,06H INT 21H JZ L3
;六号功能判断若无字符输入ZF=1继续循环
CODE ENDS END START
四.实验遇到的问题和解决方法
问题:绿灯灭后黄灯没有出现闪烁的效果,一直保持常亮
解决方法:修改程序,通过利用异或和循环指令使绿灯灭、红灯亮后,黄灯口的状态从0到1循环变换,并通过调用延迟子程序,从而实现人眼可辨的黄灯闪的效果。
6
二、可编程定时时钟/计数器(8253)
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
1. 按图5-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
图 5-1
2. 按图5-2连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
图5-2
7
三.实验原理
8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。
8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。本实验用到的是方式0—计数结束中断。在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。在计数过程中,OUT一直保持低电平,直到计数达“0”时,OUT输出由低电平变为高电平,并且保持高电平。 8253动态分配地址: 控制寄存器: 0C403H
计数器0地址: 0C400H 计数器1地址: 0C401H
四.程序流程图和程序清单 1)
8
相关推荐: