微机原理第二篇

8259中断程序控制实验
【实验目的】

1.掌握8259中断控制的器的工作原理

2.学习8259的应用编程方法

3.掌握8258的级联的使用方法

【实验原理】

1.中断控制器8259A,在此次实验中把主控制器的IR6,IR7以及从控制器的IR1开放出来供实验使用,从片的int接到主片的IR2上构成级联

2.初始化命令字的生成规则,这个和书上的是一致的,比如ICW1中控制边沿触发还是电平触发,在这个实验里,用的是边沿触发,因此置为0;ICW2前五位代表中断向量地址;ICW3是关于从主片的选择的;ICW4是嵌套模式和是否禁止自动中断。

初始化命令字ICW1~ICW4来对8359进行初始化

操作命令字OCW1~OCW3用来定义8259的控制方式



【实验内容】

实验一:单中断实验,把单次脉冲输出和主片的IR7相连,那么每按动一次,都作为一次外部中断事件处理,在显示屏上输出一个字符‘7’。

设置中断代码部分:

CODE SEGMENT

ASSUME CS:CODE

START:

MOV AX,0000H

MOV ES,AX

MOV DI,3CH                                                   ;中断矢量地址,目的地址偏移量即0F*4

MOV AX,OFFSET IR7             ;取中断入口地址

CLD

STOSW

MOV AX,CS                   ;段地址

STOSW

CLI

MOV AL,11H                         ;ICW1

OUT 20H,AL

MOV AL,08H                          ;ICW2

OUT 21H,AL

MOV AL,04H                          ;ICW3

OUT 21H,AL

MOV AL,01H                          ;ICW4

OUT 21H,AL

MOV AL,6FH                         ;0CW1

OUT 21H,AL

STI

A1:NOP

JMP A1                   ;注意这里是一个死循环,是为了体现下面设置的IR7中断

IR7:STI

PUSH AX

PUSH BX

PUSH CX

PUSH DX                                                     ;入栈保护

MOV DL,37H                 ;ascll码中7是37H

MOV AH,02H

INT 21H

MOV AL,20H                   ;OCW2

OUT 20H,AL

POP DX

POP CX

POP BX

POP AX                                                        

IRET


MOV AH,4CH

INT 21H

CODE ENDS

END START

这个代码是按照书上来写的,然后参考了一下教程里面内容。一开始不清楚那个死循环的功能,后来才明白,入过没有这个循环,那么就顺序执行到下面的IR7了,体现不出这是一个“中断”

入栈保护的那一段,保险起见,就把四个寄存器全保护起来了。

实验截图:


微机原理第二篇_第1张图片
实验结果

实验二:双中断优先级实验,KK1和KK2分别连接到主片的8259A的IR7和IR6上,按一次KK1时,显示屏出现显示7,按一次KK2时,显示字符6。由于体现的是中断优先级,所以把实验连线改为IR7,IR6都接KK1,这样按动KK1的时候,只要能够先后的显示出响应结果,就算是实验成功了。

中断代码:

   CODE SEGMENT

ASSUME CS:CODE

START:

MOV AX,0000H

MOV ES,AX

MOV DI,3CH

MOV AX,OFFSET IR7

CLD

STOSW

MOV AX,CS

STOSW

MOV DI,38H            ;中断IR6,0E*4,中断矢量口

MOV AX,OFFSET IR6

CLD

STOSW

MOV AX,CS

STOSW

CLI

MOV AL,11H                   ;ICW1

OUT 20H,AL

MOV AL,08H                   ;ICW2

OUT 21H,AL

MOV AL,04H                    ;ICW3

OUT 21H,AL

MOV AL,01H                    ;ICW4

OUT 21H,AL

MOV AL,2FH                    ;0CW1

OUT 21H,AL

STI

A1:NOP         ;这里依旧有一个循环

JMP A1

IR7:STI            ;中断IR7

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV DL,37H

MOV AH,02H

INT 21H

MOV AL,20H                    ;OCW2

OUT 20H,AL

POP DX

POP CX

POP BX

POP AX                  ;保护以及恢复

IRET


IR6:                      ;中断IR6

STI

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV DL,36H              ;ASCLL码6的表示

MOV AH,02H

INT 21H

MOV AL,20H                ;OCw2

OUT 20H,AL               

POP DX

POP CX

POP BX

POP AX                         ;保护以恢复现场

IRET


MOV AH,4CH

INT 21H

CODE ENDS

END START


实验结果:


微机原理第二篇_第2张图片
实验结果

由实验结果可得,IR6的优先级是比IR7的高的,这段代码就是比上一个多了IR6的中断服务程序。


实验三:实现KK1,KK2的加减功能,摁下KK1,实现加一;摁下KK2实现减一。

与实验二的不同点就是:1.中断操作不同,可以先给寄存器赋一个初始值,然后中断中一个进行加一操作INC,一个进行减一操作DEC。2.连线不同,KK1连IR7,KK2连IR6,由于摁下并不同步,所以这里不再有优先级的考量了。

CODE SEGMENT

ASSUME CS:CODE

START:

MOV AX,0000H

MOV ES,AX

MOV DI,3CH

MOV AX,OFFSET IR7

CLD

STOSW

MOV AX,CS

STOSW

MOV DI,38H

MOV AX,OFFSET IR6

CLD

STOSW

MOV AX,CS

STOSW

CLI

MOV AL,11H;ICW1

OUT 20H,AL

MOV AL,08H;ICW2

OUT 21H,AL

MOV AL,04H;ICW3

OUT 21H,AL

MOV AL,01H;ICW4

OUT 21H,AL

MOV AL,2FH;0CW1

OUT 21H,AL

MOV DL,37H

STI

A1:NOP

JMP A1



IR7:STI

PUSH AX

PUSH BX

PUSH CX

INC DL


MOV AH,02H

INT 21H

MOV AL,20H;OCW2

OUT 20H,AL


POP CX

POP BX

POP AX

IRET


IR6:

STI

PUSH AX

PUSH BX

PUSH CX


DEC DL

MOV AH,02H

INT 21H

MOV AL,20H

OUT 20H,AL


POP CX

POP BX

POP AX

IRET


MOV AH,4CH

INT 21H

CODE ENDS

END START


实验结果:


微机原理第二篇_第3张图片
实验结果

【小结或讨论】

这次实验还是有难度的,周四进行的实验,周三在课堂上写的一个题目练习还是大有帮助的,把中断这一章的知识点都概括一番了。这次试验主要难点就是mov指令的书写,课件里面的和书本有些出入,倒不如按着书本来写,感觉可以利用这次的实验,当作两道例题,再加上课堂上的一道题目,好好消化一番,中断问题应该就差不多了。

你可能感兴趣的:(微机原理第二篇)