1 / 50

第八章 并行接口

第八章 并行接口. 第一节 并行接口概述. 一、并行接口与串行接口结构. 回下页. 就绪 / 忙信号. 速度取决于 就绪 / 忙信号. 传输需求. 选通信号. 并行数据线. 无格式要求. 空闲 — 可为 0 长度. …. …. 单条数据线. 起始 标志位. 串行 数据位. 停止 标志位. 约定的格式. 约定的速度. 二、并行与串行接口通信方式 1 、并行通信方式 一般采用异步互锁方式。. 2 、串行通信方式 一般采用起止式异步方式。. 转上页. 第二节 可编程芯片 82C55. 一、 8255 的基本功能.

joel-herman
Download Presentation

第八章 并行接口

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章并行接口

  2. 第一节 并行接口概述 一、并行接口与串行接口结构 回下页

  3. 就绪/忙信号 速度取决于 就绪/忙信号 传输需求 选通信号 并行数据线 无格式要求 空闲—可为0长度 … … 单条数据线 起始 标志位 串行 数据位 停止 标志位 约定的格式 约定的速度 二、并行与串行接口通信方式 1、并行通信方式 一般采用异步互锁方式。 2、串行通信方式 一般采用起止式异步方式。 转上页

  4. 第二节 可编程芯片82C55 一、8255的基本功能 ⑴具有2个8位I/O口(A口和B口)和2个4位I/O口(C口上半部和C口下半部),输入时具有缓冲、输出时具有锁存功能,A口具有双向功能; ⑵对A组和B组支持多种工作方式(0、1、2),实现无条件、查询、中断方式传输; ⑶C口在方式1和方式2时,部分引脚作为A口和B口的状态口(其余引脚作为数据口),并可按位进行操作。

  5. 二、8255的内部结构和外部引脚 1、内部结构

  6. CPU侧引脚: D0-D7,A1A0, CS,RD、WR 2、外部引脚 外设侧引脚: PA0-PA7, PB0-PB7, PC0-PC3, PC4-PC7

  7. I/O端口地址:8255提供4个端口(使用A1A0)。 命令:初始化—设置工作方式; 操 作—对A口、B口、C口读/写(整字节读/写); 对C口按位置位/复位(状态口部分位只可读) 端口与命令关系表: 回下页

  8. 三、8255操作及编程 1、初始化编程 —设置工作方式控制字 初始化仅需设置工作方式控制字(各口工作模式)。 I/O端口:A1A0=11 工作方式控制字与C口按位操作冲突控制: 工作方式控制字—D7=1; C口按位置/复位—D7=0。 转上页 回下页 回10页

  9. 例1:要求使8255的A口工作于方式1作输入,B口工作于方式0作输出,C口上半部输入,下半部输出,8255的端口地址为60H~63H。请写出初始化程序。例1:要求使8255的A口工作于方式1作输入,B口工作于方式0作输出,C口上半部输入,下半部输出,8255的端口地址为60H~63H。请写出初始化程序。 控制字为:10111000B=0B8H 初始化程序为: MOV AL,0B8H OUT 63H,AL 转上页 回下页

  10. 2、C口按位置位/复位操作 目的:当C口作为状态口时,有些位不可写,需要用按位置位/复位操作对可写位进行操作。 例2:如上例,若A口在方式1输入、中断传输方式时,应当使C口内部REG D4=1,则按位置位操作为: MOV AL,00001001B OUT 63H,AL 转上页 转8页 回19页

  11. 四、8255的工作方式 1、方式0—基本I/O方式(无条件I/O方式) A口、B口、C口(上半部及下半部)均可用作输入或输出(单向),实现无条件方式传输; CPU可用IN/OUT指令实现数据传输。

  12. 例3:用8255(起始地址为60H)发出一个正向脉冲,编写相应程序。例3:用8255(起始地址为60H)发出一个正向脉冲,编写相应程序。 (可作为第6章频率计数时STC需要的1个脉冲) MOV AL,80H ;PA口方式0输出,PB口方式0输出 OUT 63H,AL ;PC口高、低4位均输出 MOV AL,0 OUT 60H,AL MOV AL,2 OUT 60H,AL MOV AL,0 ;PA1产生一个正向脉冲 OUT 60H,AL 转第6章计数例题中STC信号

  13. 例4:假设有一个4×4的矩阵键盘通过并行接口芯片8255(起始端口地址为60H)与微机相连,画出8255与键盘电路连接图并编写键盘扫描程序。例4:假设有一个4×4的矩阵键盘通过并行接口芯片8255(起始端口地址为60H)与微机相连,画出8255与键盘电路连接图并编写键盘扫描程序。 分析:键盘行线连8255输出口(输出0); 键盘列线连8255输入口(无按键时为1); 键盘有键按下时,8255输入口某位为0。 回下页

  14. 置行数=4、首行PA口=0FEH PA口输出0 读PB口 PA口输出 Y 置下行PA口参数,并保存 PB=0F? N 读PB口 检测各行: PA口某位 输出0, 读PB口, 检测并取得 按键值 当前行列PB 循环右移一位 N 按键非当前行? Y Y 置下行起始键号, 恢复下行PA口参数 找到列号, 并处理按键 CF=1? N 处理 按键 键号 加1 N 扫描完所有行? Y 程序流程图: 转上页 回下页

  15. 汇编程序: MOV AL,82H OUT 63H,AL ;初始化 BEGIN:MOV AL,0 OUT 60H,AL ;A口输出0 WAIT:IN AL,61H AND AL,0FH CMP AL,0FH JZ WAIT ;等待按键 MOV DL,4 ;行数 MOV AL,0FEH;0行PA MOV CH,0 ;键号0~15 SROW: OUT 60H,AL RCL AL,1 MOV AH,AL ;下行PA IN AL,61H AND AL,0FH CMP AL,0FH JNZ SCOL ;有键按下 ADD CH,4 ;下行键号 MOV AL,AH;当前行PA DEC DL JNZ SROW ;扫描下行 JMP BEGIN SCOL:RCR AL,1 ;找列号 JNC PROCE INC CH JMP SCOL PROCE:……;按键处理程序 转上页

  16. 2、方式1—选通I/O方式 可采用查询、中断方式进行通信。 (1)方式1的输入 回下页 回21页 回22页

  17. 外设给出 外设给出 PA0~PA7 STBA A口REG 8255给出 IBFA 软件设置 INTEA 允许=1、禁止=0 8255给出 INTRA CPU给出 (读C口REG) (读A口REG) b)状态REG产生变化,可产生INTRA中断请求; 中断产生条件:STBA=1、IBFA=1、INTEA=1 RD ①REG及引脚信息产生过程(内部逻辑自动实现): a)选通信号触发将A、B口引脚信息存入内部REG; c)CPU对A口REG的读操作使IBFA及INTRA复位。 注意:对C口REG的读操作不触发任何信号变化 转上页 回下页 回20页 回19页

  18. D7 D6 D5 D4 D3 D2 D1 D0 A组状态 B组状态 输入时 输入时 I/O I/OIBFAINTEA INTRA INTEB IBFB INTRB ②状态口(C口)信息字与引脚: a)C口REG作为状态口,格式如下 b)PC4、PC2引脚仅用作触发A口、B口锁存引脚信息到内部REG,与C口REG(INTE)无对应关系; c)INTEA和INTEB为中断允许位,CPU可通过对C口的按位置位/复位操作方法设置为允许/禁止。 转上页 回24页 回21页

  19. ③查询方式通信(读取数据)编程: a)编程思路—利用数据口与状态口的内部控制逻辑; STBA有效→IBFA或/和INTRA有效→…→读A口REG →IBFA或/和INTRA无效→外设使STBA有效 b)编程方法—CPU检测(读C口REG)到IBFA或INTRA有效时,可读取A口数据(A口REG为有效数据)。 …… MOV AL,10110000B ;A口方式1输入,C口上半部输出 OUT PORTCN,AL MOV AL,00001001B ;置INTEA=1,允许中断 OUT PORTCN,AL ;若只查询IBFA时,可省略 WAIT:IN AL,PORTC ;读C口REG TEST AL,00100000B ;只检测IBFA JZ WAIT IN AL,POTRA;当IBFA=1时,A口REG数据有效 ……;处理完当前数据后,JMP WAIT 转17页 转10页

  20. ④中断方式通信(读取数据)编程: a)编程思路—利用数据口与状态口的内部控制逻辑; STBA有效→IBFA和INTRA有效→…→读A口REG →IBFA和INTRA无效→外设使STBA有效 b)编程方法—在中断服务程序中读A口数据(肯定有效)。 …… MOV AL,10110000B ;A口方式1输入,C口上半部输出 OUT PORTCN,AL MOV AL,00001001B ;必须置INTEA=1,允许中断 OUT PORTCN,AL ; …… RECVINT PROC ;中断服务程序 IN AL,POTRA;A口REG数据肯定是有效的 …… IRET RECVINT ENDP 转17页

  21. ⑤对C口数据口引脚的操作: PC7、PC6为C口的数据口引脚,对应C口REG的D7、D6位。 引脚信号方向—初始化(工作方式字)时设定; 操作实现—输出时用对C口按位置位/复位方法, 输入时可用对C口(字节)读操作方法。 例5:实现A口方式1输入时,用PC6输出高电平; A口方式1输入时,用PC6采集信号。 ;PC6输出高电平 MOV AL, 0B0H;A口方式1输入 OUT 63H,AL ;C口上半部输出 MOV AL, 00001101B OUT 63H,AL ;PC6采集信号 MOV AL, 0B8H;A口方式1输入 OUT 63H,AL ;C口上半部输入 IN AL,62H AND AL,40H ;01000000 转18页 回25页 转16页

  22. 与输入方式引脚的区别: 联络信号从STB、IBF变成了ACK、OBF; C口数据口引脚从PC6、PC7变成了PC4、PC5。 (2)方式1的输出 回下页 回24页 转16页

  23. CPU给出 WRA A口REG 8255给出 OBFA 8255给出 PA0~PA7 软件设置 INTEA 允许=1,禁止=0 INTRA 8255给出 外设给出 ACKA CPU给出 (读C口REG) (读C口REG) b)ACKA信号变化,可产生INTRA中断请求; 中断产生条件:ACKA=0→1、INTEA=1 RD c)CPU对A口REG的写操作使OBFA有效及INTRA复位。 ①REG及引脚信息产生过程(内部逻辑自动实现): a)CPU写操作触发将数据送到A口、B口引脚; 转上页 回下页 回25页 回31页

  24. D7 D6 D5 D4 D3 D2 D1 D0 A组状态 B组状态 输入时 输入时 I/O I/OIBFAINTEA INTRA INTEB IBFB INTRB 输出时 输出时 OBFAINTEA I/O I/O INTRA INTEB OBFB INTRB ②状态口(C口)信息字与引脚: a)C口REG作为状态口,格式如下 b)PC6、PC2引脚仅用作通知引脚数据已取走,触发状态REG变化,与C口REG(INTE)无对应关系; c)INTEA和INTEB为中断允许位,CPU可通过对C口的按位置位/复位操作方法设置为允许/禁止。 转上页 转22页 转18页

  25. ③查询方式通信(写入数据)编程: a)编程思路—利用数据口与状态口的内部控制逻辑; WRA有效(写A口REG)→OBFA有效或/和INTRA无效→… →ACKA有效→OBFA无效或/和INTRA有效→WRA有效 b)编程方法—CPU写完数据后,检测(读C口REG)到OBFA无效或INTRA有效时,可再次向A口写数据。 ④中断方式通信(写入数据)编程: a)编程思路—利用数据口与状态口的内部控制逻辑; WRA有效(写A口REG)→OBFA有效和INTRA无效→… →ACKA有效→OBFA无效和INTRA有效→WRA有效 b)编程方法—在中断服务程序中向A口写数据。  ⑤对C口数据口引脚(PC5、PC4)操作:同方式1输入 转21页 转23页

  26. 3、方式2 –双向选通I/O方式 是方式1的输入方式和输出方式的组合。 只有A口才有此方式。

  27. 主机→打印机 主机←打印机 主机←打印机 STROBE:输出,用于通知打印机接收数据; BUSY:输入,有效表示打印机正在接收并处理数据; ACK:输入,表示数据已取走,通知主机可传送下个数据。 五、8255应用举例 1、Centronics并行打印接口标准 回下页

  28. 读PC7(BUSY) Y N PC7=1? Y 待发送的是结束符? N PA口输出数据, PC0发一个脉冲 结束 2、Centronics并行打印接口应用 例6:假设利用8255的A口方式0与打印机相连,编程实现将内存缓冲区BUFF中字符串(以$结束)打印输出。 转上页

  29. DATA SEGMENT BUFF DB ‘HELLO,WORLD!’,13,10,‘$’ PORTA EQU 60H PORTB EQU 61H PORTC EQU 62H PORTCN EQU 63H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFF MOV AL,88H ;A口方式0输出,C口上半部输入 OUT PORTCN,AL ;C口下半部输出 MOV AL,01H ;置位PC0,STB#无效 OUT PORTCN,AL 回下页

  30. WAIT:IN AL,PORTC ;读打印机状态,若“忙”则等待 TEST AL,80H JZ WAIT MOV AL,[SI] CMP AL,‘$’ JZ PRINT_OVER OUT PORTA,AL ;发送数据 INC SI MOV AL,00H ;手工产生STB#, OUT PORTCN, AL ;打印机接收并打印数据 MOV AL,01H OUT PORTCN,AL JMP WAIT PRINT_OVER: …… 转上页

  31. 设计:CPU写数据后,8255A会使OBF有效,作为打印机的STB信号,打印机的ACK信号可用于使8255A产生中断。设计:CPU写数据后,8255A会使OBF有效,作为打印机的STB信号,打印机的ACK信号可用于使8255A产生中断。 打印输出过程中的应答信号均自动产生。 8255 打印机 D7-D0 D7-D0 PA7-PA0 D7-D0 IOW WR IOR RD (OBFA)PC7 STB (ACKA)PC6 ACK A1 A1 A0 A0 (INTR)PC3 A7-A2=011000 至8259 例7:假设利用8255的A口方式1与打印机相连,编程实现将内存缓冲区BUFF中字符串打印输出。 思考:利用8255的B口实现该功能时如何接线? 回下页 转23页

  32. DATA SEGMENT ;定义BUFF,PORTA、PORTB、PORTC、PORTCN DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;保存原来和设置新中断向量 MOV SI,OFFSET BUFF MOV AL,0C0H ;A口方式1输出,C口上半部输出 OUT PORTCN,AL MOV AL,0DH ;置INTEA=1 OUT PORTCN,AL ;中断方式通信时,必须置位 MOV AL,[SI] ;发送第一个字符 OUT PORTA, AL ;发送完后会自动产生OBF# INC SI …… MOV AH,4CH INT 21H 转上页

  33. SENDSRV PROC ;中断服务程序 …… MOV AL,[SI] CMP AL,‘$’ JZ PRT_OVER OUT PORTA, AL ;打印机产生的ACK#, ;可触发8255再次产生中断 INC SI PRT_OVER:…… ;中断手工结束方式时,需发EOI命令 IRET SENDSRV ENDP CODE ENDS END START

  34. 3、8255A应用之一—检测LS138 使用8255A(端口地址60H~63H)实现对74LS138功能的检测,画出检测电路图,编写相应程序。

  35. 8255A 74LS138 15 1 Y0 D7-D0 A 14 2 PA2-PA0 D7-D0 B 74LS138 13 3 C IOW WR 12 5 11 IOR RD G2B PA5-PA3 4 10 G2A 6 9 A1 A1 G1 7 Y7 A0 A0 PB7-PB0 CS A7-A2=011000 思路: 8255A的PA口输出到74LS138的CBA、Gx等入端, PB口检测74LS138的Yx; 8255A采用方式0枚举所有输入,检测输出。 电路图: 回下页

  36. CODE SEGMENT ASSUME CS:CODE START:MOV AL,82H ;A口方式0输出,B口方式0输入 OUT 63H,AL MOV DL,3FH ;DL为PA口输出的数据 TST: MOV AL,DL OUT 60H,AL ;PA口输出数据到138的入端 CALL DELAY1US ;延时1μs IN AL,61H ;读138的Yx(PB口数据) MOV AH,AL MOV AL,DL AND AL,38H ;只留下G1、G2A#、G2B#(00111000) CMP AL,20H ;判断是否为00100000 JNZ GN100 ;非G1=1,G2A#=G2B#=0时转S2 转上页

  37. ;当G1=1,G2A#=G2B#=0时,应某一Yx有效 G100: MOV AL,DL AND AL,07H ;只取CBA数据(00000111) ROR AH,AL ;将有效位移至位0 CMP AH,0FEH JNZ ERROR JMP NEXT GN100:MOV AL,AH ;当非G1=1,G2A#=G2B#=0时,Yx应全无效 CMP AL,0FFH JNZ ERROR NEXT: DEC DL JNZ TST JMP SUCCESS ERROR:……;显示检测出错信息 SUCCESS:……;显示检测正确信息

  38. 4、8255A应用之二—指示灯定时控制 用8259、8254、8255A(端口地址分别为10H~11H、20H~23H、30H~33H)实现指示灯的控制(轮流点亮8个指示灯之一,每秒换一个灯),74LS138负责I/O芯片片选译码(I/O地址线共10根)。已知有一个1kHz的标准脉冲信号源可用。为节省CPU时间,要求采用中断方式完成功能。 思路: ⑴ 74LS138负责所有芯片的译码; ⑵ 8254负责产生定时信号给8259产生中断; ⑶ 8255A负责对灯的控制,在中断服务程序中完成。 回40页

  39. 15 1 Y0 A 14 2 B 74LS138 13 CPU MEM 3 C 12 5 11 数据总线 4 10 地址总线 6 9 控制总线 G1 7 Y7 A4 A5 A6 AEN A7 A8 A9 IO/M G2A G2B 74LS138连接电路: 回下页

  40. CPU MEM 数据总线 地址总线 控制总线 D7-D0 IR0 IR4 IR7 Y1 A3 A2 A1 CS CS CS A0 D7-D0 D7-D0 RD WR RD WR RD WR CLK0 GATE0 OUT0 CLK1 GATE1 OUT1 PA7 PA0 8259A Y2 A3 A2 Y3 A3 A2 A1 A0 A1 A0 8255A 8254 8259A、8254、8255A的CPU侧连接电路: 转上页 转38页

  41. +5V 设计: (1)8254采用方式2,每秒产生一个负脉冲; 思考:当需要采用多片8254时,如何实现? (2)8259A采用边沿触发,防遗漏和重复中断; 思考:采用电平触发时,8254负脉冲是否够宽或太宽? (3)8255A输出1时灯不亮,输出0时灯亮; (4)8254的T/C0的GATE由8255A提供0→1的变化。 转下页

  42. CPU MEM 数据总线 地址总线 控制总线 +5V D7-D0 IR0 IR4 IR7 1kHz CS CS CS A0 D7-D0 D7-D0 RD WR RD WR RD WR CLK0 GATE0 OUT0 CLK1 GATE1 OUT1 PA7 PA0 PC0 8259A A1 A0 A1 A0 × × 8254 8255A 8259A、8254、8255A的外设侧连接电路: 回上页 转下页

  43. 实现功能的对应程序: DATA SEGMENT CTRL DB 11111110B ;用于控制8个灯中的一个 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI, OFFSET CTRL MOV AL,10000000B ;设置8255工作于方式0, ;A组输出,C口输出 OUT 33H,AL MOV AL,00000000B ;置PC0为低电平 OUT 33H,AL 回上页

  44. MOV AL,00100101B ;8254的T/C0工作于方式3, ;只写高字节,BCD码 OUT 23H,AL MOV AL,10H ;T/C0计数初值为1000 OUT 20H,AL MOV AL,00010010B ;8259的ICW1:边沿触发, OUT 10H,AL ;不要ICW3、ICW4 MOV AL,00001000B ;8259的ICW2:起始中断类型为08H OUT 11H,AL MOV AL,11101111B ;开放8259的IR4中断 OUT 11H,AL ;保存原来的0CH中断向量 MOV AX,CODE MOV DS,AX MOV DX,OFFSET CTRLLAMP MOV AX,250CH ;写入新的0CH中断向量 INT 21H

  45. MOV AL,00000001B ;设置PC0从0到1,8254开始计数 OUT 33H,AL …;CPU进行其它工作 EXIT:MOV AH,0 ;退出程序 INT 21H CTRLLAMP PROC ;中断服务程序 PUSH AX MOV AL,[SI] ;取当前应打开的灯的数据 OUT 30H,AL ROL AL ;产生下次应打开的灯的数据 MOV [SI],AL ;将下次应打开的灯的数据保存 POP AX IRET CTRLLAMP ENDP CODE ENDS END START

  46. 甲机8255 乙机8255 PA7-PA0 PB7-PB0 D7-D0 D7-D0 D7-D0 D7-D0 PB7-PB0 PA7-PA0 (OBFA)PC7 PC2(STBB) IOW IOW WR WR (ACKA)PC6 PC5(I/O) IOR IOR RD RD (STBB)PC2 PC7(OBFA) (I/O)PC5 PC6(ACKA) A1 A1 A1 A1 (INTRA)PC3 PC3(INTRA) A0 A0 A0 A0 (INTRB)PC0 PC0(INTRB) A9-A2=00011000 A9-A2=00011000 至A机8259 至B机8259 5、8255应用之三—中断方式双机双向8位通信 主程序:完成2个中断服务程序入口填入向量表, 8255初始化(中断方式),必要的数据准备; 中断服务程序:发送或接收数据、处理数据、返回。

  47. DATA SEGMENT SENDBUFF DB ‘HELLO,WORLD!’,13,10,‘$’ RECVBUFF DB 64 DUP(?) ……;定义PORTA、PORTB、PORTC、PORTCN OLDOC DD ? OLD0D DD ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,350CH ;保存原来的0CH中断向量 INT 21H MOV WORD PTR OLD0C,BX MOV WORD PTR OLD0C+2,ES MOV AX,350DH ;保存原来的0CH中断向量 INT 21H MOV WORD PTR OLD0D,BX MOV WORD PTR OLD0D+2,ES

  48. MOV AX,CODE ;写入新的0CH中断向量 MOV DS,AX MOV DX,OFFSET SENDSVR MOV AX,250CH INT 21H MOV AX,CODE ;写入新的0DH中断向量 MOV DS,AX MOV DX,OFFSET RECVSVR MOV AX,250DH INT 21H MOV AX,DATA ;恢复DS MOV DS,AX MOV SI,OFFSET SENDBUFF MOV DI,OFFSET RECVBUFF

  49. MOV AL,0A6H ;8255A口方式1输出,B口输入 OUT PORTCN,AL ;C口上半部输出 MOV AL,0DH ;置INTEA=1 OUT PORTCN,AL MOV AL,05H ;置INTEB=1 OUT PORTCN,AL MOV AL,0BH ;? OUT PORTCN,AL MOV AL,[SI] ;发送第一个字符 OUT PORTA, AL ;发送完后会自动产生OBFA# INC SI …… MOV AH,4CH INT 21H

  50. RECVSVR PROC ;接收 PUSHA IN AL,PORTB MOV [DI],AL INC DI ……;处理 MOV AL,0AH;产生脉冲 OUT PORTCN, AL MOV AL,0BH OUT PORTCN,AL POPA IRET RECVSVR ENDP CODE ENDS END START SENDSVR PROC ;发送 PUSHA MOV AL,[SI] CMP AL,‘$’ JZ EXIT OUT PORTA, AL INC SI JMP EXIT EXIT: POPA IRET SENDSVR ENDP 思考:如何实现双机间16位单向传输?

More Related