三、设计思路、步骤和程序流程图
3.1 设计思路
(1) 计数应用实验:将8254的计数器0设置为方式0,计数值为十进制数4,用单次脉冲
KK1+作为CLK0时钟,OUT0连接MIR7,首先让程序进入死循环等待中断,每当KK1+按动5次后产生中断请求,调用中断程序,在屏幕上显示字符“M”。 (2) 定时应用实验:利用8254的两个计数装载过大的初始值,其中计数器0的OUT作为
计数器1的CLK的输入,当两个计数器的初值满足一定条件时,计数器1的OUT即为1s方波,并可通过软件的示波器直接观察。
3.2 实验步骤
(1) 计数应用实验:
1. 按图2-3连接电路;
2. 编写实验程序,经编译、链接无误后装入系统;
3. 单击RUN按钮,运行实验程序,每连续按动5次KK1+,在界面的输出区会显示
字符‘M’;
4. 改变计数值,验证8254的计数功能。 (2) 定时应用实验
1. 按图2-4连接实验线路;
2. 编写实验程序,经编译、链接无误后装入系统;
3. 运行程序,8254的OUT1会输出1s的方波,用软件自带的示波器功能进行观察。
3.3 程序流程图
(1) 计数应用实验:
主程序流程图如图2-5
5
开始关中断写入8259中断向量初始化8259芯片利用OCW1设置中断屏蔽初始化8254芯片计数器开中断延时N按动脉冲开关YN调用中断程序计数+1Y计数大于5
图2-5 计数应用实验主程序流程图
中断程序流程图如图2-6
6
(2) 定时应用实验:
程序流程图如图2-7
开始打印字符串打印空格结束中断返回主程序结束 2-6 计数应用实验中断程序流程图开始初始化8254计时器0设置计时器0初始值初始化8254计时器1设置计时器1初始值延时
图2-7 定时应用程序流程图
7
图
四、程序清单与执行结果
4.1 程序清单
(1) 计数应用实验代码
IOYO EQU 0600H A8254 EQU IOYO+00H*2 B8254 EQU IOYO+01H*2 C8254 EQU IOYO+02H*2 CON8254 EQU IOYO+03H*2
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK START: PUSH DS
MOV AX,0000H MOV DS,AX
MOV AX,OFFSET IRQ7 MOV SI,003CH MOV [SI],AX MOV AX,CS MOV SI,003EH MOV [SI],AX CLI POP DS
;初始化主片8259 MOV AL,11H OUT 20H,AL MOV AL,08H OUT 21H,AL
8
;初始化ICW2
;初始化ICW1
MOV AL,04H OUT 21H,AL MOV AL,01H OUT 21H,AL MOV AL,6FH OUT 21H,AL ;8254
MOV DX,CON8254 MOV AL,10H OUT DX,AL
MOV DX,A8254 MOV AL,04H OUT DX,AL
STI
AA1: JMP AA1
IRQ7: MOV DX,A8254 MOV AL,04H OUT DX,AL
MOV AX,014DH INT 10H MOV AX,0120H INT 10H
MOV AL,20H OUT 20H,AL
IRET
CODE ENDS END START
;初始化ICW3
;初始化ICW4
;OCW1
9