微机原理与接口技术
实验报告
学院: 计算机与通信工程学院 专业: 计算机科学与技术 班级: 学号:
姓名:
实验一 8259中断控制器应用实验
一、实验目的
1.掌握PC机中断处理系统的基本原理。
2. 掌握可编程中断控制器8259的应用编程方法。
二、实验内容
1.PC机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。
2.PC机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。
3.扩展多中断源查询方式应用实验。利用实验平台上8259控制器作为中断扩展源,编写程序对8259控制器的中断请求进行处理。
三、实验步骤
1.实验1-1:PC机内中断应用实验
(1)按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,屏幕显示结果截图如下:
(2)自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明),代码如下:
DATA SEGMENT
MESS DB ‘IRQ10 ‘,0DH,0AH, ‘$’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, CS
MOV DS, AX
MOV DX,OFFSET INT10
MOV AX,2572H ;设置IRQ10对应的中断向量
INT 21H
IN AL,21H ;读取中断屏蔽寄存器
AND AL,0F3H ;开放IRQ3中断和从片
OUT 21H,AL
IN AL,0A1H ;从片的中断屏蔽寄存器
AND AL,0FBH ;开放IRQ10中断
OUT 0A1H,AL
MOV CX,10
STI
WAIT: JMP WAIT
INT10: MOV AX, DATA ;中断服务程序
MOV DS, AX
MOV DX, OFFSET MESS
MOV AH, 09 ;在屏幕上显示每次中断的提示信息 INT 21H
MOV AL, 20H ; 发出EOI结束中断到PC内主片的地址20H OUT 20H, AL
LOOP NEXT
IN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 08H ;关闭IRQ3中断
OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器 STI ;置中断标志位
MOV AH, 4CH ;返回DOS
INT 21H
NEXT: IRET ;中断返回
CODE ENDS
END START
调用程序代码,观察实验现象,屏幕显示截图如下:
2.实验1-2:PC机内中断嵌套实验
实验要求:
(1)按接线图连好接线,调用程序源代码8259-2.asm,做如下操作,观察屏幕显示结果并分析产生该现象的原因:
A. 按下连接IRQ的单次脉冲按键,屏幕上会显示10个3,在屏幕上10次显示未结束之前,按下连接IRQ10的单次脉冲按键,观察现象;
按下IRQ时屏幕上会显示10个3,此时按下IRQ10,会直接在屏幕上显示10个10,然后结束后再显示剩余的3B. 按下连接IRQ10的单次脉冲按键,屏幕上会显示10个10,在屏幕上10次显示未结束之前,按下连接IRQ3的单次脉冲按键,观察现象。
在屏幕上显示10个10的过程中按下IRQ无反应,等到10个10全部显示完毕后才再显示10个3
出现这种现象的原因是IRQ10的中断优先级高于IRQ3
屏幕截图:
(2)程序所有代码及注释:
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START:
.386
CLI
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET INT10 ;采用间接修改法,设置中断向量
MOV AX,2572H ;设置IRQ10对应的中断向量
INT 21H
MOV DX,OFFSET INT3 ;采用间接修改法,设置中断向量
MOV AX,250BH ;设置IRQ3对应的中断向量
INT 21H
IN AL,21H ;读中断屏蔽寄存器,21H是该寄存器的端口号 AND AL,0F3H ;开放中断,允许从片和IRQ3
OUT 21H,AL
IN AL,0A1H ;读中断屏蔽寄存器,0A1H是该寄存器的端口 AND AL,0FBH ;开放中断IRQ10
OUT 0A1H,AL
MOV CX,10 ;记中断循环次数为10次
STI
WAIT: JMP WAIT
INT10: CLI
PUSHAD
PUSHFD
MOV CX,10
NEXT10_1:
MOV DX,31H
MOV AH,02H
INT 21H
MOV DX,30H
MOV AH,02H
INT 21H
MOV DX,20H
MOV AH,02H
INT 21H
CALL DELAY1
LOOP NEXT10_1
MOV DX,0DH
MOV AH,02H
INT 21H
MOV DX,0AH
MOV AH,02H
INT 21H
MOV AL,20H
OUT 0A0H,AL
OUT 20H,AL
POPFD
POPAD
STI
IRET
INT3: CLI ;中断服务程序 ;记中断循环次数为10次 ;输出DL ;输出DL ;发出EOI结束中断到PC内主片的地址20H ;输出DL,3 ;等待 ;输出DL,‘ ’ ;发出EOI结束中断到PC内从片占用的是0A0H端口 ;输出DL,发生中断后输出10 ;将中断屏蔽字送到中断屏蔽寄存器 ;从片 ;主片 ;关中断,出栈,返回 ;中断服务程序
PUSHAD
PUSHFD
MOV CX,10 ;记中断循环次数为10次
NEXT3_1:
MOV DX,33H
MOV AH,02H ;输出DL
INT 21H
MOV DX,20H ;发出EOI结束中断到PC内主片的地址20H MOV AH,02H
INT 21H
CALL DELAY1
LOOP NEXT3_1
MOV DX,0DH
MOV AH,02H
INT 21H
MOV DX,0AH
MOV AH,02H
INT 21H
MOV AL,20H
OUT 20H,AL
OUT 0A0H,AL
POPFD
POPAD
STI
IRET
DELAY1 PROC
PUSHAD
PUSHFD
MOV CX,0FH
DELAY_LOOP1:
MOV BX,0FFFFH
DELAY_LOOP2:
DEC BX
NOP
JNZ DELAY_LOOP2
LOOP DELAY_LOOP1
POPFD
POPAD ;输出DL,3 ;等待 ;输出DL,‘ ’ ;发出EOI结束中断到PC内从片占用的是0A0H端口;发生中断输出DL,10 ;将中断屏蔽字送到中断屏蔽寄存器 ;出栈,关中断,返回 ;控制等待部分
RET
DELAY1 ENDP
CODE ENDS
END START
3.实验1-3:扩展多中断应用实验
调用程序源码文件8259-3.asm,在程序源代码中划横线的位置,请按照所学8259工作原理填写并验证,然后将所填内容写在实验报告中,并分析所填数据的形成原理。
屏幕截图:
程序代码及与案例说明:
;*****************************************************************
; 8259中断查询方式应用实验
;请根据所学原理推断横线处需填写的源代码
;*****************************************************************
I8259_1 EQU 2B0H ; 8259的ICW1端口地址
I8259_2 EQU 2B1H ; 8259的ICW2端口地址
I8259_3 EQU 2B1H ; 8259的ICW3端口地址,ICW3,ICW4,OCW1都写入奇地址中 I8259_4 EQU 2B1H ; 8259的ICW4端口地址
O8259_1 EQU 2B1H ; 8259的OCW1端口地址
O8259_2 EQU 2B0H ; 8259的OCW2端口地址,OCW2,OCW3写入偶地址 O8259_3 EQU 2B0H ; 8259的OCW3端口地址
DATA SEGMENT
MES1 DB ‘YOU CAN PLAY A KEY ON THE KEYBOARD!’,0DH, 0AH, 24H
MES2 DD MES1
MESS1 DB ‘HELLO! THIS IS INTERRUPT * 0 *!’,0DH,0AH,’$’
MESS2 DB ‘HELLO! THIS IS INTERRUPT * 1 *!’,0DH,0AH,’$’
MESS3 DB ‘HELLO! THIS IS INTERRUPT * 2 *!’,0DH,0AH,’$’
MESS4 DB ‘HELLO! THIS IS INTERRUPT * 3 *!’,0DH,0AH,’$’
MESS5 DB ‘HELLO! THIS IS INTERRUPT * 4 *!’,0DH,0AH,’$’
MESS6 DB ‘HELLO! THIS IS INTERRUPT * 5 *!’,0DH,0AH,’$’
MESS7 DB ‘HELLO! THIS IS INTERRUPT * 6 *!’,0DH,0AH,’$’
MESS8 DB ‘HELLO! THIS IS INTERRUPT * 7 *!’,0DH,0AH,’$’
DATA ENDS
STACKS SEGMENT
DB 100 DUP(?)
STACKS ENDS
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACKS, ES:DATA
.386
START: MOV AX,DATA
MOV DS, AX
MOV ES, AX
MOV AX, STACKS
MOV SS, AX
MOV DX, I8259_1 ;初始化8259的ICW1
MOV AL, 13H ;边沿触发、单片8259、需要ICW4,查表得到控制字 OUT DX,AL
MOV DX,I8259_2 ;初始化8259的ICW2
MOV AL,0B0H
OUT DX,AL
MOV AL,03H
OUT DX,AL
MOV DX, O8259_1 ;初始化8259的中断屏蔽操作命令字
MOV AL, 000H ;打开屏蔽位,将全部屏蔽位打开
OUT DX,AL
QUERY: MOV AH,1 ;判断是否有按键按下
INT 16H
JNZ QUIT ;有按键则退出
MOV DX,O8259_3 ;向8259发送查询命令
MOV AL,6CH ;01101100
OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应,响应后对应位置0 JZ QUERY
AND AL,07H
CMP AL,00H
JE IR0ISR
CMP AL,01H
JE IR1ISR
CMP AL,02H
JE IR2ISR
CMP AL,03H
JE IR3ISR
CMP AL,04H
JE IR4ISR
CMP AL,05H
JE IR5ISR
CMP AL,06H
JE IR6ISR
CMP AL,07H
JE IR7ISR
JMP QUERY
IR0ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS1
MOV AH,09
INT 21H
JMP EOI
IR1ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS2
MOV AH,09
INT 21H
JMP EOI
IR2ISR: MOV AX,DATA
MOV DS,AX ;没有响应则继续查询 ;若为IR0请求,跳到IR0处理程序 ;若为IR1请求,跳到IR1处理程序 ;若为IR2请求,跳到IR2处理程序 ;若为IR3请求,跳到IR3处理程序 ;若为IR4请求,跳到IR4处理程序 ;若为IR5请求,跳到IR5处理程序 ;若为IR6请求,跳到IR6处理程序 ;若为IR7请求,跳到IR7处理程序 ;显示提示信息 ;显示提示信息
MOV DX,OFFSET MESS3 ;显示提示信息 MOV AH,09
INT 21H
JMP EOI
IR3ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS4 ;显示提示信息 MOV AH,09
INT 21H
JMP EOI
IR4ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS5
MOV AH,09
INT 21H
JMP EOI
IR5ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS6
MOV AH,09
INT 21H
JMP EOI
IR6ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS7
MOV AH,09
INT 21H
JMP EOI
IR7ISR: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS8
MOV AH,09
INT 21H
EOI:
MOV DX,O8259_2
MOV AL, 20H
OUT DX, AL
JMP QUERY
QUIT: MOV AX,4C00H
INT 21H
;显示提示信息 ;显示提示信息 ;显示提示信息 ;显示提示信息 ;向8259发送中断结束命令 ;00100000 ;结束程序退出
CODE ENDS
END START
实验二 8254定时/计数器应用实验
一、实验目的
1. 掌握 8254 的工作方式及应用编程。
2. 掌握 8254 典型应用电路的接法。
二、实验内容
1.计数应用实验。应用8254的计数功能,用开关模拟计数,使每当按照计数初值的次数按动单次脉冲后,观察LED的变化。
2. 自设计实验。参考实验一的程序, 编写程序,以1MHz为时钟源,应用8254的定时功能,将其分频为1Hz。以LED灯作为输出显示。
三、实验步骤
1.实验2-1:计数器应用实验
程序代码填补:
IO8254_MODE EQU 283H ;8254控制寄存器端口地址
IO8254_COUNT0 EQU 280H ;8254计数器0端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, IO8254_MODE ;初始化8254工作方式
MOV AL,16H ;计数器0,方式3,填入控制字:00010110
OUT DX, AL
MOV DX, IO8254_COUNT0 ;装入计数初值
MOV AL,04H ;初值为4,04H
OUT DX,AL
MOV AX,4C00H ;返回到DOS
INT 21H
CODE ENDS
END START
此时按两次后灯亮,再按两次后灯灭。
如果令计数器0工作在方式0,其实验现象为:按五次后灯变亮,之后不在熄灭。
2.实验2-2:自设计实验
实验要求:
参考实验一的程序和接线,自行设计接线图以及程序代码,实现,以1MHz为时钟源,应用8254
的定时功能,将其分频为1Hz。以LED灯作为输出显示。
使用计数器0和计数器1两个计数器,设置其均工作于方式3,计数初值为1000,通过两个计数器级联,1000*1000=10^6达到分频的目的。
程序代码如下:
IO8254_MODE EQU 283H ;8254控制寄存器端口地址
IO8254_COUNT0 EQU 280H ;8254计数器0端口地址
IO8254_COUNT1 EQU 281H ;8254计数器1端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, IO8254_MODE ;初始化8254工作方式
MOV AL,37H ;计数器0,方式3 00110111
MOV DX,IO8254_COUNT0 ;装入计数初值
MOV AX,03E8H ;1000D=0000 0011 1110 1000B=03E8H
MOV AL,03H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX, IO8254_MODE ;初始化8254工作方式
MOV AL,76H ;计数器1, 方式3 01110110
OUT DX, AL
MOV DX,IO8254_COUNT1 ;装入计数初值
MOV AX,03E8H ;1000D=0000 0011 1110 1000B=03E8H
MOV AL,03H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AX,4C00H ;返回到DOS
INT 21H
CODE ENDS
END START
接线图如下:
实验三 8255并口控制器应用实验
一、实验目的
1. 掌握 8255 的工作方式及应用编程。
2. 掌握 8255 典型应用电路的接法。
二、实验内容
1. 基本输入输出实验。编写程序,自行设定A、B、C三个口中某一个口为输入,某一个为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。
2. 自设计实验。自行设计能实现A口工作在方式一输入,B口工作在方式一输出的电路并完成程序的编制和在实验箱上的验证,要求,利用控制信号控制数据的输入。
三、实验步骤
1.实验3-1:可编程并行接口8255方式0应用实验
编写程序,自行设定A、B、C三个口中某一个口为输入,某一个为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。根据原理补全代码中缺失的部分,根据自己的设计,补全接线图,并将代码和对应的接线图写在实验报告中。
说明:运行源程序8255.asm,按接线图接线,实现并行数据传输功能。
设定B口为输入,接到开关上,A口为输出接到LED灯上。
程序源代码:
IO8255_MODE EQU 28BH
IO8255_A EQU 288H
IO8255_B EQU 289H
IO8255_C EQU 28AH
CODE SEGMENT
ASSUME CS: CODE
START: MOV DX, IO8255_MODE ;8255初始化
MOV AL, 90H ;B口输入,A口输出 10010000
OUT DX, AL
INOUT: MOV DX, IO8255_B ;读入数据
IN AL,DX
MOV DX,IO8255_A ;输出数据
OUT DX,AL
MOV DL,0FFH ;判断是否有按键
MOV AH, 06H
INT 21H
JZ INOUT ;若无,则继续
MOV AH,4CH ;否则返回
INT 21H
CODE ENDS
END START
接线图如下:
2.实验3-2:自设计试验
自行设计完成本实验,要求,8255A口工作在方式一输入,B口工作在方式一输出,利用方式一的控制信号,使数据从输入到输出人为可控。在实验报告中画出接线图,并说明设计的原理,
给出对应的程序代码。
实现方案:方式一的控制信号即为PC2和PC4,将PC2和PC4分别接到高低电平,控制A输入,观察B输出的改变。
程序源代码:
IO8255_MODE EQU 28BH
IO8255_A EQU 288H
IO8255_B EQU 289H
IO8255_C EQU 28AH
CODE SEGMENT
ASSUME CS: CODE
START: MOV DX, IO8255_MODE ;8255初始化
MOV AL, 0B4H ;A口方式一输入,B口方式一输出,10110100
OUT DX, AL
INOUT: MOV DX, IO8255_A ;读入数据
IN AL,DX
MOV DX,IO8255_B ;输出数据
OUT DX,AL
MOV DL,0FFH ;判断是否有按键
MOV AH, 06H
INT 21H
JZ INOUT ;若无,则继续
MOV AH,4CH ;否则返回
INT 21H
CODE ENDS
END START
实验结果:只有PC4和PC2均为低电平时,改变A的输入,B才会有变化。
实验四 8251串口控制器应用实验
一、实验目的
(1)掌握8251的工作方式及应用。
(2)学习PC机串口的操作方法。
二、实验内容
与PC串口通讯应用实验。编写程序完成PC机串口与实验装置串口的通讯,由PC机串口1发数,实验装置串口接收。
三、实验步骤
从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,实现自发自收。 说明:
1)运行源程序8251.asm,按接线图接线,实现串行数据传输功能。
2)图示电路8251的控制口地址为2B9H,数据口地址为2B8H。
3)8254计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
4)收发采用查询方式。
屏幕显示结果截图:
实验六 键盘扫描及显示实验(综合)
一、实验目的
1. 学习按键扫描的原理及电路接法。
2. 掌握利用8255完成按键扫描及显示。
二、实验内容
1.连接8255与键盘扫描单元,验证按键扫描功能,使得从4X4键盘上按下的键能够在数码管上一一对应显示。
三、实验步骤
验证程序,使得在小键盘上每按一个健,4位数码管上显示出相应字符,它
们的对应关系如下:
小键盘—显示
0 — 0 C — C 1 — 1 D — D 2 — 2 E — E 3 — 3 F — F 4 — 4 5 — 5 6 — 6 7 — 7 8 — 8 9 — 9
A — A B — B
说明:打开源程序keyscreen.asm,按接线图接线,运行源程序,实现键盘显示功能。 输入:A695FBB7DC8
截图如下:
当输入E时运行结束,截图如下: