ToC
说明
本系列为 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