实验内容观察 8254 工作在方式 0、方式 1、方式 2 和方式 3 的波形。 实验接线实验说明中使用的是计数器 1,但我的环境下计数器 1 之前不知道出了什么问题,无法正常使用。更换为计数器 0 则工作正常,因此以下实验均以计数器 0 实现。 现在发现好像是初值赋值的变量出问题了,但我懒得改了( 接线如下图: 将 代码C018254 EQU 0600H C028254 EQU 0602H C038254 EQU 0604H CON8254 EQU 0606H CODE SEGMENT ASSUME CS:CODE START PROC MOV DX, CON8254 ;; 01: COUNTER 1 ;; 11: READ HIGHER 8 BYTES ;; THEN LOWER 8 BYTES ;; 000:WORK TYPE 0 ;; 0: BINARY NUMBER MOV AL, 00110000B ;;MOV AL, 00110010B ;;MOV AL, 00110100B ;;MOV AL, 00110110B OUT DX, AL MOV DX, C018254 MOV AL, 00H ;; LOWER 8 BYTES OUT DX, AL MOV AL, 48H ;; HIGHER 8 BYTES OUT DX, AL LO: JMP LO MOV AX, 4C00H INT 21H START ENDP CODE ENDS END START C018254 EQU 0600H
C028254 EQU 0602H
C038254 EQU 0604H
CON8254 EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START PROC
MOV DX, CON8254
;; 01: COUNTER 1
;; 11: READ HIGHER 8 BYTES
;; THEN LOWER 8 BYTES
;; 000:WORK TYPE 0
;; 0: BINARY NUMBER
MOV AL, 00110000B
;;MOV AL, 00110010B
;;MOV AL, 00110100B
;;MOV AL, 00110110B
OUT DX, AL
MOV DX, C018254
MOV AL, 00H ;; LOWER 8 BYTES
OUT DX, AL
MOV AL, 48H ;; HIGHER 8 BYTES
OUT DX, AL
LO:
JMP LO
MOV AX, 4C00H
INT 21H
START ENDP
CODE ENDS
END START C018254 EQU 0600H
C028254 EQU 0602H
C038254 EQU 0604H
CON8254 EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START PROC
MOV DX, CON8254
;; 01: COUNTER 1
;; 11: READ HIGHER 8 BYTES
;; THEN LOWER 8 BYTES
;; 000:WORK TYPE 0
;; 0: BINARY NUMBER
MOV AL, 00110000B
;;MOV AL, 00110010B
;;MOV AL, 00110100B
;;MOV AL, 00110110B
OUT DX, AL
MOV DX, C018254
MOV AL, 00H ;; LOWER 8 BYTES
OUT DX, AL
MOV AL, 48H ;; HIGHER 8 BYTES
OUT DX, AL
LO:
JMP LO
MOV AX, 4C00H
INT 21H
START ENDP
CODE ENDS
END START
这里值得注意的是我们将计数器初值设置成了 波形方式 0将 方式 1计数器在 方式 2方式 2 我不清楚输出是否正确,仅作参考。 方式 3方式 3 是方波输出,如下所示。 选做实验:手动控制输入时钟连线修改布线,将 代码C018254 EQU 0600H C028254 EQU 0602H C038254 EQU 0604H CON8254 EQU 0606H CODE SEGMENT ASSUME CS:CODE START PROC MOV DX, CON8254 MOV AL, 00110000B OUT DX, AL MOV DX, C018254 MOV AL, 08H ;; LOWER 8 BYTES OUT DX, AL MOV AL, 00H ;; HIGHER 8 BYTES OUT DX, AL LO: JMP LO MOV AX, 4C00H INT 21H START ENDP CODE ENDS END START C018254 EQU 0600H
C028254 EQU 0602H
C038254 EQU 0604H
CON8254 EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START PROC
MOV DX, CON8254
MOV AL, 00110000B
OUT DX, AL
MOV DX, C018254
MOV AL, 08H ;; LOWER 8 BYTES
OUT DX, AL
MOV AL, 00H ;; HIGHER 8 BYTES
OUT DX, AL
LO:
JMP LO
MOV AX, 4C00H
INT 21H
START ENDP
CODE ENDS
END START C018254 EQU 0600H C028254 EQU 0602H C038254 EQU 0604H CON8254 EQU 0606H CODE SEGMENT ASSUME CS:CODE START PROC MOV DX, CON8254 MOV AL, 00110000B OUT DX, AL MOV DX, C018254 MOV AL, 08H ;; LOWER 8 BYTES OUT DX, AL MOV AL, 00H ;; HIGHER 8 BYTES OUT DX, AL LO: JMP LO MOV AX, 4C00H INT 21H START ENDP CODE ENDS END START 输出连按 选做实验:周期为 1 的方波这个实验我们在基础实验的时候就已经做完了,这里就跳过了。 选做实验:控制 LED连线正常连接 8255 即可。 代码C018254 EQU 0600H C028254 EQU 0602H C038254 EQU 0604H CON8254 EQU 0606H CODE SEGMENT ASSUME CS:CODE START PROC MOV BX, 0; ;; INIT 8255 MOV DX, 0646H MOV AL, 90H ;; 10010000B, INPUT FROM A & OUTPUT TO B OUT DX, AL ;; MIR6 MOV AX, OFFSET MIR6 ;; PUT CS:IP TO INTERRUPT VECTOR ADDRESS ;; 6: 38H - 3BH ;; IP -> 38H ;; CS -> 3AH MOV SI, 38H MOV [SI], AX MOV AX, CS MOV SI, 3AH MOV [SI], AX ;; -------------------------------------------------- ;; INIT 8259 CLI MOV AL, 11H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 04H OUT 21H, AL MOV AL, 07H OUT 21H, AL MOV AL, 2FH OUT 21H, AL STI ;; -------------------------------------------------- MOV DX, CON8254 ;;MOV AL, 00110100B MOV AL, 00110110B OUT DX, AL MOV DX, C018254 MOV AL, 00H ;; LOWER 8 BYTES OUT DX, AL MOV AL, 48H ;; HIGHER 8 BYTES OUT DX, AL MOV BX, 0 LO: JMP LO MOV AX, 4C00H INT 21H START ENDP MIR6: CMP BL, 0FFH JE WRITE SHL BL, 1 INC BL WRITE: MOV DX, 0642H MOV AL, BL OUT DX, AL IRET CODE ENDS END START C018254 EQU 0600H
C028254 EQU 0602H
C038254 EQU 0604H
CON8254 EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START PROC
MOV BX, 0;
;; INIT 8255
MOV DX, 0646H
MOV AL, 90H ;; 10010000B, INPUT FROM A & OUTPUT TO B
OUT DX, AL
;; MIR6
MOV AX, OFFSET MIR6 ;; PUT CS:IP TO INTERRUPT VECTOR ADDRESS
;; 6: 38H - 3BH
;; IP -> 38H
;; CS -> 3AH
MOV SI, 38H
MOV [SI], AX
MOV AX, CS
MOV SI, 3AH
MOV [SI], AX
;; --------------------------------------------------
;; INIT 8259
CLI
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 07H
OUT 21H, AL
MOV AL, 2FH
OUT 21H, AL
STI
;; --------------------------------------------------
MOV DX, CON8254
;;MOV AL, 00110100B
MOV AL, 00110110B
OUT DX, AL
MOV DX, C018254
MOV AL, 00H ;; LOWER 8 BYTES
OUT DX, AL
MOV AL, 48H ;; HIGHER 8 BYTES
OUT DX, AL
MOV BX, 0
LO:
JMP LO
MOV AX, 4C00H
INT 21H
START ENDP
MIR6:
CMP BL, 0FFH
JE WRITE
SHL BL, 1
INC BL
WRITE:
MOV DX, 0642H
MOV AL, BL
OUT DX, AL
IRET
CODE ENDS
END START C018254 EQU 0600H
C028254 EQU 0602H
C038254 EQU 0604H
CON8254 EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START PROC
MOV BX, 0;
;; INIT 8255
MOV DX, 0646H
MOV AL, 90H ;; 10010000B, INPUT FROM A & OUTPUT TO B
OUT DX, AL
;; MIR6
MOV AX, OFFSET MIR6 ;; PUT CS:IP TO INTERRUPT VECTOR ADDRESS
;; 6: 38H - 3BH
;; IP -> 38H
;; CS -> 3AH
MOV SI, 38H
MOV [SI], AX
MOV AX, CS
MOV SI, 3AH
MOV [SI], AX
;; --------------------------------------------------
;; INIT 8259
CLI
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 07H
OUT 21H, AL
MOV AL, 2FH
OUT 21H, AL
STI
;; --------------------------------------------------
MOV DX, CON8254
;;MOV AL, 00110100B
MOV AL, 00110110B
OUT DX, AL
MOV DX, C018254
MOV AL, 00H ;; LOWER 8 BYTES
OUT DX, AL
MOV AL, 48H ;; HIGHER 8 BYTES
OUT DX, AL
MOV BX, 0
LO:
JMP LO
MOV AX, 4C00H
INT 21H
START ENDP
MIR6:
CMP BL, 0FFH
JE WRITE
SHL BL, 1
INC BL
WRITE:
MOV DX, 0642H
MOV AL, BL
OUT DX, AL
IRET
CODE ENDS
END START
效果 |
|
来自: 新用户2585iHOb > 《待分类》