1、微机原理与接口技术实验报告学院: 计算机与通信工程学院专业: 计算机科学与技术班级:学号:姓名:实验一 8259 中断控制器应用实验一、实验目的 1.掌握 PC 机中断处理系统的基本原理。 2. 掌握可编程中断控制器 8259 的应用编程方法。 二、实验内容 1PC 机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。 2PC 机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。 3扩展多中断源查询方式应用实验。利用实验平台上 8259 控制器作为中断扩展源,编写程序对 8259 控制器的中断请求进行处理。三
2、、实验步骤 1.实验 1-1:PC 机内中断应用实验(1)按接线图连好接线,调用程序源代码 8259-1.asm,观察实验现象,屏幕显示结果截图如下:(2 ) 自设计实验。改变接线方式,将单次脉冲连到 USB 核心板上的 IRQ10 插孔上,参考本实验代码,编程实现 IRQ10 中断。 (注意:考虑 PC 机内中断级联的方式,参看前面的原理说明) ,代码如下:DATA SEGMENTMESS DB IRQ10 ,0DH,0AH, $DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, CSMOV DS, AXMOV DX,OFFS
3、ET INT10 MOV AX,2572H ;设置 IRQ10 对应的中断向量INT 21H IN AL,21H ;读取中断屏蔽寄存器AND AL,0F3H ;开放 IRQ3 中断和从片OUT 21H,ALIN AL,0A1H ;从片的中断屏蔽寄存器AND AL,0FBH ;开放 IRQ10 中断OUT 0A1H,ALMOV CX,10STIWAIT: JMP WAITINT10: MOV AX, DATA ;中断服务程序MOV DS, AXMOV DX, OFFSET MESSMOV AH, 09 ;在屏幕上显示每次中断的提示信息INT 21HMOV AL, 20H ; 发出 EOI 结束中
4、断到 PC 内主片的地址 20HOUT 20H, AL LOOP NEXTIN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字OR AL, 08H ;关闭 IRQ3 中断OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器STI ;置中断标志位MOV AH, 4CH ;返回 DOSINT 21HNEXT: IRET ;中断返回CODE ENDSEND START调用程序代码,观察实验现象,屏幕显示截图如下:2.实验 1-2:PC 机内中断嵌套实验 实验要求: (1)按接线图连好接线,调用程序源代码 8259-2.asm,做如下操作,观察屏幕显示结果并分析产生该现象的原因: A 按下连接
5、 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 屏幕截
6、图:(2)程序所有代码及注释:DATA SEGMENTDATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART: .386CLIMOV AX,CSMOV DS,AXMOV DX,OFFSET INT10 ;采用间接修改法,设置中断向量MOV AX,2572H ;设置 IRQ10 对应的中断向量INT 21HMOV DX,OFFSET INT3 ;采用间接修改法,设置中断向量MOV AX,250BH ;设置 IRQ3 对应的中断向量INT 21HIN AL,21H ;读中断屏蔽寄存器,21H 是该寄存器的端口号AND AL,0F3H ;开放中断,允许从片
7、和 IRQ3OUT 21H,ALIN AL,0A1H ;读中断屏蔽寄存器,0A1H 是该寄存器的端口AND AL,0FBH ;开放中断 IRQ10OUT 0A1H,ALMOV CX,10 ;记中断循环次数为 10 次STIWAIT: JMP WAITINT10: CLI ;中断服务程序PUSHAD PUSHFD MOV CX,10 ;记中断循环次数为 10 次NEXT10_1:MOV DX,31H MOV AH,02H ;输出 DLINT 21HMOV DX,30H MOV AH,02H ;输出 DLINT 21HMOV DX,20H ;发出 EOI 结束中断到 PC 内主片的地址 20HMO
8、V AH,02H ;输出 DL,3INT 21HCALL DELAY1 ;等待LOOP NEXT10_1MOV DX,0DH MOV AH,02H ;输出 DL, INT 21HMOV DX,0AH ;发出 EOI 结束中断到 PC 内从片占用的是 0A0H 端口MOV AH,02H ;输出 DL,发生中断后输出 10INT 21HMOV AL,20H ;将中断屏蔽字送到中断屏蔽寄存器OUT 0A0H,AL ;从片OUT 20H,AL ;主片POPFD ;关中断,出栈,返回POPADSTIIRETINT3: CLI ;中断服务程序PUSHADPUSHFDMOV CX,10 ;记中断循环次数为
9、10 次NEXT3_1: MOV DX,33H MOV AH,02H ;输出 DLINT 21HMOV DX,20H ;发出 EOI 结束中断到 PC 内主片的地址 20HMOV AH,02H ;输出 DL,3INT 21HCALL DELAY1 ;等待LOOP NEXT3_1MOV DX,0DH MOV AH,02H ;输出 DL, INT 21HMOV DX,0AH ;发出 EOI 结束中断到 PC 内从片占用的是 0A0H 端口MOV AH,02H ;发生中断输出 DL,10INT 21HMOV AL,20HOUT 20H,AL ;将中断屏蔽字送到中断屏蔽寄存器OUT 0A0H,ALPO
10、PFD ;出栈,关中断,返回POPADSTIIRETDELAY1 PROC ;控制等待部分PUSHADPUSHFDMOV CX,0FHDELAY_LOOP1:MOV BX,0FFFFHDELAY_LOOP2:DEC BXNOPJNZ DELAY_LOOP2LOOP DELAY_LOOP1POPFDPOPADRETDELAY1 ENDPCODE ENDSEND START3.实验 1-3:扩展多中断应用实验调用程序源码文件 8259-3.asm,在程序源代码中划横线的位置,请按照所学 8259 工作原理填写并验证,然后将所填内容写在实验报告中,并分析所填数据的形成原理。屏幕截图:程序代码及与案例
11、说明:;*; 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_
12、3 EQU 2B0H ; 8259 的 OCW3 端口地址DATA SEGMENTMES1 DB YOU CAN PLAY A KEY ON THE KEYBOARD!,0DH, 0AH, 24HMES2 DD MES1MESS1 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 *!
13、,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 ENDSSTACKS SEGMENTDB 100 DUP(?)STACKS ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 END
14、SCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKS, ES:DATA.386START: MOV AX,DATAMOV DS, AXMOV ES, AXMOV AX, STACKSMOV SS, AXMOV DX, I8259_1 ;初始化 8259 的 ICW1MOV AL, 13H ;边沿触发、单片 8259、需要 ICW4,查表得到控制字OUT DX,ALMOV DX,I8259_2 ;初始化 8259 的 ICW2MOV AL,0B0H OUT DX,ALMOV AL,03HOUT DX,ALMOV DX, O8259_1 ;初始化 8259
15、 的中断屏蔽操作命令字MOV AL, 000H ;打开屏蔽位,将全部屏蔽位打开OUT DX,ALQUERY: MOV AH,1 ;判断是否有按键按下INT 16HJNZ QUIT ;有按键则退出MOV DX,O8259_3 ;向 8259 发送查询命令MOV AL,6CH ;01101100OUT DX,ALIN AL,DX ;读出查询字TEST AL,80H ;判断中断是否已响应,响应后对应位置 0JZ QUERY ;没有响应则继续查询AND AL,07HCMP AL,00HJE IR0ISR ;若为 IR0 请求,跳到 IR0 处理程序CMP AL,01HJE IR1ISR ;若为 IR1
16、 请求,跳到 IR1 处理程序CMP AL,02HJE IR2ISR ;若为 IR2 请求,跳到 IR2 处理程序CMP AL,03HJE IR3ISR ;若为 IR3 请求,跳到 IR3 处理程序CMP AL,04HJE IR4ISR ;若为 IR4 请求,跳到 IR4 处理程序CMP AL,05HJE IR5ISR ;若为 IR5 请求,跳到 IR5 处理程序CMP AL,06HJE IR6ISR ;若为 IR6 请求,跳到 IR6 处理程序CMP AL,07HJE IR7ISR ;若为 IR7 请求,跳到 IR7 处理程序JMP QUERYIR0ISR: MOV AX,DATAMOV D
17、S,AXMOV DX,OFFSET MESS1 ;显示提示信息MOV AH,09INT 21HJMP EOIIR1ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS2 ;显示提示信息MOV AH,09INT 21HJMP EOIIR2ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS3 ;显示提示信息MOV AH,09INT 21HJMP EOIIR3ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS4 ;显示提示信息MOV AH,09INT 21HJMP EOIIR4ISR: MOV
18、AX,DATAMOV DS,AXMOV DX,OFFSET MESS5 ;显示提示信息MOV AH,09INT 21HJMP EOIIR5ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS6 ;显示提示信息MOV AH,09INT 21HJMP EOIIR6ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS7 ;显示提示信息MOV AH,09INT 21HJMP EOIIR7ISR: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS8 ;显示提示信息MOV AH,09INT 21HEOI: MO
19、V DX,O8259_2 ;向 8259 发送中断结束命令MOV AL, 20H ;00100000OUT DX, ALJMP QUERYQUIT: MOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START实验二 8254 定时/计数器应用实验一、实验目的 1. 掌握 8254 的工作方式及应用编程。 2. 掌握 8254 典型应用电路的接法。 二、实验内容 1计数应用实验。应用 8254 的计数功能,用开关模拟计数,使每当按照计数初值的次数按动单次脉冲后,观察 LED 的变化。 2. 自设计实验。参考实验一的程序, 编写程序,以 1MHz 为时钟源,应用 8
20、254 的定时功能,将其分频为 1Hz。以 LED 灯作为输出显示。三、实验步骤 1.实验 2-1:计数器应用实验程序代码填补:IO8254_MODE EQU 283H ;8254 控制寄存器端口地址IO8254_COUNT0 EQU 280H ;8254 计数器 0 端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX, IO8254_MODE ;初始化 8254 工作方式MOV AL,16H ;计数器 0,方式 3,填入控制字:00010110OUT DX, ALMOV
21、 DX, IO8254_COUNT0 ;装入计数初值MOV AL,04H ;初值为 4,04HOUT DX,ALMOV AX,4C00H ;返回到 DOSINT 21HCODE ENDSEND START此时按两次后灯亮,再按两次后灯灭。如果令计数器0工作在方式0,其实验现象为:按五次后灯变亮,之后不在熄灭。2.实验2-2:自设计实验 实验要求: 参考实验一的程序和接线,自行设计接线图以及程序代码,实现,以 1MHz 为时钟源,应用8254 的定时功能,将其分频为 1Hz。以 LED 灯作为输出显示。使用计数器 0 和计数器 1 两个计数器,设置其均工作于方式 3,计数初值为 1000,通过两
22、个计数器级联,1000*1000=106 达到分频的目的。程序代码如下:IO8254_MODE EQU 283H ;8254 控制寄存器端口地址IO8254_COUNT0 EQU 280H ;8254 计数器 0 端口地址IO8254_COUNT1 EQU 281H ;8254 计数器 1 端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX, IO8254_MODE ;初始化 8254 工作方式MOV AL,37H ;计数器 0,方式 3 00110111 MOV DX,
23、IO8254_COUNT0 ;装入计数初值MOV AX,03E8H ;1000D=0000 0011 1110 1000B=03E8HMOV AL,03HOUT DX,ALMOV AL,AHOUT DX,ALMOV DX, IO8254_MODE ;初始化 8254 工作方式MOV AL,76H ;计数器 1, 方式 3 01110110OUT DX, AL MOV DX,IO8254_COUNT1 ;装入计数初值MOV AX,03E8H ;1000D=0000 0011 1110 1000B=03E8HMOV AL,03HOUT DX,ALMOV AL,AHOUT DX,ALMOV AX,4
24、C00H ;返回到 DOSINT 21HCODE ENDSEND START接线图如下:实验三 8255 并口控制器应用实验一、实验目的 1. 掌握 8255 的工作方式及应用编程。2. 掌握 8255 典型应用电路的接法。 二、实验内容 1. 基本输入输出实验。编写程序,自行设定 A、B 、C 三个口中某一个口为输入,某一个为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。 2. 自设计实验。自行设计能实现 A 口工作在方式一输入,B 口工作在方式一输出的电路并完成程序的编制和在实验箱上的验证,要求,利用控制信号控制数据的输入。三、实验步骤1.实验 3-1:可编程
25、并行接口 8255 方式 0 应用实验编写程序,自行设定 A、B、C 三个口中某一个口为输入,某一个为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。根据原理补全代码中缺失的部分,根据自己的设计,补全接线图,并将代码和对应的接线图写在实验报告中。 说明:运行源程序 8255.asm,按接线图接线,实现并行数据传输功能。设定 B 口为输入,接到开关上, A 口为输出接到 LED 灯上。程序源代码:IO8255_MODE EQU 28BHIO8255_A EQU 288HIO8255_B EQU 289HIO8255_C EQU 28AHCODE SEGMENTASSU
26、ME CS: CODESTART: MOV DX, IO8255_MODE ;8255 初始化MOV AL, 90H ;B 口输入,A 口输出 10010000OUT DX, ALINOUT: MOV DX, IO8255_B ;读入数据IN AL,DXMOV DX,IO8255_A ;输出数据OUT DX,AL MOV DL,0FFH ;判断是否有按键MOV AH, 06HINT 21HJZ INOUT ;若无,则继续MOV AH,4CH ;否则返回INT 21HCODE ENDSEND START接线图如下:2.实验 3-2:自设计试验自行设计完成本实验,要求,8255A 口工作在方式一输
27、入,B 口工作在方式一输出,利用方式一的控制信号,使数据从输入到输出人为可控。在实验报告中画出接线图,并说明设计的原理,给出对应的程序代码。实现方案:方式一的控制信号即为 PC2 和 PC4,将 PC2 和 PC4 分别接到高低电平,控制 A 输入,观察 B 输出的改变。程序源代码:IO8255_MODE EQU 28BHIO8255_A EQU 288HIO8255_B EQU 289HIO8255_C EQU 28AHCODE SEGMENTASSUME CS: CODESTART: MOV DX, IO8255_MODE ;8255 初始化MOV AL, 0B4H ;A 口方式一输入,B
28、 口方式一输出,10110100OUT DX, ALINOUT: MOV DX, IO8255_A ;读入数据IN AL,DXMOV DX,IO8255_B ;输出数据OUT DX,AL MOV DL,0FFH ;判断是否有按键MOV AH, 06HINT 21HJZ INOUT ;若无,则继续MOV AH,4CH ;否则返回INT 21HCODE ENDSEND START实验结果:只有PC4和PC2均为低电平时,改变A的输入,B才会有变化。实验四 8251串口控制器应用实验一、实验目的 (1)掌握8251的工作方式及应用。 (2)学习PC机串口的操作方法。 二、实验内容 与PC串口通讯应用
29、实验。编写程序完成PC机串口与实验装置串口的通讯,由PC机串口1发数,实验装置串口接收。3、实验步骤从键盘输入一个字符,将其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时运行结束,截图如下: