课后作业8.2,8.5,8.17,8.20~25两片连接端口地址?0FBC0H~0FBC3H0FBC4H~0FBC7H8255 A编程和应用确定控制字的内容将控制字写入8255A控制寄存器【例】8255A并行接口作为键盘接口的应用。键盘是输入设备, 实质是一种开关“抖动”、“消抖”编码键盘(相对复杂,唯一编码)、非编码键盘(简单,位置识别,灵活)行扫描法:由程序逐 行对键盘进行扫描,再通过检测列状态来确定“闭合键”行列位置反转扫描法:先对全列送“0”并读行线上内容。若无键按下,读入的内容 应该为全“1”,重复上述过程。若有某一键按下,则对应该键的行线被列线强置为“0”11111011反转扫描法300H~3FFH 【问】请编写程序将8255A扫描的按键显示在屏幕上,如果按下小键盘上的“Y”键,则退出扫描程序返回到DOS状态下。 PA EQ U 300H PB EQU 301H PCTL EQU 303HDATA SEGMENT TABLE DW 0101H,0 102H,0104H,0108H,0110H,0120H,0140H,0180H;PB0列中各键键值 DW 0201H,020 2H,0204H,0208H,0210H,0220H,0240H,0280H;PB1列中各键键值 DW 0401H,0402H ,0404H,0408H,0410H,0420H,0440H,0480H;PB2列中各键键值 CHAR DB ''CDEFBA9 845673210WXYSRPMG'' ;字符ASCII TIPS DB ''Pressanykeyonthekeyboa rd,itwillbeonthescreen!'',0DH,0AH DB ''QuitwithY!'',0DH,0 AH,''$''DATA ENDSCODE SEGMENT MAIN PROC FAR ;定义为段间过程 ASSUME CS :CODE,DS:DATASTART: MOV AX,DATA ;装入段基址 MOV DS,AX MOV DX,OFFS ETTIPS MOV AH,09H ;9号功能调用,显示提示信息 INT 21H CALL KEY CMP DI,''Y '' JNZ KY MOV AH,4CH INT 21H ;若(DI)=''Y'',则返回DOS RETMAIN ENDP ;主程序结束KEY PROC NEAR ;段内过程(找出按下键的行、列值)KST: MOV AL,82H ;8255A工作 方式控制字,A口输出,B口输入 MOV DX,PCTL OUT DX,ALWAIT1: MOV AL,00 ;A口低电平 输出,行线低电平 MOV DX,PA OUT DX,AL MOV DX,PB ;读列线,查找有没有闭合键 IN AL,D X CMP AL,0FFH ;没有闭合键,等待 JZ WAIT1 PUSH BX ;列线值暂存堆栈 PUSH AX MO V CX,1000H ;去抖动延时DELAY: LOOP DELAY MOV DX,PCTL MOV AL,90H ;反 转A口为输入口,B口为输出口 OUT DX,AL MOV DX,PB ;列值由B口输入 POP AX OUT DX,AL MOV DX,PA ;读行值 IN AL,DX POP BX ;从堆栈中弹出列值至BX中 MOV AH,BL ;列值→A H NOT AX ;(AH)取反 MOV SI,OFFSETTABLE ;取参数TABLE的偏移地址→SI MOV DI ,OFFSETCHAR ;取字符参数CHAR的偏移地址→DI MOV CX,24 ;24个字符长TT: CMP AX,[ SI] ;键值与TABLE中字符相比较 JZ NN ;找到相应字符,转NN语句 DEC CX ;长度修正 JZ KST ;没 找到,转KST语句继续查找 ADD SI,2 INC DI JMP TTNN: MOV DL,[DI] ;闭合键字符→DL MOV AH,02 ;2号功能调用,显示字符 INT 21H PUSH DX ;DX暂存堆栈 MOV AL,82H ;A 口控制字→控制寄存器,A口输出、B口输入 MOV DX,PCTL OUT DX,ALWAIT2: MOV AL,00 ;等待 闭合键释放 MOV DX,PA OUT DX,AL MOV DX,PB IN AL,DX CMP AL,0FFH J NZ WAIT2 POP DX RETKEY: ENDP ;过程结束CODE: ENDS ;代码段结束 END ST ART ;源程序结束【例】利用8255A作为打印机接口。此时8255A一般设置成工作方式0。设8255A端口地址为0380H~ 0383H,待打印字符的存放首地址为DS:0300H,字符数为100个。;8255A初始化程序BEGIN: MOV DX, 0383H ;控制寄存器地址DX MOV AL,10000001B ;送方式0控制字(A口方式0输出,PC7~PC4输出PC 3~PC0输入) OUT DX,AL MOV AL,00001111B ;送C口置位控制字,置PC7=1,STB=1 ,初始状态为高电平 OUT DX,AL ;打印机驱动程序 MOV SI,0300H ;待打印字符存放内存的首地址 MOV CX,100 ;打印字符个数CONP: MOV DX,0382H ;从C口检测BUSY=0?。若=1,则等待,=0 则CPU可送打印字符LPST: IN AL,DX ;当BUSY=0?(PC2=0?) AND AL,04H JNZ LPS T ;若BUSY=1,等待;BUSY=0则向下执行 MOV AL,[SI] ;从内存中取等打印的数据 MOV DX,038 0H ;待打印数据输出至8255A口 OUT DX,AL MOV AL,00001110B ;置PC7=0 MOV DX, 0383H ;输出PC7=0信号,则STB=0低电平,产生选通信号 OUT DX,AL NOP ;使STB信号低电平有 一定宽度 NOP ;保证传送至打印机数据稳定 NOP MOV AL,00001111B ;置PC7=1,即STB=1高电 平,利用STB上升沿将数据打入到打印机数据缓冲区中 INC SI ;修改指针,内存地址加1,指向下一次欲打印的数据 DEC CX ;字符数-1 JNZ CONP ;未打完,继续 HLT ;所有数据打印完毕,暂停第八章可编程接口技 术三峡大学陈慈发0717-6394358,13972597617chcf0415@126.com12348255 A8253/82548251ADAC08325ADC0809可编程接口:指接口芯片的硬件 单元不是固定接死的,可以通过计算机指令来选择不同的通道和不同的电路功能。可编程接口芯片概述可编程接口芯片:如果接口芯片的电路组 态(电路工作状态)可由计算机指令来控制,则称其为可编程接口芯片。输入/输出锁存器与缓冲器。命令寄存器和状态寄存器。地址译码电 路。读/写控制逻辑。中断控制逻辑。片选信号CS(ChipSelect)/CE(ChipEnable)不选中则为隔离 状态读写操作读操作:输入口,IN指令,RD,M/IO写操作:输出口,OUT指令,WR,M/IO“握手”过程STB:S trobe,选通RDY:Ready,准备好握手信号握手过程握手过程并行接口8255A并行接口是指CPU与外设之间的信息 传输是多位同时进行的。锁存器、缓冲器、收发器都是一种并行接口,但它们都不是可编程的。8255是Intel公司为80X86系列C PU生产的8位通用可编程并行输入/输出接口芯片,可作为任何一个与TTL兼容的并行数字设备与微机间的接口。40脚DIP,单一+5V 电源,TTL电平。8255A的结构和功能三个端口:8位,A口(端口A)、B口(端口B)、C口(端口C)二组:A组(A口+C 口高位)、B组(B口+C口低位)A组B组端口A端口B端口C组成端口读/写控制数据缓冲A/B组控制工作方式A 口B口C口0基本输入/输出端口,输入不锁存,输出锁存同A口同A口1应答式输入/输出端口,输入/输出均可锁存同A口 上C口作为应答式A口的应答线;下C口作为应答式B口的应答线2应答式双向输入/输出端口,均可锁存不用用作A口的应答控制线 输入/输出端口PA7~PA0:A口的8条线,输入/输出均带锁存。8条线工作于输入、输出还是双向(输入/输出)方式由软件编程来决 定。PB7~PB0:B口的8条线,输入/输出均带锁存。8条线是输入还是输出由软件编程来决定。PC7~PC0:C口的8条线,输出 有锁存,输入无锁存。8条线可用作数据的输入或输出线,也可用作控制信号的输出线或状态信号的输入线。A口、B口通常作为独立的I/O端 口使用,C口也可以作为一般的I/O端口使用。当A口、B口作为应答式的I/O口使用时,C口分别用来为A口、B口提供应答控制线。此时 C口分为A组C口(或称上C口)、B组C口(或称下C口),规定分别用来作为A口和B口的应答控制线使用。读/写控制逻辑用 于管理数据、控制字或状态字的传送。接收来自CPU的地址信息及一些控制信号,然后向A组、B组控制电路发送命令,控制端口的传送方向。 CS:片选信号,低电平有效RD:读信号,低电平有效WR:写信号,低电平有效RESET:复位信号,高电平有效。清除所有控制寄存 器内容,并将各端口都置成输入方式A1、A0:8255A片内端口寻址线。A口B口C口控制口A组/B组控制电路接受来自 CPU的读/写控制信号和CPU送入的控制字,然后分别决定各端口的功能。A组控制电路控制A口和C口的高4位(PC7~PC4);B 组控制电路控制B口和C口的低4位(PC3~PC0)。还可以对C口的某位实现“置0”或“置1”的操作。数据总线缓冲器双向三态 的8位缓冲器,可与数据总线(D0~D7)直接相连。8255A的工作方式工作方式方式0方式1方式2基本输入/输出选通 (应答)输入/输出双向(应答)输入输出由控制字决定工作方式控制字(D7=1)C口置位/复位控制字(D7=0)825 5A的控制字工作方式控制字两种控制字A口:方式0、方式1、方式2B口:方式0、方式1C口:方式0【例】设某8255A的 控制寄存器口地址为B6H,各端口工作方式如下:A口方式0、输入端口;B口方式0、输出端口;C口高4位为输出口,低4位为输入口。试编 写该8255A接口的初始化程序。对可编程接口芯片送入控制字,从而设定接口功能的程序称为“接口(功能)初始化程序”0100 1010解:工作方式控制字为10010001B=91H,初始化程序: MOV AL,91H ;CPU控制字91H经A L输出 OUT 0B6H,AL ;送到8255A控制寄存器中置位/复位控制字【例】设某8255A的控制寄存器口地址为303H ,编写程序,将C口的PC7位置0,PC6位置1。解:已知8255A控制寄存器的口地址为303H,则A口、B口、C口的口地址分别为 300H、301H、302H。 MOV DX,303H MOV AL,00001110B ;置PC7=0的控制字 OUT DX,AL ;控制字送8255A控制寄存器中 MOV AL,00001101B ;置PC6=1的控制字 OUT DX,AL ;控制字送8255A控制寄存器中工作方式0(基本输入/输出)A口(8位)、B口(8位)、上C口(4位)、下C口(4位)可 分别独立定义为输入或输出,共16种组合输出可锁存,输入有缓冲无锁存C口还有按位置位/复位的能力不能采用中断方式,但可采用查询 方式(C口线可作联络信号)输入输出C口有按位置位/复位的能力不能采用中断方式,但可采用查询方式(C口线可作RDY、STB等 联络信号)传送数据工作方式1(选通输入/输出)A口(8位)、B口(8位)适用,C口不能工作于方式1A口/B口可分别定义为输 入或输出支持查询、中断方式传送数据C口部分位作为控制信号和状态信号C口其余位可独立置位/复位方式1输出OBF(Outpu tBufferFull):输出缓冲器满,低电平有效。该信号通知外设,在规定的数据端口上已由CPU输出了一个有效数据,外设可从此 端口接收数据。ACK:外设响应,低电平有效。该信号通知接口,外设已将数据接收并使OBF=1。INTR:中断请求,高电平有效。当 外设接收到一个数据后,通过该信号告诉CPU,刚才输出的数据已经被接收,可以再输出下一个数据。INTE:中断允许。A口和B口的IN TR均受INTE的控制。A口的INTEA由PC6来控制,可用C口的按位操作对PC6置位或复位,以对中断INTRA进行控制。同理,B 口的INTEB用PC2的按位操作来进行控制。C口的PC4~5可独立置位/复位中断方式输出工作时序:数据输出过程从CPU响应中 断开始,进入中断服务程序WR写数据,IOW锁存数据入端口寄存器;数据输出到端口信号线上,清除INTR信号,并置OBF有效,通知 外设接收数据;外设收到数据后,置ACK有效,并使OBF无效,同时使INTR有效,产生一个新的中断请求,请求CPU向外设输出下一个 数据方式1输入STB:输入选通,低电平有效,由外设提供。表示外设数据锁存于接口的输入端口中。IBF(InputBuffer Full):输入缓冲器满,高电平有效。表示已有一个有效的外设数据被锁存于接口的锁存器中。可用此信号通知外设,数据已被锁存于接口中 ,尚未被CPU读走,暂时不能向接口输入数据。INTR:中断请求,高电平有效。当外设将数据锁存于接口之中,且又允许中断请求发生时, 就会产生中断请求。INTE:中断允许。A口的INTEA由PC4来控制,B口的INTEB用PC2的按位操作来进行控制。C口的PC 6~7可独立置位/复位中断方式输入工作时序:外设将数据送到8255A接口上,STB有效,数据锁存入端口,同时IBF变有效;当 STB由低变高时,若中断允许信号INTE高电平有效,则8255A的PC3(或PC0)位INTR变高电平有效,向CPU发出中断请求; CPU响应中断,执行读数据操作(IN),RD有效;RD操作实现数据进入CPU内,随后使INTR无效,并在RD由低变高过程中,使 IBF复位。方式1的A口和B口可独立设置为输入或输出A口和B口可一个工作于方式1,另一个工作于方式0方式1输入 时,C口中多余的两条线(PC6,PC7)归入A组,它可以作为方式0的输入/输出线或作为位操作用,其工作状态及初始化编程与A口无关。8255A片内有一个中断允许触发器INTE,INTE=0禁止中断,INTE=1允许中断。其置“0”与置“1”是通过对PC4(A组)和PC2(B组)进行位操作来实现的。在方式1中,对PC4(或PC2)的位操作只影响INTE引脚触发器的状态,而不影响PC4(或PC2)引脚的电平状态。只适用于A口,占用5条联络线B口可工作于方式0、方式1C口的PC2~0可作为B口方式1的联络线或独立使用控制信号定义与前述相同工作方式2(双向输入输出)不同ACK有效时,输出端口才打开,无效时呈高阻态输入、输出均可锁存输入、输出均可引起中断,PC6控制INTE1的输出中断,PC4控制INTE2的输入中断方式2输入输出工作时序8255A的状态字读C口,获得状态字8255A与系统的连接单片连接端口地址?380H~383H |
|