使用教材为
《微型计算机原理与接口技术》(慕课版)
孙丽娟、李爱群、陈燕俐、周宁宁、邓玉龙编著
微机原理复习笔记一
微机原理复习笔记二
微机原理复习笔记三
CPU在执行程序的过程中,由于外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待事件服务结束后,又能自动返回到被中止了的程序中继续执行
能够引发中断的事件,即发出中断请求的来源
微型计算机系统给每一个中断分配的一个中断号n
中断服务子程序的入口地址
存放256个中断号所对应的的中断向量的存储
n型中断向量存放在内存单元地址4n~4n+3这四个单元
单元 | 字节存放 |
---|---|
4n | n型中断服务子程序入口偏移地址低8位 |
4n+1 | n型中断服务子程序入口偏移地址高8位 |
4n+2 | n型中断服务子程序所在代码段段基址地址低8位 |
4n+3 | n型中断服务子程序所在代码段段基址地址高8位 |
eg:(00180H)=44H ,(00181H)=55H,(00182H)=66H,(00183H)=77H,请问00180H~00183H中存放的是什么中断类型的中断向量?中断向量为多少?对应的物理地址是多少?
解:避免出错,将180H改为二进制数再右移2位
得到中断类型码(60H)
中断向量为 (7766H:5544H)
对应的物理地址是 (7CBA4H)
计算方法见微机原理复习笔记一——80486三种工作模式
功能:F寄存器中 I 标志置1,CPU处于开中断状态
功能:F寄存器中 I 标志置0,CPU处于关中断状态
n 为中断类型码,为0~255中有定义的无符号整数
功能:无条件转向 n 型中断服务子程序
中断服务子程序的出口指令
功能:依次从栈顶弹出6个元素→IP、CS、F
若栈顶是 INT n 的断点地址,则执行后返回断点
要求会计算
n (n<10)片8259A级联可管理 7n+1
eg:
PC/AT系统使用两片8259级联,可管理( 15 )级中断
33个中断源至少需要( 5 )片8259A进行管理
可屏蔽中断(INTR)
非屏蔽中断(NMI)
相同点
不同点
中断源:8254的 0# 计数器,每55ms有一次中断请求
中断类型:08H
开发应用
eg:要求利用PC系列机上的 8254 的 0 号计数器引发的日时钟中断,设计程序,每间隔 1s 在PC在终端屏幕上显示一行字符‘HELLO!’,显示10行后结束
置换1CH
DATA SEGMENT
MESG DB 'HELLO!',0DH,0AH,'$'//0DH回车,0AH换行
OLD1C DD ?//存放系统原中断口地址
ICOUNT DB 18//中断次数(初值),一次55ms,18次1s
COUNT DB 10//显示行数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
CLI//置换中断向量需要先关中断
CALL READ1C//转移系统1CH型中断向量
CALL WRITE1C//写入用户1CH型中断向量
STI//置换结束后开中断
SCAN: CMP COUNT,0//判断是否显示10行
JNZ SCAN
CLI//操作完成关中断
CALL RESET//恢复系统1CH中断向量
STI
MOV AH,4CH
INT 21H//结束程序,返回DOS
SERVICE PROC
PUSH AX
PUSH CX
PUSH DX
PUSH BX
PUSH SP
PUSH BP
PUSH SI
PUSH DI//保护现场,相当于PUSHA
PUSH DS//DS=40H,执行INT 1CH的前提是DS=40H
MOV AX,DATA
MOV DS,AX//重新给DS赋值
DEC ICOUNT//中断计数
JNZ EXIT//不满18次转
MOV ICOUNT,18//1s后对ICOUNT重新赋值
DEC COUNT//显示行数减1
MOV AH,9
LEA DX,MESG
INT 21H//显示字符串
EXIT: POP DS//恢复现场
POP DI//相当于POPA
POP SI
POP BP
POP SP
POP BX
POP DX
POP CX
POP AX
IRET//返回系统08H型中断服务子程序
SERVICE ENDP
READ1C PROC//转移系统1CH转移向量
MOV AX,351CH
INT 21H//通过INT 21H的35号子功能读取1CH的中断向量
MOV WORD PTR OLD1C,BX//偏移地址
MOV WORD PTR OLD1C+2,ES//段基址
RET
READ1C ENDP
WRITE1C PROC//写入用户1CH型中断向量
PUSH DS
MOV AX,CODE
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AX,251CH
INT 21H
POP DS
RET
WRITE1C ENDP
RESET PROC//恢复系统1CH型中断向量
MOV DX,WORD PTR OLD1C//偏移地址
MOV DS,WORD PTR OLD1C+2//段基址
MOV AX,251CH
INT 21H//通过INT 21H的25号子功能写入1CH的中断向量
RET
RESET ENDP
CODE ENDS
END BEG
置换08H
DATA SEGMENT
MESG DB 'HELLO!',0DH,0AH,'$'//0DH回车,0AH换行
OLD08 DD ?//存放系统原中断口地址
ICOUNT DB 18//中断次数(初值),一次55ms,18次1s
COUNT DB 10//显示行数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
CLI//置换中断向量需要先关中断
CALL READ08//转移系统1CH型中断向量
CALL WRITE08//写入用户1CH型中断向量
STI//置换结束后开中断
SCAN: CMP COUNT,0//判断是否显示10行
JNZ SCAN
CLI//操作完成关中断
CALL RESET//恢复系统1CH中断向量
STI
MOV AH,4CH
INT 21H//结束程序,返回DOS
SERVICE PROC
PUSH AX
PUSH CX
PUSH DX
PUSH BX
PUSH SP
PUSH BP
PUSH SI
PUSH DI//保护现场,相当于PUSHA
PUSH DS//DS=40H,执行INT 1CH的前提是DS=40H
MOV AX,DATA
MOV DS,AX//重新给DS赋值
DEC ICOUNT//中断计数
JNZ EXIT//不满18次转
MOV ICOUNT,18//1s后对ICOUNT重新赋值
DEC COUNT//显示行数减1
MOV AH,9
LEA DX,MESG
INT 21H//显示字符串
EXIT: POP DS//恢复现场
POP DI//相当于POPA
POP SI
POP BP
POP SP
POP BX
POP DX
POP CX
POP AX
JMP OLD08//转向原来的08H型中断服务子程序
SERVICE ENDP
READ08 PROC//转移系统08H转移向量
MOV AX,3508H
INT 21H//通过INT 21H的35号子功能读取08H的中断向量
MOV WORD PTR OLD1C,BX//偏移地址
MOV WORD PTR OLD1C+2,ES//段基址
RET
READ08 ENDP
WRITE08 PROC//写入用户08H型中断向量
PUSH DS
MOV AX,CODE
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AX,2508H
INT 21H
POP DS
RET
WRITE1C ENDP
RESET PROC//恢复系统08H型中断向量
MOV DX,WORD PTR OLD08//偏移地址
MOV DS,WORD PTR OLD08+2//段基址
MOV AX,2508H
INT 21H//通过INT 21H的25号子功能写入08H的中断向量
RET
RESET ENDP
CODE ENDS
END BEG
中断类型:71H
(举例见书P320)
中断处理过程
为实现通信,收发双方一帧数据的格式和通信速率要保持一致
在此并未严格区分波特率与数据通信速率
单位时间内(每秒)传送信号的个数
eg:设异步通信一帧字符有8个数据位,无校验,1个停止位,如果波特率为9600,则每秒钟能传输多少帧字符?(960)传输一帧字符需要多少时间?(1/960秒)
解:一帧字符一共有10位
每秒传输 9600/10 = 960 帧字符
传输一帧字符需要 1/960 秒
RS232信号采用负逻辑:“1”= -3V ~ -15V,“0”= +3V ~ +15V
只列出需要掌握的内容
寄存器 | 功能 | 主串口地址 | 辅串口地址 |
---|---|---|---|
发送保持寄存器 | 保存CPU送出的并行数据 转移至发送移位寄存器 |
3F8H | 2F8H |
接收缓冲寄存器 | 保存经转换的并行数据 等待CPU读取 |
3F8H | 2F8H |
通信线状态寄存器 | 提供数据传输的状态信息 | 3FDH | 2FDH |
中断允许寄存器 | 提供4级中断是否被允许的信息 | 3F9H | 2F9H |
MODEM控制寄存器 | D3 ~ D0 控制引脚输出电平 D4 控制8250工作方式 |
3FCH | 2FCH |
除数寄存器 | 存放分频系数 | 高8位 3F9H 低8位 3F8H |
高8位 2F9H 低8位 2F8H |
通信线控制寄存器 | 规定串行异步通信的数据格式 | 3FBH | 2FBH |
步骤
① 80H→通信线控制寄存器,使除数寄存器访问位=1
② 分频系数高/低8位→除数寄存器高/低8位,确定通信速率
③ D7=0的命令字→通信线控制寄存器
定义一帧数据格式
使除数寄存器访问位=0,从而使后继的对合用端口的访问只读写非除数寄存器
④ 设置中断允许命令字
查询方式,则中断允许命令字=0,禁止中断
中断方式,使中断允许命令字相应位置1
⑤ 设置MODEM控制寄存器
中断方式:D3=1,允许8250送出中断请求
查询方式:D3=0
内环方式:D4=1
正常通信:D4=0
使用联络线:D1、D0位置1
eg: 编写一个子程序(主串口)
(1)分频系数 = 0060H,一帧数据包括 8 个数据位,1 个停止位,无校验
(2)采用查询方式,完成内环内检
I8250 PROC
MOV DX,3FBH
MOV AL,80H
OUT DX,AL//设置寻址位
MOV DX,3F9H
MOV AL,0
OUT DX,AL//除数高8位
MOV DX,3F8H
MOV AL,60H
OUT DX,AL//除数低8位
MOV DX,3FBH
MOV AL,03H
OUT DX,AL//通信线控制寄存器D7=0,规定数据格式
MOV DX,3F9H
MOV AL,0
OUT DX,AL//设置中断允许寄存器
MOV DX,3FCH
MOV AL,10H
OUT DX,AL//设置MODEM寄存器
RET
I8025 ENDP
在发送数据前,读通信线状态寄存器(D5)获取发送保持或移位寄存器(数据口)是否空闲
在接收数据前,读通信线状态寄存器(D0)获取接收缓冲寄存器(数据口)是否已经收到1帧数据
eg:利用主串口查询方式发送一个字符“A”
SCAN: MOV DX,3FDH
IN AL,DX
TEST AL,20H//D5=1
JZ SCAN
MOV DX,3F8H
MOV AL,'A'
OUT DX,AL
利用辅串口查询方式接收一个字符
SCAN: MOV DX,2FDH
IN AL,DX
TEST AL,01H//D0=1
JZ SCAN
MOV DX,2F8H
IN AL,DX
用系统机串行口采用中断方式完成字符发送和接收,编程时应采取哪些措施
A1 | A0 | R D ‾ \overline{RD} RD | W R ‾ \overline{WR} WR | C S ‾ \overline{CS} CS | 操作 |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 从A端口读取数据 |
0 | 1 | 0 | 1 | 0 | 从B端口读取数据 |
1 | 0 | 0 | 1 | 0 | 从B端口读取数据 |
0 | 0 | 1 | 0 | 0 | 向A端口写入数据 |
0 | 1 | 1 | 0 | 0 | 向B端口写入数据 |
1 | 0 | 1 | 0 | 0 | 向C端口写入数据 |
1 | 1 | 1 | 0 | 0 | 向控制端口写入命令字 |
工作方式 | 适用于端口 |
---|---|
方式 0 | A、B、C |
方式1 | A、B |
方式2 | A |
基本型输入输出方式,即无条件输入输出方式,不需要联络信号
选通型输入输出方式,必须有联络线(输入:IBF、 S T B ‾ \overline{STB} STB;输出: O B F ‾ \overline{OBF} OBF、 A C K ‾ \overline{ACK} ACK)
输入
IBF: 输入缓冲器满-----状态线(A:PC5,B:PC1)
只有在IBF = 0 时,外设才能写入数据
S T B ‾ \overline{STB} STB: 输入选通信号,必须有(A:PC4,B:PC2)
INTE: 中断允许寄存器
当PC4 = 1时,A 口允许中断
当PC2 = 1时,B 口允许中断
INTR:中断请求信号,高电平有效(A:PC3,B:PC0)
输出
O B F ‾ \overline{OBF} OBF:输出缓冲器满-----状态线(A:PC7,B:PC1)
只有在IBF = 1 时,才能输出数据
A C K ‾ \overline{ACK} ACK: 确认应答(A:PC6,B:PC2)
INTE: 中断允许寄存器
当PC6 = 1时,A 口允许中断
当PC2 = 1时,B 口允许中断
INTR:中断请求信号,高电平有效(A:PC3,B:PC0)
双向数据传输方式
步骤:
eg:编写初始化子程序,端口地址为200H~203H
(1)A口、B口工作在选通型输入方式
(2)允许B口中断、A口禁止中断
(3)无关项设置“0”
解:控制端口为203H,方式控制字为 B6H,C口按位置 0 / 置 1 控制字为08H(A)、05H(B)
I8255 PROC
MOV DX,203H
MOV AL,B6H
OUT DX,AL//设置方式控制字
MOV AL,08H
OUT DX,AL//A口禁止中断
MOV AL,05H
OUT DX,AL//B口允许中断
RET
I8255 ENDP