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
五、总结
在本次实验中,我主要学会了如何控制延时时间,加长延时时间可以是二极管的闪烁是肉眼可见的。还有就是尽管程序中有键盘输入后可以退出程序的语句,但是必须在程序恰好执行到这个语句时才能有效。总体上这个程序还是比较简单的,只要按照流程就可以写出程序。
4
实验二 可编程定时器/计数器(8253)
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
1. 按图3虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
CLK0 8253280H- GATE0CS OUT0 图3
2. 按图4连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
OUT1 8253 GATE1280H- CLK1 CS OUT0 GATE0 CLK01MHZ
图4
5
二、 参考流程图
开始开始设计数器0为工作方式0设计数器0为工作方式3送计数器初值读计数器值向计数器0送初值1000先送低字节后送高字节设计数器1为工作方式3N显示计数器有按键按下吗?Y向计数器1送初值1000先送低字节后送高字节结束结束 图5 图6
四、源程序及注释
源程序1:
CODE SEGMENT ASSUME CS:CODE
START:MOV DX,0EC03H
MOV AL,10H ;设置控制字00010000(计数器0,方式0,写两个字节,二进制计数)
OUT DX,AL ;对控制寄存器写入控制字 MOV DX,0EC00H
MOV AL,0FH ;将0FH存入AL寄存器 OUT DX,AL ;将此时AL的值送入DX端口
LP1: IN AL,DX ;从DX端口读入8位,放在AL寄存器中 CALL DISP ;调用DISP
PUSH DX ;将DX内容保存到堆栈段
MOV AH,06H ;将06H存入AH,为了下句调用21中断 MOV DL,0FFH ;将0FFH存入DL INT 21H ;调用21中断
POP DX ;将DX的内容推出栈段
6
JZ LP1 ;如果DX的内容是0,就跳转到LP1 MOV AH,4CH
INT 21H ;调用中断
DISP PROC NEAR ;定义一个名为DISP的子程序 PUSH DX ;把DX的内容保存到堆栈段中
AND AL,0FH ;将AL寄存器的内容与0FH进行“与”运算,再把结果存入AL中 MOV DL,AL ;将AL的值送入DL寄存器
CMP DL,9 ;比较DL中的值与9的大小
JLE NUM ;如果DL的值小于或等于9时,则跳转到NUM ADD DL,7 ;将DL的值与7进行相加后,再送入DL中 NUM: ADD DL,30H ;将DL的值与30H进行相加后,得到ASCII值 MOV AH,02H ;在屏幕上显示DL INT 21H ;调用DOS21中断 MOV DL,0DH ;回车 INT 21H ;调用中断指令 MOV DL,0AH ;换行
INT 21H ;调用DOS21中断
POP DX ;将DX的内容推出栈段
RET ;子程序在功能完成后返回调用程序继续执行 DISP ENDP CODE ENDS END START
源程序2:
CODE SEGMENT ASSUME CS:CODE
START:MOV DX,0EC03H
MOV AL,36H ;设置控制字00110110(计数器0,方式3,写两个字节,二进制计数) OUT DX,AL
MOV AX,1000 ;向计数器0送初值1000
MOV DX,0EC00H ;把计数器0地址放在DX寄存器中 OUT DX,AL ;将AL的低字节送入DX端口 MOV AL,AH
OUT DX,AL ;将AX的高字节送入DX端口 MOV DX,0EC03H ;把端口地址放在DX寄存器中
MOV AL,76H ;设置控制字01110110(计数器1,方式3,写两个字节,二进制计数) OUT DX,AL ;将AL的值送入DX端口 MOV AX,1000 ;向计数器1送初值1000
MOV DX,0EC01H ;把端口地址放在DX寄存器中 OUT DX,AL ;将AL的低字节送入DX端口 MOV AL,AH
OUT DX,AL ;将AX的高字节送入DX端口 MOV AH,4CH
7
INT 21H ;调用DOS21中断 CODE ENDS END START
五、总结
通过本次实验,我更加深入的了解到8253的工作方式。在实验中我用了计数器0,但是也可以改用计数器1,只需要改写控制字。在显示数字时,对于0~9,要加上30H,而对于大于9的数字,要加上37H。
8