OUT 20H,AL ; 中断结束命令
POP DX POP AX
STI IRET INTP ENDP CODE ENDS
END START
实验2代码: .Model Small .386
CODE SEGMENT ASSUME CS:CODE START:
IN AL,21H
AND AL,0DFH ; 开通IR5中断通道
OUT 21H,AL CLI
MOV AX,00H
MOV DS,AX MOV SI,4*35H
; 设置中断向量,将INTP的偏移地址赋给[SI] MOV [SI],AX ; SI+2后,将INTP的段地址赋给[SI] ADD SI,2
MOV AX,SEG INTP MOV [SI],AX
MOV DX,203H
MOV AL,10000011B ; 设置方式字 OUT DX,AL
MOV BL,1 ; 给bl赋值,用以控制各数码管的亮暗 STEP:
STI
HLT ; 等待中断信号,接到中断信号后重复该步骤 JMP STEP INTP
PROC NEAR PUSH AX
PUSH DX
CLI MOV DX,200H
MOV AL,6DH ; 使数码管显示数字“5” OUT DX,AL MOV DX,201H
MOV AL,BL ; 使对应bl的数码管亮,其余暗 OUT DX,AL
ROL AL,1 ; 循环左移一位
CMP AL,01000000B
JNZ STEP1 ; 若循环到第七位,则赋值1,重新从最右端开始 MOV AL,1 ; 显示,并将al值赋给bl,避免丢失 STEP1: MOV BL,AL
MOV AL,20H
OUT 20H,AL ; 中断结束命令 POP DX POP AX STI IRET INTP ENDP CODE ENDS END START
【参考实验流程图】
三、实验代码 1、完成指导手册要求
实验十二8位A/D转换实验(中断方式)
实验内容
从ADC0809通道0输入+5V可变电压,使用中断方式采集数据,并将转换数据在7段数码管上以16进制数显示。
实验代码如下: .Model small .386
DATA SEGMENT
LED DB 3FH,06H,5BH,4FH,66H,6DH, 7DH,07H,7FH,67H,77H,7CH,39H,5EH,79H,71H DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: IN AL,21H
AND AL,11011111B ;开放MIR5通道 OUT 21H,AL STEP:
MOV DX,200H
MOV AL,0 ;启动转化 OUT DX,AL
MOV CX,0
;用于选择显示高位还是低位 ;等待中断
STI HLT JMP STEP MOV AH,4CH INT 21H INTP PROC FAR
MOV AX,DATA
MOV DX,AX
CLI MOV AX,00H MOV ES,AX MOV DI,4*35H MOV AX,OFFSET INTP MOV [DI],AX MOV AX,SEG INTP
MOV [DI+2],AX STI
PUSH AX PUSH DX
CLI MOV DX,201H ;读数据 IN AL,DX
MOV BL,AL ;将AL数值储存在BL里
AND CX,1 ;取cx的最低位,若为0则显示低四位,为1则显示高四位 JNZ STEP2 MOV AH,0 ;屏蔽AL高4位,并将AX(数值上等于偏移量)赋给DI MOV DI,AX
MOV DX,210H
MOV AL,LED[DI] ;设置低位要显示的数字 OUT DX,AL
MOV DX,211H MOV AL,04H ;设置显示位置 OUT DX,AL DEC CX
JMP EXIT PUSH CX
MOV CL,4 ;将AL高4位移到低4位 POP CX
STEP2: MOV AL,BL
; 将CX减1,使CX最低位改变为1,故可使下次终端显示高4位
ROL AL,CL
AND AL,00001111H ;屏蔽AL高4位 MOV AH,0 MOV DI,AX
MOV DX,210H ;设置低位要显示的数字 MOV AL,LED[DI] OUT DX,AL
MOV DX,211H MOV AL,08H ;设置显示位置 OUT DX,AL
DEC CX ; 将CX减1,使CX最低位改变为0,故可使下次终端显示低4位 EXIT:
MOV AL,65H ;IR5中断结束
OUT 20H,AL POP DX POP AX
STI IRET INTP ENDP CODE ENDS
END START
实验十五DMA读操作实验
利用8237DMA的0通道实验MEM I/O的传送。将2000H:0000H~2000H:0007H共8个数据01H,02H,04H,08H,10H,20H,40H,80H通过DMA方式一次传送,并在8个led中显示对应状态。DMA请求使用单脉冲长生,led与8255的PA口连接,DMA传送时,通过8255的传输端口控制led的亮与灭。
说明:8255的DMA_EN的作用是为了在DMA响应期间,使能8255,并禁止A1A0
译码,使其A1A0=00,因此,DMA传送期间传送的数据会固定送往PA端口,此时的8255PA口当做8为锁存器使用。
实验代码如下: .Model small .386
DATA SEGMENT
LED DB 01H,02H,04H,08H,10H,20H,40H,80H DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START : MOV AX,DATA
LEA SI,LED ; 将变量起始地址赋给si MOV AL,[SI] MOV ES:[DI],AL
INC DI ;传送8个数据到2000:0000H单元 INC SI LOOP STEP MOV AL,10000000B
MOV DX,213H ;设置8255 A端口1方式输出 OUT DX,AL MOV DX,208H ;禁止82C37A工作 OUT DX,AL MOV DX,20CH
OUT DX,AL ;清先/后触发器 MOV AX,0 ;写入基地址 MOV DX,200H
OUT DX,AL ;写低位地址到基地址寄存器 OUT DX,AL ;写高位地址到基地址寄存器 MOV AX,7H ;将传输字节数存入字节数寄存器 MOV DX,201H
OUT DX,AL ;写低位字节数到字节数寄存器 MOV AL,AH
OUT DX,AL ;写高位字节数到字节数寄存器 MOV DX, ; 设置工作方式 OUT DX,AL STEP:
MOV DS,AX
MOV CX,8H ;设置往内存单元赋值次数 MOV AX,2000H MOV ES,AX ;设置要存入数值的内存起始地址为2000H:0000H MOV DI,0