资源描述
微机原理与接口技术
实验报告
学 院 计算机与通信工程学院
班 级 通信1002
姓 名 马勇
学 号 41050213
2012年5月
实验十一 8259中断控制器应用实验
一、实验目的
1. 学习中断控制器8259的工作原理;
2. 掌握可编程控制器8259的应用编程方法。
二、实验所用设备
1. PC微机一台;
2. TD-PIT+ 实验系统一套。
三、实验内容
1. 利用PC机给实验系统分配的中断线,设计一个单中断应用。使用单次脉冲模拟中断产生。编写中断处理程序,在显示器屏幕上显示一个字符。
2. 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。
四、实验原理
1.8259控制器的介绍
中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图11-1所示。
8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图11-2所示,OCW1-OCW3各命令字格式如图11-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。
图11-1 8259内部结构和引脚图
图11-2(a) ICW1格式
图11-2(b) ICW2格式
图11-2(c) ICW3格式
图11-2 (d)ICW4格式
图11-3 OCW命令字
2.8259寄存器及命令的控制访问
在硬件系统中,8259A仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的器和命令字。对寄存器和命令的访问控制表如表11-1所示。
3.PC微机系统中的8259
在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表11-2示。两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H两个端口。系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。
在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。对INTR中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。
表11-1 8259寄存器及命令的访问控制
表11-2 PC微机系统中的硬件中断
五、实验说明及步骤
1.单中断应用实验
本实验要求使用总线上INTR中断请求线完成一次单中断应用实验。中断处理程序完成在屏幕上的显示字符“9”。实验前先运行CHECK程序,得到INTR所对应的中断号、相应的初始化命令字寄存器ICW及操作命令字寄存器OCW的地址、开屏蔽的命令字、中断矢量地址和PCI卡中断控制寄存器INTCSR的地址。得到这些信息后就可以开始设计实验了。参考程序流程如图11-4所示。
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 首先运行CHECK程序,查看INTR中断号及相关信息;
3. 参考实验流程图编写程序,然后编译链接;
4. 将单次脉冲单元的KK1+连接到系统总线上的INTR;
5. 运行程序,按动KK1+按键,观察中断是否产生。
(a)主程序 (b)中断处理程序
图11-4 8259中断应用实验(1)参考程序流程图
2.扩展多中断源实验
利用实验平台上的8259控制器,可以对总线上的INTR进行扩展。将8259的INT连接到INTR,8259的8路中断请求线IR0~IR7就成了单一INTR中断请求线的扩充。这8路中断源共用INTR的中断矢量,共用INTR的中断服务线程。在INTR的中断服务线程中通过对8259 OCW3的查询,以确定是IR0~IR7中哪个产生中断,然后转到相应的服务线程进行处理。将8259的OCW3中P位置1即可执行查询,查询字格式如图11-5所示。
图11-5 8259 OCW3查询命令字格式
本实验要求实现8259控制器IR0、IR1两路中断。用KK1+和KK2+模拟两个中断源,在IR0对应的服务程序中显示字符“0”,在IR1对应的服务程序中显示字符“1”。实验程序参考流程如图11-6所示。参考实验电路如图3-5-8所示。
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 首先运行CHECK程序,查看INTR中断号及相关信息;
3. 参考实验流程图编写程序,然后编译链接;
4. 参考实验接线图连接实验电路;
5. 运行程序,按动KK1+、KK2+按键,观察中断响应是否正常。
六、实验报告内容及要求
1. 按步骤分析实验原理及实验过程中存在的问题。
2. 附中断处理程序清单。
(a)主程序 (b)中断处理程序
图11-6 8259中断应用实验(2)参考程序流程图
图11-7 8259中断应用实验(2)参考接线图
中断处理程序如下:
(1) 单中断应用实验
INTR_IVADD EQU 01C8H ;INTR对应的中断矢量地址
INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址
INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址
INTR_IM EQU 0FBH ;INTR对应的中断屏蔽字
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存INTR原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES ;显示退出提示
MOV AH,09H
INT 21H
CLI
MOV AX,0000H ;替换INTR的中断矢量
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR屏蔽位
IN AL,DX
MOV IM_BAK,AL ;保存INTR原中断屏蔽字
AND AL,INTR_IM
OUT DX,AL
STI
WAIT1: MOV AH,1 ;判断是否有按键按下
INT 16H
JZ WAIT1 ;无按键则跳回继续等待,有则退出
QUIT: CLI
MOV AX,0000H ;恢复INTR原中断矢量
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H ;返回到DOS
INT 21H
MYISR PROC NEAR ;中断处理程序MYISR
PUSH AX
_ MOV AL,39H __ ;使用DOS功能调用输出字符9
_ MOV AH,0EH _ ;选择DOS功能调用号
INT 21H
MOV DL,20H
INT 21H
OVER: MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP AX
IRET
MYISR ENDP
CODE ENDS
END START
屏幕显示截图:
(2)扩充中断应用实验
INTR_IVADD EQU 01C8H ;INTR对应的中断矢量地址
INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址
NTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址
INTR_IM EQU 0FBH ;INTR对应的中断屏蔽字
IOY0 EQU 3000H ;片选IOY0对应的端口始地址
MY8259_ICW1 EQU IOY0+00H ;实验系统中8259的ICW1端口地址
MY8259_ICW2 EQU IOY0+04H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU IOY0+04H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU IOY0+04H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU IOY0+04H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU IOY0+00H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU IOY0+00H ;实验系统中8259的OCW3端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存INTR原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES ;显示退出提示
MOV AH,09H
INT 21H
CLI
MOV AX,0000H ;替换INTR的中断矢量
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位
IN AL,DX
MOV IM_BAK,AL ;保存INTR原中断屏蔽字
AND AL,INTR_IM
OUT DX,AL
MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1
MOV AL,____13H_____ ;边沿触发、单片8259、需要ICW4
OUT DX,AL
MOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2
MOV AL,08H
OUT DX,AL
MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL,___00H______ ;非自动结束EOI
OUT DX,AL
MOV DX,MY8259_OCW3 ;向8259的OCW3发送读取IRR命令
MOV AL,0AH
OUT DX,AL
MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL,___0FCH______ ;打开IR0和IR1的屏蔽位
OUT DX,AL
STI
WAIT1: MOV AH,1 ;判断是否有按键按下
INT 16H
JZ WAIT1 ;无按键则跳回继续等待,有则退出
QUIT: CLI
MOV AX,0000H ;恢复INTR原中断矢量
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H ;返回到DOS
INT 21H
MYISR PROC NEAR ;中断处理程序MYISR
PUSH AX
QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送读取IRR命令
IN AL,DX ;读出IRR寄存器值
_AND AL,03H__
CMP AL,01H
JE IR0ISR ;若为IR0请求,跳到IR0处理程序
JNE IR1ISR ;若为IR1请求,跳到IR1处理程序
JMP OVER
IR0ISR:MOV AL,30H ;IR0处理,显示字符串STR0
MOV AH,0EH
INT 10H
MOV AL,20H
INT 10H
JMP OVER
IR1ISR:MOV AL,31H ;IR1处理,显示字符串STR1
MOV AH,0EH
INT 10H
MOV AL,20H
INT 10H
JMP OVER
OVER: MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP AX
IRET
MYISR ENDP
CODE ENDS
END START
屏幕显示截图:
七、实验总结
通过本次实验,熟悉了可编程芯片8259,深入理解了中断控制器8259的工作原理,基本掌握了可编程控制器8259的应用编程方法,在实验箱上的结果实现成功,达到预期实验目的。实验过程中,曾出现过接线过程中总是死机的情况,后来经总结并与同学交流发现时在接线时程序在运行着却断掉了实验箱的电源所致,多加注意后,实验结果正常。
实验十二 8255并口控制器应用实验
一、实验目的
1. 掌握8255的工作方式及应用编程;
2. 掌握8255的典型应用电路接法。
二、实验所用设备
1. PC微机一台;
2. TD-PIT+ 实验系统一套。
三、实验内容
1. 基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。
2. 流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。
四、实验原理
微机接口电路中,常采用74LS138译码器来实现I/O端口或存储器的地址译码。74LS138有3个输入引脚、3个控制引脚及8个输出引脚,其管脚信号如图10-1所示。当3个控制信号有效时,相应于输入信号A、B、C状态的那个输出端为低电平,该信号即可作为片选信号。并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:
方式0 — 基本输入/出方式;
方式1 — 选通输入/出方式;
方式2 — 双向选通工作方式。
8255的内部结构及引脚如图12-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图12-2所示。
图12-1 8255的内部结构及引脚
图12-2 8255控制字格式
五、实验说明及步骤
1.基本输入输出实验
本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。参考程序流程如图12-3所示。
图12-3 8255并口应用实验(1)参考程序流程图
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 参考图12-4所示连接实验线路;
3. 首先运行CHECK程序,查看I/O空间始地址;
4. 利用查出的地址编写程序,然后编译链接;
5. 运行程序,拨动开关,看数据灯显示是否正确。
图12-4 8255并口应用实验(1)参考接线图
2.流水灯显示实验
首先分别向A口和B口写入80H和01H,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。参考实验程序流程如图12-5所示。
图12-5 8255并口应用实验(2)参考程序流程图
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 首先运行CHECK程序,查看I/O空间始地址;
3. 利用查出的地址编写程序,然后编译链接;
4. 参考图12-6所示连接实验线路;
5. 运行程序,看数据灯显示是否正确。
图12-6 8255并口应用实验(2)参考接线图
六、实验报告内容及要求
1.附主要程序清单。
(1)基本输入输出实验:
IOY0 EQU 3000H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,__82H___ ;工作方式0,A口输出,B口输入
OUT DX,AL
LOOP1: MOV DX,MY8255_B ;读B口
IN AL,DX
MOV DX,MY8255_A ;写A口
OUT DX,AL
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ LOOP1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
CODE ENDS
END START
(2)流水灯显示实验:
IOY0 EQU 3000H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
LA DB ? ;定义数据变量
LB DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;定义8255工作方式
MOV AL,____80H_____ ;工作方式0,A口和B口为输出
OUT DX,AL
MOV DX,MY8255_A ;写A口发出的起始数据
MOV AL,____80H_____
OUT DX,AL
MOV LA,AL
MOV DX,MY8255_B ;写B口发出的起始数据
MOV AL,____01H_____
OUT DX,AL
MOV LB,AL
LOOP1: CALL DALLY
MOV AL,LA ;将A口起始数据右移再写入A口
__ROR AL,1__
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB ;将B口起始数据左移再写入B口
_ ROR AL,1__
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ LOOP1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
DALLY PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,0FFFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
七、实验总结
通过本次实验,深入理解了8255的工作方式及应用编程,基本掌握了8255的典型应用电路接法。
实验十四 8254定时/计数器应用实验
一、实验目的
1. 掌握8254的工作方式及应用编程;
2. 掌握8254的典型应用电路接法。
二、实验所用设备
1. PC微机一台;
2. TD-PIT+ 实验系统一套。
三、实验内容
1. 计数应用实验。编写程序,应用8254的计数功能,用开关模拟计数,使每当按动KK1-五次后,产生一次计数中断,并在屏幕上显示一个字符‘5’。
2. 定时应用实验。编写程序,应用8254的定时功能,实现一个秒表计时并在屏幕上显示。
四、实验原理
8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:
(1) 有3个独立的16位计数器;
(2) 每个计数器可按二进制或十进制(BCD)计数;
(3) 每个计数器可编程工作于6种不同工作方式;
(4) 8254每个计数器允许的最高计数频率为10MHz(8253为2MHz);
(5) 8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6) 计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
图14-1是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下述:
(1) 方式0:计数到0结束输出正跃变信号方式。
(2) 方式1:硬件可重触发单稳方式。
(3) 方式2:频率发生器方式。
(4) 方式3:方波发生器。
(5) 方式4:软件触发选通方式。
(6) 方式5:硬件触发选通方式。
图14-1 8254的内部接口和引脚
8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表14-1所示。读回控制字格式如表14-2所示。当读回控制字的D4位为0时,由该读回控制字D1~D2位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。状态字格式如表14-3所示。
表14-1 8254的方式控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
计数器选择
读/写格式选择
工作方式选择
计数码制选择
00-计数器0
01-计数器1
10-计数器2
11-读出控制字标志
00-锁存计数值
01-读/写低8位
10-读/写高8位
11-先读/写低8位,再读/写高8位
000-方式0
001-方式1
010-方式2
011-方式3
100-方式4
101-方式5
0-二进制数
1-十进制数
表14-2 8254读出控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0-锁存计数值
0-锁存状态信息
计数器选择(同方式控制字)
0
表14-3 8254状态字格式
D7
D6
D5
D4
D3
D2
D1
D0
OUT引脚现行状态
1-高电平 2-低电平
计数初值是否装入
1-无效 2-计数有效
计数器方式(同方式控制字)
五、实验说明及步骤
1.计数应用实验
编写程序,将8254的计数器0设置为方式3,计数值为十进制5,用微动开关KK1-作为CLK0时钟,OUT0连接INTR,每当KK1-按动5次后产生中断请求,在屏幕上显示字符“5”。参考程序流程如图14-2所示。单元中GATE0已经连接了一个上拉电阻,所以GATE0不用连接。
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2.
展开阅读全文