复习用
教材是微型计算机接口技术及应用(第三版) 刘乐善主编 华中科技大学出版社
1.中断技术
CPU执行程序时由于内部或外部发出中断,调用写好的中断服务程序去处理这个中断,然后继续执行原来的程序。
2.主程序
8259初始化,也就是ICW1234,系统会自动填好,需要人填的是中断向量。中断向量填到中断向量表里,产生相应中断就会按这个表执行对应程序。
填写之前关中断,cli,填写的时候肯定不能处理中断;
填写中断向量表的方式是ax的高字节写查询or修改,低字节写中断向量号,也就是改哪个向量。35h表示查询,25h表示修改。填完int 21h一下。
比如我要改0b号代表的中断向量,那就mov ax,250bh int 21h
接下来开始填具体内容。只有俩,碰到这个中断要执行的代码的段地址和偏移地址。段地址用seg+子程序名获得,放到ds里,偏移地址就是offset+子程序名,放到dx里,8259会自己拿。然后呢由于我们动了ds,所以要在修改这一段之前push ds,修改完再pop ds.
填完表还要限制一下是处理哪个口的中断,不能谁发中断都处理吧。这个操作就是OCW1,0表示开发,1表示屏蔽。比如要接受2口的中断,就拿和原来数据和11111101与操作一下,保证2口开了,其他不变。当然结束的时候还要复原,也就是or一下00000010。但这是主程序写完的事情了。
最后sti一下,打开中断。
今年网课,代码没跑过不知道能不能跑通就不放了,抄书吧。(网课玩不到实验箱,退钱!
CLI ;修改中断向量时要关中断! MOV AH, 35H MOV AL, N INT 21H MOV OLD_SEG,ES MOV OLD_OFF,BX PUSH DS MOV DX, SEG INTRnew ;取新中断向量段基地址 MOV DS, DX MOV DX, OFFSET INTnew ;取新中断向量偏移地址 MOV AL, N ;中断类型号为N MOV AH, 25H INT 21H POP DS IN AL,21H ;8259开中断 AND AL,0FBH ;1111 1011B 开发IR2 OUT 21H,AL STI
主程序就正常汇编程序,你想干啥干啥。所以接下来我们看中断服务程序怎么写。
3.中断服务程序(子程序)
首先是一般子程序的写法,把要用的寄存器push进来保护现场,最后pop出去。
接下来我们要处理中断,所以cli一下,暂时处理不了别的中断了。然后开始正常处理,不用管别的。处理完要告诉8259我处理完了,也就是OCW2,注意使用OCW2的前提是ICW4里写了手动结束(非自然结束)。重点有俩写法,一是常规结束20h,一是6xh,这里涉及到中断优先级,待会再讲,反正out这个东西就能结束。
mov al,20h out 20h,al ;主片 out 0a1h,al ;从片
最后中断程序返回时iret。
好了,现在程序能跑了。
4.中断优先级
解决一下上面提到的中断优先级问题。既然说优先级,那先看看中断类型。
中断类型有软中断和硬中断两大类,硬中断是外部中断,软中断是内部中断,可以由int n产生,也可以是程序跑着跑着出问题了中断一下,比如溢出。中断有很多原因,每种中断都对应一个中断号。中断号左移两位,就是它在中断向量表里的地址。
有的中断要命,有的不要,天然有优先级。优先级有两种分法:
1.按优先级排队 PC微机中断优先级的顺序: 软件中断>不可屏蔽中断> 可屏蔽中断
2.循环轮流排队
在处理一个中断的时候如果来了优先级更高的中断,就中断优先级低的中断转而去处理优先级高的中断,形成一个美妙的套娃。套娃又有两种套法,一是完全嵌套方式:只能高优先级中断低优先级的中断;二是特殊完全嵌套方式:同级优先级的中断可以相互中断;
需要注意的是,不可屏蔽中断(NMI)也不可以被中断,形成中断嵌套,只有可屏蔽中断(INTR)可以形成。
接下来是分析优先级的过程。8259有8根线,IR0-IR7,一可以接受中断,二是采取完全中断嵌套排队的时候,IR0的优先级最高。所有要产生中断的设备先在中断请求寄存器(IRR)中备案,有中断来置1,处理完置0;中断服务寄存器(ISR)记录正在被相应的中断,并且给它们用复杂的电路排序,但它不会自己清零,所以需要OCW2给它手动清零。20h表示给优先级最高的清理,6xh则可以具体到给谁清。
5.中断的处理
最后看一眼8259是怎么处理中断的,还有这些芯片接口的大致作用。数电部分就不看了吧,毕竟看也看不懂。
用的系统叫可屏蔽中断系统,由两片8259组成;
1.首先是初始化,但系统已经初始化好了,具体内容在P76,要自己初始化看P70;
2.有中断提出申请,经过一些复杂的过程,进行握手,表示可以处理;
3.从cpu获取中断号后,处理标志位,存好端点,准备转移;
4.执行程序;
5.返回断点。
不可屏蔽中断不需要经过中断相应周期,也就是cpu那复杂的过程就能直接响应,响应完直接结束,也不用复杂的结束流程。
关于串行口: