1、计算机系统的通信实验计算机系统的通信实验一目的:了解计算机间的数据通信的基本技术;了解RS232C的结构及使用方法。RS-232C 9芯连接器插针定义如下: 1 保护地 1 2 发送数据TXD 2 3 接收数据RXD 3 4 请求发送RTS 4 5 准允发送CTS 5 6 数据装置准备好DSR 6 20 数据终端准备好DTR 20 8 载波检测CD 8 7 信号地 7 二使用设备:带有RS232C通信接口的微型计算器及一根多芯电缆。三8250异步串行接口:8250的逻辑框图如下: 内部总线路 SIN 接收数据寄存器 移位寄存器 数据总线 线控制寄存器 接收定时 CLK 和控制 分频寄存器(L)
2、 波特率地址 分频寄存器(H) 产生器总线 地址 发送定时选 线状态寄存器 和控制择 SOUT控制线 等 发送保持寄存器 移位寄存器 控 制 Moden控制寄存器 Moden RTS CTS 逻 控 制 DTR DSR 辑 逻 辑 RI OUT1 Moden状态寄存器 OUT2 RLSD 中断允许寄存器 中断控 INTRPT制逻辑 中断标识寄存器四 8250应用程序举例(一). 查询方式1. 要求:任何从键盘上输入的信息,一方面显示在CRT上,另一方面从串行接口输出;任何从串行接口输入的信息都将在CRT上显示出来;在键盘上输入“Esc”键时,则退出程序运行。(1) 收发处理程序测线路状态寄存器
3、(3FDH)的值以判通信接口处于发送或接收就绪状态。 举例如下: REPEAT: MOV DX, 3FDHIN AL, DXTEST AL, 01HJNZ RECEIVTEST AL, 20HJZ REPEAT . . .MOV DX, 3F8H ; 发送字符OUT DX, ALJMP REPEAT RECEIV: MOV DX, 3F8H ; 接收字符IN AL, DX . . .JMP REPEAT(2) 键盘输入程序举例MOV AH, 01HINT 16HJZ REPEATMOV AH, 00HINT 16HCMP AL,27JZ RE . . .JMP REPEAT RE: RET(3
4、) 显示通信字符举例 PUSH AXPUSH BXMOV BL, 00HMOV AH, 0EHINT 10HPOP BXPOP AX2. 程序的流程图如下: 波特率、数据位数、校验位、停止位的初始化 Modem控制寄存器初始化, 使DTR、RTS有效,输出 反馈输入线状态寄存器AL Y 显示“?” 接收有错? N Y 接收数据准备好? N N 发送保持寄存器空? 输入字符代码入AL Y Y 键盘缓冲区空? 调BIOS子程序显示 N N 从键盘缓冲区取出字符输出 是回车字符? Y 显示换行3程序清单:ATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:COD
5、E,DS:DATASTART: MOV DX,3FBH MOV AL,80H OUT DX,AL ;线控制寄存器设置波特率 MOV DX,3F8H MOV AL,0C0H OUT DX,AL ;600波特率的分频器L MOV DX,3F9H MOV AL,00H OUT DX,AL ;600波特率的分频器H MOV DX,3FBH MOV AL,1BH OUT DX,AL ;8位偶校验 MOV DX,3FCH MOV AL,03H OUT DX,AL ;MODEM控制器初始化 MOV DX,3F9H MOV AL,00H OUT DX,AL ;中断允许寄存器初始化REPEAT: MOV DX,
6、3FDH IN AL,DX TEST AL,01H ;检测是否可以接收数据 JNZ RECEIVE TEST AL,20H ;检测是否可以发送数据 JZ REPEAT ;如果不可以接收和发送数据,则重新执行REPEAT MOV AH,01H ;键盘是否有按键 INT 16H JZ REPEAT MOV AH,00H INT 16H CMP AL,27 JZ RE MOV DX,3F8H OUT DX,AL ;发送数据 PUSH AX PUSH BX MOV BL,00H MOV AH,0EH INT 10H ;显示一个通信字符 POP BX POP AX JMP REPEATRECEIVE:M
7、OV DX,3F8H IN AL,DX ;接收数据 PUSH AX PUSH BX MOV BL,00H MOV AH,0EH INT 10H ;显示一个通信字符 POP BX POP AX JMP REPEATRE: MOV AX,4C00H INT 21HCODE ENDS END START JMP REPEAT(二). 中断方式1 要求:使用IBM PC串口 1, 编制一个简易的仿终端程序, 其功能如下: 当按键时,将该键的ASCII码送串口输出,并将从串口1 收到的字符送显示器显示, 假设接收用中断方式, 发送用程序查询方式。并设串口参数为:8 位数据位,无效验,2位停止位,波特率为
8、9600BIT/S。2 8259A中断控制器在IBM PC 微机系统中,8088管理三类中断:(1) 内部中断,即软中断,包括由PSW的状态标志所产生的溢出中断,陷阱中断。(2) 非屏蔽中断NMI,外部中断产生。(3) 可屏蔽中断INTR,由8级外部中断产生。8259A是一种可编程的中断控制器芯片,每片8259A可以管理8 级优先级中断。8259A的中断管理功能如下: 记录各级中断源的中断请求; 判优,确定是否应该响应和响应哪一级中断请求; 响应中断时,向CPU传送中断类型号。8259A所管理的8个中断源的类型号为8-0FH中断优先级 中 断 源 中断类型码 IRQ0 电子钟时间基准 08H
9、IRQ1 键盘 09H IRQ2 为用户保留的中断 0AH IRQ3 异步通信(COM2) 0BH IRQ4 异步通信(COM1) 0CH IRQ5 硬盘 0DH IRQ6 软磁盘 0EH IRQ7 并行打印机 0FHIBM PC系统板上的8259A占有两个端口地址:20H,21H。2 可屏蔽中断传送数据的全过程:(1)主程序为中断传送作准备A 系统初始化中布置8259A以及其他接口将IBM PC系统板上的8259A布置为单级,缓冲,普通非指定EOI方式。IBM PC系统板上的8259A的初始化程序段在ROM BIOS中。B 应用程序进行的初始化包括将中断服务程序首址的偏移和段值填入中断向量表
10、相应类型号位置。开放8259A对应中断(IRQ4),有关编程接口的布置,等等。应强调,初始化布置必须在关中断条件下进行。例: 开放IRQ4: IN AL,21H AND AL,0EFH OUT 21H,AL 设置中断向量: CLI ;关中断 MOV AX,00 MOV ES,AX MOV DI,4*12 MOV AX,OFFSET RINT CLD ;在串操作时,使地址增量 STOSW ;将AX的内容传送到由DI作为指针的目的串中 MOV AX,CS STOSW串操作指令:SI寻址源操作数,现行段在DS中DI寻址目的操作数,现行段在ES中 或: 用DOS系统功能调用(INT 21H)DS: D
11、X=中断向量 AL=中断类型号 AH=25H MOV DX,OFFSET RINT MOV AX,SEG RINT MOV DS,AX MOV AL,0CH ;COM1的中断类型码 MOV AH,25H INT 21H(2) 中断申请当外设准备好数据,则向8259A提出中断申请。8259A将新申请的中断和正在服务的中断进行比较判优。假设新的中断请求最优,则8259A就通过INTR引脚向CPU申请中断。(3) 响应中断8088在执行当前指令的最后一时钟周期,检测INTR,如果为“1”,在标志寄存 器中断使能位IF为1并且在没有NMI请求的条件下,下一个时钟周期进入INTR中断响应周期。第一个中断
12、响应周期,主8259A向从8259A送选择码。IBM PC为单级,无此操作。第二个中断响应周期,8088CPU接收8259A送来的向量号N,此外还做一系列内部操作:1 标志寄存器压栈保存。2 将断点的段值和偏移值压栈保存。3 将标志寄存器的中断允许位IF和单步标志位TF复位。4 将存储器4N字单元内容送IP,4N+2字单元内容送CS。然后转到CS:IP去执行,即转到中断服务程序首址去执行。应该强调的是上述中断响应的操作是直接由CPU硬件逻辑完成的,而不是由程序完成的。3 程序框图如下: 主程序 中断程序 初始化 开中断,保护现场 否 是 否 是 按键否? 线路状态错否? 否 是发送寄存器空?
13、接收字符放缓冲区 否 是键码送串口输出 缓冲区满否? 否 是ELFLAG=“1”? 置BFFLAG显示线路错 置ELFLAG 否 是BFFLAG=“1”? 发EOI显示缓冲区满 恢复现场 否 是缓冲区有字符吗? 返回取字符显示4中断程序清单:DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV DX,3FBH MOV AL,80H OUT DX,AL ;线控制寄存器设置波特率 MOV DX,3F8H MOV AL,0CH OUT DX,AL ;9600波特率的分频器L MOV DX,3F9H MOV AL,00
14、H OUT DX,AL ;9600波特率的分频器H MOV AL,07H OUT DX,AL ;8位无校验,2位停止 MOV DX,3FCH MOV AL,0BH OUT DX,AL ;MODEM控制器初始化 MOV DX,3F9H MOV AL,01H OUT DX,AL ;中断允许寄存器初始化 MOV DX,3FAH MOV AL,04H OUT DX,AL ;中断标识寄存器初始化REPEAT: MOV DX,3FDH IN AL,DX TEST AL,01H ;检测是否可以接收数据 JNE RECEIVE TEST AL,20H ;检测是否可以发送数据 JZ REPEAT ;如果不可以接
15、收和发送数据,则重新执行REPEAT MOV AH,01H ;键盘是否有按键 INT 16H JZ REPEAT MOV AH,00H INT 16H CMP AL,27 JZ RE ;将键入的字符转换为ASCII码 MOV DX,3F8H OUT DX,AL ;发送数据 PUSH AX PUSH BX MOV BL,00H MOV AH,0EH INT 10H ;显示一个通信字符 POP BX POP AX JMP REPEATRECEIVE: IN AL,21H AND AL,0EFH OUT 21H,AL CLI ;关中断 MOV AX,00 MOV ES,AX MOV DI,4*12
16、MOV AX,OFFSET RINT CLD ;在串操作时,使地址增量 STOSW ;将AX的内容传送到由DI作为指针的目的串中 MOV AX,CS STOSW MOV DX,OFFSET RINT MOV AX,SEG RINT MOV DS,AX MOV AL,0CH ;COM1的中断类型码 MOV AH,25H INT 21H RE: MOV AX,4C00H INT 21HCODE ENDS END START JMP REPEAT心得与体会: 我们知道串口通讯有查询与中断两种方式,但是对于两种方式的区别很多人并不是非常清楚,对于两者的实现到底有和不同呢?让我们简单的总结如下:查询方式:发送数据先发后查; 接收数据先查后收。中断方式:发送数据发送、等待中断、中断中发送; 接收数据等待中断、在中断中接收。所以我们在不同方式下对发送数据和接收数据的处理是不同的,我们应注意对其的处理,在其中也应注意各个程序的正确性。通过本次实验也学会了串口通讯的两种方式,收获颇丰!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1