第七章输入/输出和接口应用(input/outputandinterfaceapplication)§7.1接口(interface)外设的工作状态及数据通过接口送给主机,主机对外设的命令及数据通过接口送到外设主机接口外设信息:数据(数字量,模拟量,开关量),状态,控制接口:CPU与内存及CPU与外设之间通过总线进行连接的逻辑部件(电路),有存储器接口和I/O接口端口:I/O接口内的寄存器,用来暂存和传送CPU与外设交换的数据、状态和控制信息,每个端口都有一个地址一.I/O接口的作用1.外设与主机速度匹配2.主机与外设交换信息:状态信息、数据信息和控制信息3.变换传输方式二.I/O接口的主要职能实现数据缓冲,地址译码(提供I/O地址),信息转换,提供命令译码和状态信息,定时和控制.三.I/O端口的编址方式1.统一编址:也叫存储器编址,即存储器对应输入输出方式2.独立编址:也叫I/O编址,即端口寻址的输入输出方式§7.2输入/输出方式(I/Omode)通常采用三种输入/输出方式,即程序控制、程序中断、直接存储器存取一.程序控制输入/输出方式1.无条件传送CPU不考虑外设状态,只管用IN、OUT指令传送数据2.条件传送,即查询方式CPU在传送数据之前先查询外设状态,如果外设准备就绪,就与外设交换数据,否则继续查询┇CHECK:INAL,STATUS;读状态端口ANDAL,80H;检查最高位是否为0(0为准备好)JNZCHECK;未准备好,继续检查MOVAL,STORE;准备好,从内存取数OUTDATA,AL;从数据端口输出┇二.程序中断输入/输出方式CPU执行主程序,不用查询外设状态,而由外设通过中断请求线INTR(或NMI)向CPU请求中断,CPU响应后与外设进行信息交换,完成后继续执行主程序三.直接存储器存取方式DMA(DiractMemoryAccess)在DMA方式中,CPU响应总线请求让出总线,由DMA控制器直接控制存储器与外设的互相传送(见P237,F8-14)·另有一种叫专用I/O处理机方式被广泛采用,原来由CPU完成的各种I/O操作与控制全部由I/O处理机(IOP)完成,与CPU并行工作。如8086/8088系列中的8089(IOP),它有2个独立通道,每个都兼有CPU功能和DMA功能。IOP专门用于处理高速I/O设备。§7.3定时与计数(timingandcounting)Intel8253可编程定时器/计数器(可编程间隔定时器PIT——ProgrammableIntervalTimer)采用NMOS工艺,单一+5V电源,24脚双列一.8253的基本结构和功能1.结构:内部结构及引脚(见P226,F8-2,F8-3)8253由数据总线缓冲器、读/写逻辑、控制字寄存器、三个计数器组成·数据总线缓冲器·读/写逻辑(见P227,T8-1)CSRDWRA1A0寄存器选择和操作01000010010101001011001000010100110写入计数器0#写入计数器1#写入计数器2#写入控制寄存器读计数器0#读计数器1#读计数器2#001111xxxx011xx无操作(三态)未选中(三态)无操作(三态)·控制字寄存器·三个计数器(见P225,F8-1)由一个16位的可预置值的减法计数器构成,引脚CLK——输入脉冲,其周期不能小于380ns(即f2.5MHZ)GATE——门控信号,作为控制计数器工作的外部信号,低电平禁止计数OUT——输出,计数到0时输出,可作为中断请求线2.主要功能(1)三个独立的16位计数器通道,每个计数器都可以二进制或二——十进制方式计数(2)每个计数器的计数频率范围为0~2MHZ(3)每个通道有6种工作方式由编程选择(4)所有的输入/输出都与TTL兼容二.8253的控制字由CPU向8253写入,用来选择8253的工作方式D7D6D5D4D3D2D1D0计数器读/写格式工作方式数制(见P232,F8-10)D7D6=00选择计数器0#01选择计数器1#10选择计数器2#11非法选择D5D4=00计数器锁存命令(这时计数单元CE的数据锁存到输出锁存器OL中)01只读/写计数器低8位(高8位自动设0)10只读/写计数器高8位(低8位自动设0)11先读/写计数器低8位,再读/写计数器高8位D3D2D1=000方式0001方式1X10方式2X11方式3100方式4101方式5D0=0二进制(0~FFFFH)1BCD(0~9999)三.8253的工作方式1.方式0:计数结束产生中断(见P228,F8-4)特点:(1)不重复计数,计数到OUT保持高,只有写入新计数值时OUT变低才开始新计数(2)计数过程若GATE=0时暂停计数,GATE=1时继续计数(3)计数中若改写计数值,则立即按新值重新计数(若写16位,写第一字节停止计数,写第二字节按新值重新计数)(4)计数在WR信号上升沿后的下一个时钟脉冲开始设8088CPU系统地址总线A1A0与8253的A1A0相连,A15~A2经译码器输出后与8253的CS相连,则8253的端口地址为40H~43H,以下初始化使计数器2#工作于方式0MOVAL,90H;10010000——2#,低8位,方式0,二进制OUT43H,AL;送往控制字寄存器MOVAL,60H;计数值OUT42H,AL;送往通道2(PC机只用A0~A9共10条作I/O地址)2.方式1:可编程单拍脉冲(见P229,F8-5)特点:(1)单脉冲宽度为N个输入脉冲周期(CLK)(可以是外部事件不等间隔脉冲)(2)计数到后可用GATE再次启动(3)计数过程中,可用GATE重新触发,重新计数(4)计数过程中可重写计数值而不影响计数,计数到后再次触发则按新值计数3.方式2:速率发生器(分频脉冲发生器)(见P230,F8-6)特点:(1)通道可连续工作,输出固定频率的脉冲(2)GATE变低时停止计数,变高后的下一个CLK重新计数(3)计数过程可改变计数值不影响计数,计数到后下一次按新值计数4.方式3:方波速率发生器(见P230,F8-7)特点:(1)若计数值为偶数则OUT输出一半高一半低,若计数值为奇数则OUT输出高电平比低电平多一个CLK(2)GATE=1允许计数,GATE=0禁止计数.若计数过程中GATE变0又变1则重新装入初值计数(3)计数过程中写入新值要等现行计数的半方波结束之前收到GATE脉冲才用新值开始计数5.方式4:软件触发选通(见P231,F8-8)特点:(1)GATE必须保持1才能软件触发(GATE为0时禁止计数)计数过程中GATE为0停止计数,恢复1时重新计数(2)计数过程中若改变计数值,则按新值重新计数(若写16位,写第一字节停止计数,写第二字节开始计数)6.方式5:硬件触发选通(见P231,F8-9)特点:(1)计数过程中若有GATE触发则重新计数(2)计数过程中写入新值不影响计数,(计数到或未完)若有GATE触发则按新值开始计数8253工作方式小结:1.方式2、4、5输出波形相同,为一个CLK周期的负脉冲初始时方式0在写入CW后OUT为低,其余方式为高2.方式1、5由硬件触发计数,方式1输出的单脉冲为N个CLK周期时间的负脉冲,N为计数值,方式5为一个CLK周期时间的负脉冲3.方式0、2、3、4由软件触发(仍受GATE控制)计数4.方式2、3连续计数,方式0、1、4、5一次计数,计数到后从最大值(十六进制FFFFH或BCD9999)继续倒计数5.方式0、4在计数过程中写入新值后立即有效,其他方式须在外部触发或计数到后才有效6.方式1、5由GATE启动计数,方式0、2、3、4由GATE控制计数四.8253的初始化编程步骤1.写入通道控制字选择工作方式2.写入计数值,若规定只写8位,则另8位自动设0;若规定写16位,则分二次写入,先低8位,后高8位例:把通道1设为工作方式1,计数1024次,则通道控制字01110010011100111#写16位方式1二进制1#写16位方式1BCD计数值0400H(二进制计数)1024H(BCD计数)MOVAL,72HMOVAL,73H;控制字OUT43H,ALOUT43H,ALMOVAL,00HMOVAL,24H;计数值低8位OUT41H,ALOUT41H,ALMOVAL,04HMOVAL,10H;计数值高8位OUT41H,ALOUT41H,AL;1#口地址二进制计数值0400H低8位为0故可只写高8位,控制字为01100010·CPU可用IN指令随时读入8253任一通道的计数现行值,因需先低后高分二次读取,必须锁存计数以免计数值不断变化,可用GATE信号暂停计数或CPU送一个通道控制字(D5D4=00),后者不影响计数器计数,而只锁存当前值,CPU二次读取后锁存自动解除例:读通道1的计数值MOVAL,40H;01000000锁存1#OUT43H,ALINAL,41H;读低8位MOVDL,ALINAL,41H;读高8位MOVDH,AL;计数值保存在DX中·时间常数(计数值)的计算:N=T/τN——计数值(时间常数即计数常数)T——定时量τ——CLK脉冲周期(IBMPC/XT为1.19MHZ,14.31818÷3÷4,τ=840ns)一个通道的定时范围(取τ=840ns)Tmax=840ns×65536≈55ms(BCD计数840ns×10000≈8.4ms)Tmin=840ns×1=840ns五.IBMPC/XT中的定时器/计数器使用IBMPC/XT使用8253-5,端口地址:0#为40H,1#为41H,2#为42H,控制字寄存器为43H·0#通道为方式3,GATE0=1,OUT0作为中断请求接至8259A中断控制器的IRQ0,用于报时时钟和磁盘驱动器的马达定时(CW=36H,N=0即216)·1#通道为方式2,GATE1=1,OUT1经D触发器对8237A-5DMA控制器通道0的DMA请求DREQ0,用于定时启动刷新动态RAM(CW=54H,N=12H)·2#通道为方式3,用于产生1KHZ的方波输出,OUT2经与门并滤掉高频分量后送扬声器发声,用8255-5的PB1、PB0来控制与门和GATE2以控制发声时间,PB1、PB0同时为高的时间长短即发音长短,长3秒,短0.5秒(CW=B6H,N=533H)ROM—BIOS对8253-5的编程如下:;计数器0用于定时(约55ms)中断MOVAL,00110110B;0#,方式3,写16位,二进制计数OUT43H,ALMOVAL,0;计数值65536(840ns×65536≈55ms)OUT40H,AL;写入低字节OUT40H,AL;写入高字节;计数器1用于定时(约15s)DMA请求(2ms内可刷新132行多于全部128行)MOVAL,01010100B;1#,方式2,只写低字节,二进制计数OUT43H,ALMOVAL,12H;计数值18(840ns×18≈15s)OUT41H,AL;计数器2用于产生1KHZ的方波送至扬声器发声,声响子程序为BEEP,入口地址为FFA08HBEEPPROCNEARMOVAL,10110110B;2#,方式3,写16位,二进制计数OUT43H,ALMOVAX,0533H;计数值1331OUT42H,AL;写低8位MOVAL,AH;(初始化结束)OUT42H,AL;写高8位INAL,61H;读8255的B口原输出值MOVAH,AL;存于AHORAL,03H;使PB1、PB0均为1OUT61H,AL;输出使扬声器发声SUBCX,CX;CX为65536作延时用G7:LOOPG7;循环延时DECBL;BL为发声长短的入口条件JNZG7;BL=6长声(3秒),BL=1短声(0.5秒)MOVAL,AH;取回AH中的8255B口输出值OUT61H,AL;恢复8255B口,停止发声RET;返回例:8253计数器2产生600HZ方波使扬声器发声,当按任意键时发声停止STACKSEGMENTSTACKDB256DUP(0)STACKENDSDATASEGMENTFREDDW1983;