TD-PITE 型微机系统与接口实验

ToC

说明

实验内容

代码片段

程序结构

延时

8259 初始化(中断)

8254 方波初始化(计数器)

数码管显示

预定义数据

初始化 8255

字符显示

键盘输入

检测是否有键按下

检测当前按下的按键

简单使用流程

说明

本系列为 TD-PITE 型微机系统与接口实验的实验源码,附选做实验。

实验内容

8255 并行接口实验(略)

存储器扩展实验

8259 中断优先级实验

A/D 转换实验

D/A 转换实验

8254 定时/计数器实验

8251 串行接口实验

数码管显示实验

键盘扫描及数码管显示实验

微机接口综合实验

代码片段

这里列举一些可以复用的代码片段,可用于期末测试。

程序结构

1;; 四个 IOY 口对应的首地址,供参考2IOY0 EQU 0600H3IOY1 EQU 0640H4IOY2 EQU 0680H5IOY3 EQU 06C0H6

7;; 栈区声明8SSEG SEGMENT STACK9 DW 20 DUP(?)10SSEG ENDS11

12;; 数据区声明13DATA SEGMENT14 DB 8 DUP(?)15DATA ENDS16

17CODE SEGMENT18ASSUME CS:CODE, DS:DATA, SS:SSEG19

20START PROC21 MOV AX, 022 MOV DS, AX23 ;; --------------------------------------------------24 ;; 此时可初始化中断25 ;; MOV AX, 126 ;; --------------------------------------------------27

28 MOV AX, DATA29 MOV DS, AX30 ;; --------------------------------------------------31 ;; 此时可使用 DATA 段32 ;; MOV AX, 133 ;; --------------------------------------------------34

35 ;; 程序退出36 MOV AX, 4C00H37 INT 21H38START ENDP39

40;; --------------------------------------------------41;; 此处可放置其他函数42;; TEST PROC43;; RET44;; TEST ENDP45;; --------------------------------------------------46CODE ENDS47END START

延时

可以通过调整 CX 的大小,控制延时的时间。

如果不考虑 CX,可以考虑删除下面关于 CX 的 PUSH 和 POP。

1DELAY PROC2 PUSH CX3 MOV CX, 0FFH4 LOOP $5 POP CX6 RET7DELAY ENDP

8259 初始化(中断)

放置在可初始化中断处。如果不需要使用 MIR7,可以删除 ;;MIR7 部分。

1;; MIR62MOV AX, OFFSET MIR63MOV SI, 38H4MOV [SI], AX5MOV AX, CS6MOV SI, 3AH7MOV [SI], AX8

9;; MIR710MOV AX, OFFSET MIR711MOV SI, 3CH12MOV [SI], AX13MOV AX, CS14MOV SI, 3EH15MOV [SI], AX16

17;; --------------------------------------------------18;; 初始化 825919CLI20MOV AL, 11H21OUT 20H, AL22MOV AL, 08H23OUT 21H, AL24MOV AL, 04H25OUT 21H, AL26MOV AL, 07H27OUT 21H, AL28MOV AL, 2FH29OUT 21H, AL30STI31;; --------------------------------------------------

8254 方波初始化(计数器)

通过改变计数初值,可以改变方波的周期。

当连接 18.432KHz 时钟源时,使用 4800H 作为计数初值可以使 OUT 的输出周期为 1s。

1MOV DX, CON82542MOV AL, 00110110B3OUT DX, AL4

5MOV DX, C0182546MOV AL, 00H ;; 低 8 位7OUT DX, AL8

9MOV AL, 48H ;; 高 8 位10OUT DX, AL

数码管显示

预定义数据

1;; 预定义 8255 的端口2;; 此处使用的是 IOY0,根据需求修改3A8255 EQU 0600H4B8255 EQU 0602H5C8255 EQU 0604H6CON8255 EQU 0606H7

