# 微机复习 ## 第五、六章 ### 系统的三大总线 - 定义: 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,是由导线组成的传输线束。 - - 数据总线DB - 用于传送数据信息。可以是CPU把数据传送到存储器或I/O接口等部件,也可以其它部件的数据传送到CPU。 - - 地址总线AB - 专门用来传送地址,只能从CPU传向外部存储器或者IO端口 - - 控制总线CB - 传送控制信号和时序信号。可以是微处理器送往存储器活IO接口电路的。也可以是其他部件反馈给CPU的 - 总线宽度 一次可以同时传输的数据位数 - 总线工作频率 每秒能传输数据次数 - 传输率 每秒传输字节数 ### 存储器扩展的基本方法与译码方法 - - 字和位扩展 - 总片数=总容量/容量(片) - - 位扩展 - 值在位数方向扩展,地址线并联,数据线连接到CPU数据总线的各位。 - - 字扩展 - 仅扩展存储容量,位数不变,同名地址线,数据线,读写线并联。 ## 第七章 ### 端口的定义,种类,编址方式 - 定义: 端口是接口电路种,能与CPU交换信息的寄存器 - - 分类 - 数据口 存放CPU向外设输出或外设输入的数据 - 控制口 存放控制信息---控制接口电路、外设的工作 - 状态口 存放状态信息---反映外设的状态 - - 编址方式 - - IO端口独立编址 - IO端口不占用存储空间,CPU要有专用的IO指令 - - 存储器映像方式 - 把端口和存储单元等同看待,统一编址 - 凡访问存储单元的指令都可以访问IO端口,端口地址但用存储空间 ### 对端口的寻址方法 - - 直接寻址 - IN AL,N;端口N取数->AL - OUT N,AL;AL内容到端口N - - DX间址 - IN AL,DX;[DX]端口--->AL - OUT DX,AL;AL---->[DX]端口 ### 微机系统与接口的数据交换方式 - - 无条件传送 - MOV DX,xxH - IN/OUT AL/DX,DX/AL - - 查询方式 - MOV DX,状态口 - IN AL,DX - TEST AL,80H/1 JZ/JNZ(read/write) 之后同1 - - 中断向量表 - 实模式下 中断向量表 - 保护模式下 中断描述符表 - - 中断向量表的存放: 第n个中断向量的服务程序入口的偏移地址存放在4n-4n+3上 - - 设置方法 - - 用户自己编写程序填写中断向量表 - ```asm= CLI;LET SYSCALL CAN'T DO WORK PUSH DS;SAVE MOV AX,0000H MOV DS,AX;BASE ADDR MOV BX,4*N;BX IS OFFSET MOV AX,OFFSET SERVICE;FUNC SERVICE MOV [BX],AX;PUSH FUNC ADDR MOV AX,SEG SERVICE MOV [BX+2],AX;THE TABLE LIKE DWORD OFFSET DWORD BASE ADDR,SO PUSH THE FUNC BASE ADDR POP DS;RET STI ``` - DOS提供了两个子程序,用于中断向量的读出写入 - - INT 21H的35H子功能,AL=中断类型码 ES:BX=n型中断向量,独出n型中断向量 - INT 21H的25H子功能,DS=中断服务的代码段基址,DX=中断服务的偏移地址,AL=中断类型码 - - - ```asm= CLI PUSH DS PUSHA MOV AX,SEG SERVICE MOV DS,AX MOV DX,OFFSET SERVICE MOV AH,25H MO AL,N INT 21H POPA POP DS STI ``` - - IRET 弹出IR CS F - DMA方式 ## 8259(中断控制器) ### 定义 中断是指CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待此事件服务结束后,又能自动返回到被中止了的程序中继续执行的过程。 ### 中断方式 - - 中断方式 - - 外部中断源 IO设别 数据通道 时钟 故障源 - 内部中断源 执行INT CPU指令异常 ### 分类 - 外部 硬件 - 内部 软件 类型码跟向量看上面 ### 相应过程&&条件 1.F寄存器到栈内保存 2.断的地址(cs跟ip)入栈 3.根据对应的中断号取出地址 4.执行完毕,中断发挥指令(IRET---->POP IP POP CS POP F) 条件 中断优先级 禁止中断 屏蔽中断 中断嵌套 ### 8259处理 - 中断屏蔽寄存器 屏蔽字某位=1则对应中断被屏蔽 - 中断请求 对应位=1发起中断 - 优先权电路 比较优先级,比较cpu正在执行的跟刚进入的哪个优先级高 - 中断服务寄存器 记录cpu蒸菜服务的中断源 对应位=1为这波/正在执行 - - 过程 - 由中断请求寄存器加到引脚IR0-IR7 - 在屏蔽寄存器下,未被屏蔽的中断请求送入优先权电路判断 - 判断后,选中当前最高级别的中断源从INT向CPU发出信号 - 满足条件后,向8259发出两个中断响应信号 - 第一个响应信号后,把对应位flag置1,把请求寄存器=0 - 第二个响应信号后,把选中的类型码n送往cpu - CPU取出中断向量,完成中断服务 ### 日时钟中断 40H:6CH~40H:6FH这4个单元(共32位)为日时钟计数器,每55ms加1次,计数到:001800B0H,为24小时,其计数值供系统软件使用。 系统启动CPU执行BIOS种一段程序,读取CMOS实时时钟电路的时间值-->计数值-->40:6CH~40:6FH作为日时钟计数器的计数初值 - 定时周期==55ms整数倍时候,替换1CH 结束前不需要向8259发结束命令 - !=55ms整数倍时候,取输出周期与55ms的最大公约数,替换08H,结束前需要向8259发结束命令(MOV AL.20H OUT 20H,AL) ### 用户中断 - 替换0AH,结束前只需向主8259发结束 - 替换71H,结束前需向主从8259各发结束 - - 步骤‘ - 保存原来的 - 替换为设计的 - 打开用户中断(从8259开1,主开2的屏蔽置零 - 结束前发送结束命令 - 恢复成原来的 ### 软件中断 VS 硬件中断 - - 相同 - 都会引起程序中止 - 获取中断码n后,都回取出中断源的中断向量IP CS,从而去执行 - - 不同 - 引发方式不同 - 获取中断类型码的方式不同 - CPU响应条件不同 - 中断处理程序的结束方式不同 ## 8250 ### 串行通信的数据传输方式和特点 数据倍逐位顺序传送 - 串行异步通信 指一帧字符用起始位和停止位来完成收发同步 - 串行同步通信 靠同步字符来完成收发双方同步 - - 传输方式 - 单工 数据向一个固定方向传送 - 半双工 都有收发能力,但就一条信道 - 全双工 收发双方可以同时进行数据传输 #### 通信系统需要考虑的 - 信道的贷款和数据的传输速率 - 信号的调制与解调 - 串行通信的信号格式 ### RS232C&&TTL | 25针连接器端子号 | 名称 | 方向(从微机出发) | 功能 | | ---------------- | ---- | ---------------- | ------------------------------- | | 2 | TXD | 输出(DTE→DCE) | 发送数据(Transmit Data) | | 3 | RXD | 输入(DCE→DTE) | 接收数据(Receive Data) | | 4 | RTS | 输出(DTE→DCE) | 请求发送(Request To Send) | | 5 | CTS | 输入(DCE→DTE) | 允许发送(Clear To Send) | | 6 | DSR | 输入(DCE→DTE) | 数据设备准备好(Data Set Ready) | | 7 | | | 信号地(SignalGround) | | 8 | DCD | 输入(DCE→DTE) | 载波检测(Carrier DeteCt) | | 20 | DTR | 输出(DTE→DCE) | 数据终端准备好(Data Term Ready) | | 22 | RI | 输入(DCE→DTE) | 振铃指示(Ring Indicator) | RS232C对信号的电平标准和控制信号的定义做了规定 逻辑1 电平在-3~-15v 逻辑0 电平在3~15v TTL 逻辑1 +5v 逻辑0 0v ### 串行通信数据帧格式 | 起始位 | 数据位 | 奇偶校验位 | 停止位 | | -------- | ------ | ---------- | -------------- | | 1位逻辑0 | 5-8位 | 0-1位 | 1 1.5 2位逻辑1 | ### 数据传输速率 每秒传送的0 1 的个数 ### 查询接收与查询发送 先拿3FD/2FDH的标记位,查询是否已经接收完毕/是否空着,之后再进行相应操作 #### 寄存器 ```CMD 3F8H/2F8H 写入 3F8H/2F8H 读出 3F8H/2F8H 除数 3F9H/2F9H 中断允许 3FDH/2FDH 通信线状态 3FAH/2FAH 中断识别 3FEH/2FEH MODEM状态 3FBH/2FBH 通信线控制 其中3FD D0位:接收数据准备好(接收缓冲器满)标志位 D1位:溢出错标志位。 D2位:奇偶错标志位。 D3位:帧错(接收格式错)标志位。 D4位:线路间断标志位。 D5位:发送保持寄存器空闲标志位。D5=1 D6位:发送移位寄存器空闲标志位。D6=1时候,一帧已经发送完毕 D7位:恒为0 3FA D0=1,允许接收到一帧数据后,内部提出“接收中断请求”。 D1=1,允许发送保持寄存器空时,内部提出“发送中断请求” D2=1,允许接收出错时,内部提出“接收数据错中断请求”。 D3=1,允许MODEM状态改变时,内部提出“MODEM中断请求” 3FC D0位=1,使引脚DTR=0,从而使RS-232C引脚DTR为0,表示数据终端准备好 D1位=1,使引脚RTS=0,从而使RS-232C引脚RTS为0,表示8250请求发送 D2位=1,使引脚OUT1=0,系统机上没有使用。 D3位=1,使引脚OUT2=0,8250能送出中断请求。 D4位通常置0,设置8250工作在正常收/发方式; 若D4位置1,则8250工作在内部自环方式 3FBH/2FBH D0D1 数据位选择 D2 停止位 D3-D5 校验位 D6 中止位 1 输出长时间 0 正常通信 D7 1 除数 0 访问何用端口 ``` ## 8255 ### 数据口&&工作方式 - - 数据口 - 端口A 三种工作方式 0 1 2,对外8根引脚PA7~PA0 地址60H - 端口B 两种工作方式 0 1,对外8根引脚PB7~PB0 地址61H - 端口C 一中工作方式 0 ,对外PC0~PC7,分成上下两个部分 地址62H,控制口地址63H - - 工作方式 - 方式0 基本型输入/输出 直接用IN 跟OUT 对各端口进行读写 适用无条件传送的场合,不需要应答式联络信号 - 方式1 选通型输入/输出 进行数据传送时候必须通过联络信号进行协调。在方式1的时候考研用查询方式也可以用中断方式与CPU进行数据交换 - 方式2 双向传输 通过8个位与外设进行双向通信,可用中断方式,也可以用查询方式与CPU联络 #### 方式控制字 | D6-D5 | D4 | D3 | D2 | D1 | D0 | | ----------- | ------------ | --------------- | ----------- | ------------ | --------------- | | A的方式选择 | A口输入/输出 | C口7-4输入/输出 | B口方式选择 | B口输入/输出 | C口3-0输入/输出 | #### 初始化流程 - 方式选择控制字--->控制口,目的选择某一口的工作方式(若端口选择1或者2,需要第二步 - C口置零/置1控制字写入控制口(D3-D1是选择pcn,D0是写入的数据,实现某一口的中断的禁止/允许(1允许 | | A口方式1入 | A口方式1出 | B口方式1入 | B口方式1出 | A口双向 | | ----- | ---------- | ---------- | ---------- | ---------- | ------- | | INTEA | PC4 | PC6 | | | | | INTEB | | | PC2 | PC2 | | | INTE1 | | | | | PC6 | | INTE2 | | | | | PC4 | ## 8254 ### 计数器 8254内部集成了3个16位计数器,每个计数器有6种工作方式 ### 初值的计算方法,设置方法 计数初值**=** fclk / fout fclk:CLK端输入的初始频率 fout:OUT端输出的生成频率 ### 工作方式 - - 方式0:计数结束OUT引脚输出正跃变信号 - 写入后经过N次CLK后OUT 0--->1 - - 方式1:(可重触发的)硬件启动的单脉冲发生器 - WR写入后,GATE经过0--->1时候,OUT 1--->0,经过N次CLK后,OUT 0 ---> 1,但当GATE再次0--->1后,这个N会重置(在下一次CLK开始时候,但第一次的计数是从OUT变化时候的就开始计数成N了) - - 方式2:分频器(脉冲发生器) - 周期,到0下个CLK自动重装,到1的时候是负脉冲,其余是正 - - 方式3:方波发生器 - 减2计数,初值自动重装,且OUT翻转 - 偶数是减到0的时候重装,输出1:1 - 奇数重装时候值为写入的初值-1,正脉冲是到-2重装,负脉冲是到0重装 - - 方式4:软件启动,单脉冲发生器 - 无初值重装,减1,减到0输出,不需要GATE变换 - - 方式5:硬件启动,单脉冲发生器 - 类似4,但开始减是在GATE 0 ->1跃变后开始 ### 启动方式 - 软件启动:GATA=1,初值写入后,开始计数 - 硬件启动:初值写入后,不计数。当GATE从0--->1后开始计数 ### 8254命令字 - 方式选择命令字 | D7-D6 | D5-D4 | D3-D1 | D0 | | ---------- | -------- | -------- | ---- | | 计数器选择 | 读写方式 | 工作方式 | 数制 | ``` D7 D6 =00 选择0#计数器, =01 选择1#计数器 =10 选择2#计数器, =11 标志该命令字 是 “读出命令” D5 D4 =00 标志该命令为 “锁存命令” =01 初值写入时, 只写低8位, 高8位自动 补0;计数值读出时, 只能读低8位 =10 初值写入时, 只写高8位, 低8位自动 补0;计数值读出时, 只能读高8位。 =11 初值写入 / 计数值读出的顺序为先 低8位,后高8位。 D0=0, 计数初值为二进制数, =1 BCD码数 ``` - 锁存命令 ``` D7 D6 为锁存对象。 = 0 0,锁存0#当前计数值 = 0 1,锁存1#当前计数值 = 1 0,锁存2#当前计数值 D5 D4 = 00 标志该命令为 “锁存命令” D7D6D0=110 D1是选择0计数器 D2是选择1计数器 D3是选择2计数器 ``` ### 初始化 - - 向控制寄存器写入方式选择命令字 - 目的 学则一个计数器并去欸的那个工作方式和计数值的读写顺序 - - 向选择的计数器写入计数初值 ### PC中的计数器作用 # 周 第五章:https://app.yinxiang.com/fx/d8ebb76a-3a56-4f70-bf95-a8d7acf0fdb4 第六章:https://app.yinxiang.com/fx/d7c0e3b0-24cf-4981-a874-f04e1eb6a390 第七章:https://app.yinxiang.com/fx/e12ab3d4-0836-45db-83c5-c8ccf91a279d 第八章:https://app.yinxiang.com/fx/b2c2c867-806f-4bff-9aa8-7192c9ece7e5 第九章:https://hackmd.io/@jylsec/BkIAVe56w/edit 第十章:https://hackmd.io/@jylsec/S19Tw69aw 第十一章:https://hackmd.io/@jylsec/rJLTq5K6D # 安 第五章:https://note.youdao.com/ynoteshare1/index.html?id=ccc3a7ea3b2b290455a22b894da4cdf3&type=note 第六章:https://note.youdao.com/ynoteshare1/index.html?id=dc51d48b63fa076edd068c213e79a5b3&type=note 第七章:https://note.youdao.com/ynoteshare1/index.html?id=474eab46b4b9edf7d332bbe7edb97159&type=note 第八章:https://note.youdao.com/ynoteshare1/index.html?id=d4b97ea2c421c782b049c469a4c86b76&type=note 第九章:https://note.youdao.com/ynoteshare1/index.html?id=9eb6c4667f5ff1d091e45f44d7cdf246&type=note 第十章:https://note.youdao.com/ynoteshare1/index.html?id=9e7879bd6ce90afaab534733c1e2607c&type=note 第十一章:https://note.youdao.com/ynoteshare1/index.html?id=6e8a995d301988f6ca6db3f6f11f444d&type=note