- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
查询式输出程序段如下: SCAN: IN AL,状态口地址 ;取状态信息 TEST AL,01H ;测忙闲标志 JNZ SCAN ;忙,转移 MOV AL,某数 OUT 数据口地址,AL ;空闲,输出数据 8.4.3 中断控制方式 在有多个外设的系统中,多个外设要求CPU为它服务是随机的 若采用查询方式工作,就不能保证系统实时地对外设的请求作出响应 为了提高CPU的效率,使系统有实时性能,导致了中断处理技术的产生 特点: 在外设没有作好数据传送准备时,CPU可执行与传送数据无关的其它指令 当外设作好传送准备后,主动向CPU请求中断 若CPU响应这一请求,则暂停正在运行的程序,转入中断服务程序,完成数据传送 待服务完毕后,自动返回原来运行的程序 8.4.4 直接存储器存取(DMA)方式 为什么要有DMA? 什么是DMA? 直接存储器存取(Direct Memory Access 缩写为DMA) 特点: 用硬件实现在外设与内存间直接进行数据交换,而不通过CPU 数据传送速度的上限就取决于存储器的工作速度 速度快 怎么实现? 用DMAC控制器 8.5 可编程定时器/计数器8254 用软件和硬件两种方法实现定时: 用软件方法进行定时,是设计延时子程序,通过执行延时程序来达到定时的目的,此方法优点是不需添加硬件设备,缺点是CPU 执行延时程序将增加CPU的时间开销,降低了CPU的效率。 用硬件方法进行定时,就要用到定时器/计数器。可编程定时器/计数器具备定时和计数两个功能。 PC/XT机中使用的可编程定时器/计数器是8253 PC/AT机中使用的是8254,8254是8253的增强型,它具备8253的全部功能 在高档微机系统中,定时器/计数器由多功能芯片实现,但在性能上与8253/8254兼容 8254内部有3个独立的16位计数器,每个计数器有6种工作方式,计数初值的数制可设定为二进制或BCD码,每个计数器允许的最高计数频率为10MHZ,有读出命令 8.5.1 8254的内部结构 数据总线 缓冲器 读写控制 控制字寄存器 0号 计数器 1号 计数器 2号 计数器 RD WR A0 CS A1 D7~0 GATE0 OUT0 CLK0 GATE1 OUT1 CLK1 GATE2 OUT2 CLK2 1.数据总线缓冲器 数据总线缓冲器是一个三态、双向8位寄存器,与系统总线D7~D0相连。 数据总线缓冲器有3个基本功能:CPU通过数据总线缓冲器向8254 写入确定工作方式的命令字,向某一计数器写入计数初值,从某一计数器读取当前的计数值。 2. 读/写逻辑 8254内部的控制电路,当片选信号CS =0时,由A1,A0(通常接CPU地址线A1,A0)信号选择内部寄存器,由读信号RD(通常接CPU的IOR) 和写信号WR( 通常接CPU的IOW)完成对选定寄存器的读/写操作。 A1 A0=00,选中0#计数器 A1 A0=01,选中1#计数器 A1 A0=10,选中2#计数器 A1 A0=11,选中控制字寄存器 当片选信号CS =1时,数据总线缓冲器与系统数据总线脱开。 3.控制字寄存器 初始化编程时,由CPU写入控制字,以决定计数器的工作方式,设置读出命令。此寄存器只能写入不能读出。 4.计数器 GATEi为门控信号输入端 CLKi为计数脉冲输入端 OUTi为输出信号端 内部数据线 计数初值寄存器(16位) 减1计数器(16位) 计数值锁存器(16位) 锁存命令 GATEi CLKi OUTi 初始化编程时,程序员向计数初值寄存器写入的计数初值(只要不写入新的初值,该值始终保持不变),将自动送入16位减1计数器。 当GATEi=1 时, 每一个CLKi信号的下降沿使减1计数器减1,当计数值减到某个规定数值时( 取决于工作方式的设定),OUTi端产生输出信号。在计数过程中,锁存器跟随减1计数器的变化而变化。 计数脉冲可以是有规律的时钟信号,也可以是随机脉冲信号。 计数初值N的计算公式如下: 计数初值= f c l k / f o u t (2) DX间址的输入/输出指令 输入指令: IN AL,DX ;从DX指向的端口中读一字节到AL IN AX,DX ;从DX和DX+1指向的2个端口
文档评论(0)