8;; 在数据区中增加如下内容9DATA SEGMENT10 TBL:11 DB 3FH ;; 012 DB 06H ;; 113 DB 5BH ;; 214 DB 4FH ;; 315 DB 66H ;; 416 DB 6DH ;; 517 DB 7DH ;; 618 DB 07H ;; 719 DB 7FH ;; 820 DB 6FH ;; 921 DB 77H ;; A22 DB 7CH ;; B23 DB 39H ;; C24 DB 5EH ;; D25 DB 79H ;; E26 DB 71H ;; F27 DB 00H ;; CLR28 SEQ:29 DB 00011111B ;; POS 030 DB 00101111B ;; POS 131 DB 00110111B ;; POS 232 DB 00111011B ;; POS 333 DB 00111101B ;; POS 434 DB 00111110B ;; POS 535DATA ENDS

初始化 8255

1MOV AL, 81H2MOV DX, CON82553OUT DX, AL

字符显示

将 AH 的数值输出到第 AL 位数码管。

1;; 输出 AH 到 AL 位数码管2PUT PROC3 PUSH AX4 LEA BX, SEQ5 PUSH AX6 MOV AH, 07 MOV SI, AX8 MOV DX, A82559 MOV AL, [BX+SI]10 OUT DX, AL11 POP AX12 LEA BX, TBL13 MOV AL, AH14 MOV AH, 015 MOV SI, AX16 MOV DX, B825517 MOV AL, [BX+SI]18 OUT DX, AL19 POP AX20 RET21PUT ENDP

键盘输入

检测是否有键按下

调用后通过检查 AX 判断是否有键按下。AX=1 表示有键按下,AX=0 表示无键按下。

1KEY_PRESSED PROC2 MOV DX, A82553 MOV AL, 00H4 OUT DX, AL5 MOV DX, C82556 IN AL, DX7 AND AL, 0FH8 CMP AL, 0FH9 JE KP_NONE10 MOV AX, 111 RET12KP_NONE:13 MOV AX, 014 RET15KEY_PRESSED ENDP

检测当前按下的按键

调用后 AX 中存储按下的键。当无键按下时,AX=10H。

1SCAN PROC2BEGIN:3 CALL KEY_PRESSED4 CMP AX, 05 JE SCAN_NO_KEY6

7 CALL DELAY8 CALL KEY_PRESSED9 CMP AX, 010 JE SCAN_NO_KEY11

12 MOV CH, 0FEH13 MOV CL, 014COLUMN:15 MOV AL, CH16 MOV DX, A825517 OUT DX, AL18 MOV DX, C825519 IN AL, DX20L1:21 TEST AL, 122 JNZ L223 MOV AL, 00H24 JMP KCODE25L2:26 TEST AL, 227 JNZ L328 MOV AL, 04H29 JMP KCODE30L3:31 TEST AL, 432 JNZ L433 MOV AL, 08H34 JMP KCODE35L4:36 TEST AL, 837 JNZ NEXT38 MOV AL, 0CH39KCODE:40 ADD AL, CL41 JMP SCAN_FIN42NEXT:43 INC CL44 MOV AL, CH45 TEST AL, 08H46 JE SCAN_NO_KEY47 ROL AL, 148 MOV CH, AL49 JMP COLUMN50

51SCAN_NO_KEY:52 MOV AX, 10H53SCAN_FIN:54 RET55SCAN ENDP

简单使用流程

1START PROC2 MOV AX, DATA3 MOV DS, AX4

5 MOV AL, 81H6 MOV DX, CON82557 OUT DX, AL ;; 初始化 82558

9 MOV AX, 0000H10LO:11 CALL NUM_DISPLAY ;; 数码管显示12 CALL SCAN ;; 扫描键盘输入13 CMP AX, 10H ;; 检测是否有键按下14 JE LO ;; 无键按下则继续循环15WAIT_UP:16 CALL NUM_DISPLAY ;; 可在此时在数码管上显示数据17 CALL KEY_PRESSED ;; 检测是否有键按下18 CMP AX, 1 ;; 如有键按下19 JE WAIT_UP ;; 则继续等待,即等待 KEY_UP20 JMP LO ;; 用户释放按键,继续监听下一个按键事件21

22 MOV AX, 4C00H23 INT 21H24START ENDP

Copyright © 2022 世界杯进球_国足进世界杯了吗 - fulitb.com All Rights Reserved.