ToC
实验内容
观察 8254 工作在方式 0、方式 1、方式 2 和方式 3 的波形。
实验接线
实验说明中使用的是计数器 1,但我的环境下计数器 1 之前不知道出了什么问题,无法正常使用。更换为计数器 0 则工作正常,因此以下实验均以计数器 0 实现。
现在发现好像是初值赋值的变量出问题了,但我懒得改了(
接线如下图:
将 CLK0
与时钟源的 18.432kHz
相连,GATE
与开关及 LED
现实单元的 K0
相连。
代码
1C018254 EQU 0600H2C028254 EQU 0602H3C038254 EQU 0604H4CON8254 EQU 0606H5
6CODE SEGMENT7ASSUME CS:CODE8
9START PROC10 MOV DX, CON825411 ;; 01: COUNTER 112 ;; 11: READ HIGHER 8 BYTES13 ;; THEN LOWER 8 BYTES14 ;; 000:WORK TYPE 015 ;; 0: BINARY NUMBER16 MOV AL, 00110000B17 ;;MOV AL, 00110010B18 ;;MOV AL, 00110100B19 ;;MOV AL, 00110110B20 OUT DX, AL21
22 MOV DX, C01825423 MOV AL, 00H ;; LOWER 8 BYTES24 OUT DX, AL25
26 MOV AL, 48H ;; HIGHER 8 BYTES27 OUT DX, AL28
29LO:30 JMP LO31
32 MOV AX, 4C00H33 INT 21H34START ENDP35
36CODE ENDS37END START
这里值得注意的是我们将计数器初值设置成了 0x4800
,这个值的十进制表示就是 18432
,与时钟源的频率相同,即计数一秒。
波形
方式 0
将 GATE
输入设置为高电平,等待一秒后输出变为高电平。
方式 1
计数器在 GATE
边沿启动。书上说是上升沿,但其实下降沿也会触发。
方式 2
方式 2 我不清楚输出是否正确,仅作参考。
方式 3
方式 3 是方波输出,如下所示。
选做实验:手动控制输入时钟
连线
修改布线,将 CLK0
与 KK1+
相连,如下图所示:
代码
1C018254 EQU 0600H2C028254 EQU 0602H3C038254 EQU 0604H4CON8254 EQU 0606H5
6CODE SEGMENT7ASSUME CS:CODE8
9START PROC10 MOV DX, CON825411 MOV AL, 00110000B12 OUT DX, AL13
14 MOV DX, C01825415 MOV AL, 08H ;; LOWER 8 BYTES16 OUT DX, AL17
18 MOV AL, 00H ;; HIGHER 8 BYTES19 OUT DX, AL20
21LO:22 JMP LO23
24 MOV AX, 4C00H25 INT 21H26START ENDP27
28CODE ENDS29END START
输出
连按 KK1
即可,待计数值归零时就会变为高电平。
选做实验:周期为 1 的方波
这个实验我们在基础实验的时候就已经做完了,这里就跳过了。
选做实验:控制 LED
连线
正常连接 8255 即可。OUT0
连接 MIR6
,通过中断控制 LED
移动。
代码
1C018254 EQU 0600H2C028254 EQU 0602H3C038254 EQU 0604H4CON8254 EQU 0606H5
6CODE SEGMENT7ASSUME CS:CODE8
9START PROC10 MOV BX, 0;11
12 ;; INIT 825513 MOV DX, 0646H14 MOV AL, 90H ;; 10010000B, INPUT FROM A & OUTPUT TO B15 OUT DX, AL16
17 ;; MIR618 MOV AX, OFFSET MIR6 ;; PUT CS:IP TO INTERRUPT VECTOR ADDRESS19 ;; 6: 38H - 3BH20 ;; IP -> 38H21 ;; CS -> 3AH22 MOV SI, 38H23 MOV [SI], AX24 MOV AX, CS25 MOV SI, 3AH26 MOV [SI], AX27
28 ;; --------------------------------------------------29 ;; INIT 825930 CLI31 MOV AL, 11H32 OUT 20H, AL33 MOV AL, 08H34 OUT 21H, AL35 MOV AL, 04H36 OUT 21H, AL37 MOV AL, 07H38 OUT 21H, AL39 MOV AL, 2FH40 OUT 21H, AL41 STI42 ;; --------------------------------------------------43
44 MOV DX, CON825445 ;;MOV AL, 00110100B46 MOV AL, 00110110B47 OUT DX, AL48
49 MOV DX, C01825450 MOV AL, 00H ;; LOWER 8 BYTES51 OUT DX, AL52
53 MOV AL, 48H ;; HIGHER 8 BYTES54 OUT DX, AL55
56 MOV BX, 057
58LO:59 JMP LO60
61 MOV AX, 4C00H62 INT 21H63START ENDP64
65MIR6:66 CMP BL, 0FFH67 JE WRITE68
69 SHL BL, 170 INC BL71WRITE:72 MOV DX, 0642H73 MOV AL, BL74 OUT DX, AL75 IRET76
77CODE ENDS78END START