微机原理第三篇

2019-02-19  本文已影响0人  吃茶的武士

双中断优先级实验

【实验目的】

这次的实验内容依然是接着上次的实验内容来的,只是上次做的是双中断优先级实验,这次则使用到了级联。级联与上节课的一些编码内容又不一样。是一个全新的课题

【实验原理】

实验原理简单的介绍一下程序里面主片和从片的中断控制字编写的由来

1.主片(8259A)

ICW1:

11H--->00010001--->因为采用了上升沿触发(D3=0),级联使用(D1=0)

ICW2:

08H--->00001000--->因为中断类型码从08H开始,所以高五位确定

ICW3:

04H--->00000100--->从片接在主片的IR2上,也就是第 三位设为1

ICW4:01H--->00000001--->全嵌套,非缓冲,非自动结束

OCW1:6BH--->01101011--->主片开放了2,4,7的中断,IR2是因为从片的中断IR4是提供给PC连接串口使用,IR7是KK1接到主片上

2.从片

ICW1:

11H--->00010001--->边沿触发,级联使用

ICW2:30H--->00110000--->中断序号从30H开始

ICW3:02H--->表示接的IR2端口

ICW4:01H--->00000001--->表示全嵌套非缓冲非自动结束

OCW1:

0FDH--->111111101--->从片只开放了一个一号地址使用

【实验内容】

代码+注释

DATA SEGMENT

MESS1 DB 'M7','$'

MESS2 DB 'S1','$'

DATA ENDS  

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV AX,0

MOV ES,AX

MOV BX,3CH           ;0FH*4

MOV AX,OFFSET MIR7  ;类型MIR7中断入口,获取IP

MOV ES:[BX],AX

MOV AX,SEG MIR7      ;获取CS

MOV ES:[BX+2],AX

MOV BX,0C4H          ;37H*4

MOV AX,OFFSET SIR1    ;类型SIR1中断入口,获取IP

MOV ES:[BX],AX

MOV AX,SEG SIR1       ;获取CS

MOV ES:[BX+2],AX

   CLI                    ;禁止中断发生

MOV AL,11            ;ICW1,上升沿触发(边沿触发),级联使用

OUT 20H,AL              ;ICW1要求写入偶地址口

MOV AL,08H             ;ICW2中断类型码从08H开始

OUT 21H,AL              ;ICW2要求写入奇地址

MOV AL,04H             ;主片ICW3,因为主片IR2上接有从片,所以第三位是1

OUT 21H,AL              ;ICW3写入奇地址

MOV AL,01H             ;全嵌套,非缓冲,非自动结束中断

OUT 21H,AL              ;ICW4写入奇地址

MOV AL,6BH            

OUT 21H,AL              ;OCW1主片开放了2,4,7的中断,IR2是因为从片的中断

                        ;IR4是提供给PC连接串口使用,IR7是KK1接到主片上

;OCW1写入奇地址

MOVAL,11H      ;从片的ICW1

OUT 0A0H,AL     ;从片 ICW1 写入从片口的偶地址

MOV AL,30H      ;从片中断序号从30H开始

OUT 0A1H,AL     ;从片 ICW2写入从片奇地址

MOV AL,02H      ;后三位表示接在主片的的引脚位置

OUT 0A1H,AL     ;从片 ICW3写入从片奇地址

MOV AL,01H      ;全嵌套,非缓冲,非自动结束中断

OUT 0A1H,AL     ;从片 ICW4写入从片奇地址

MOV AL,0FDH    ;从片只开放了一个1号使用,也就是11111101B

OUT 0A1H,AL     ;从片 OCW1写入从片奇地址

                ;这里注意十六进制的写法,前面是字母的,首位加上0

STI                  ;允许中断发生

AA1:NOP             ;设定一个死循环

JMP AA1

MIR7:

STI                 ;允许中断发生

MOV DX,OFFSET MESS1

MOV AH,09H

INT 21H

MOV AL,20H

OUT 20H,AL       ;主片ocw2

IRET              ;中断返回,中断服务最后一条指令,使程序返回到之前中断发生的地方

SIR1:

STI

MOV DX,OFFSET MESS2

MOV AH,09H

INT 21H

MOV AL,20H

OUT 0A0H,AL         ;从片ocw2,中断结束方式,优先级循环

MOV AL,20H 

OUT 20H,AL         ;主片ocw2,设置中断结束方式,优先循环级

IRET                ;中断返回,使程序返回到中断发生之前的地方

MOV AH,4CH

INT 21H            ;int 21功能调用,4ch是带返回码结束

CODE ENDS

END START

【小结或讨论】

这次的实验和上次一开始做的时候,感觉区别不大,上次是优先级中断,这次是级联中断,都是顺序写两个中断下来,感觉上是这样,大有不同。而且以前的实验都做得有些糊涂,在书本上,指导书上查阅。这次的实验中,仔细的把每一个控制语句都弄清楚,从中断控制字到结束中断控制,感觉弄懂了很多以前迷糊的问题。但是有一个细节在做实验中还有疑问:就是特殊嵌套方式,特殊嵌套允许次级里面的同级中断,在实验中修改了ICW4同级中断似乎也可以。

实验课的内容上课都讲过,重点还是在于理解吧,否则换一个名字就理不清,微机原理里面小知识点很多,串起来才可以完成一个芯片的功能,需多理解记忆。

上一篇下一篇

猜你喜欢

热点阅读