微机接口技术实验三测试微机系统串行口

来源:互联网 发布:中国网络空间安全协会 编辑:程序博客网 时间:2024/05/09 06:37

实验名称:  测试微机系统串行口(实验教程P109 实验6.10,可参考课本341页例9.3)

实验环境:PC系列机,汇编语言开发工具TASM5.0或 未来汇编

实验目的:

学习汇编语言程序设计的方法;掌握8250异步串行接口芯片的工作原理;掌握串行通信程序的设计。

实验内容:

1. 完成硬件测试环境;

2. 编写程序对微机系统的串口进行自发自收外环测试;发送采用查询方式,接收采用中断方式;

3. 数据发送从键盘键入,接受数据屏幕显示。

实验步骤:

1. 根据实验内容将系统机主机箱后的一个RS-232C口的发送和接收端子短接;

2. 利用汇编工具编写并生成串行通信程序的可执行程序;

3. 运行程序键盘输入需发送的字符,并观察显示内容;

4. 根据程序运行情况改进源程序直至无逻辑错误、符合实验要求。


    实验结果需在实验室特定的自发自收的串口机器上运行才能正常显示,正常显示的结果应为输入字符正确显示在屏幕上,因调用的BIOS0号子功能输入所以输入字符不回显,经过自发自收后调用功能显示接收到的字符,所以显示字符并不是输入回显的字符,而是经过接收后显示的字符。程序按ESC键正常退出。

    给出代码和一定注释:

.586                         //by  zwyDATA   SEGMENT USE16OLD0B  DD ?FLAG   DB 0DATA   ENDSCODE   SEGMENT USE16   ASSUME CS:CODE ,DS:DATA BEG:   MOV AX,DATA   MOV DS,AX   CLI            ;关中断   CALL I8250     ;辅串口初始化   CALL I8259     ;开发8259辅串口中断   CALL RD0B      ;读中断向量   CALL WR0B  ;写中断向量   STI  ;开中断   SCANT: CMP FLAG ,-1   ;测试是否收到结束字符   JE RETURN  ;接收到ESC则结束程序   MOV DX,2FDH  ;读取通信线状态寄存器     IN AL,DX  ;读取通信状态字   TEST AL,20H    ;查询D5位 发送保持寄存器空闲标志位 为1则空闲   JZ SCANT  ;结果为0 说明发送器D5位为0 不空 则跳转继续查询                           MOV AH,1       ;查询键盘缓冲区   INT 16H   JZ SCANT     MOV AH,0       ;BIOS 0号子功能调用 不回显输入   INT 16H             AND AL,7FH     ;屏蔽最高位  标准ASCII码为7位      MOV DX,2F8H  ;送辅串口数据寄存器   OUT DX,AL      CMP AL,1BH     ;判断是否是ESC 结束字符   JNE SCANT   TWAIT: MOV DX,2FDH    ;读取通信线状态寄存器   IN AL,DX  ;读取通信状态字      TEST AL,40H    ;D6位为发送移位寄存器空闲标志位 为1则空闲 测试一帧数据是否发送完成   JZ  TWAIT   RETURN:CALL RESET     MOV AH,4CH   INT 21HRECEIVE PROC          ;中断方式进行接收PUSH AX       ;保护现场PUSH DXPUSH DSMOV AX,DATAMOV DS,AXMOV DX,2F8H    ;接收缓冲寄存器IN AL,DX       ;读取接收缓冲区的内容AND AL,7FH   ;屏蔽最高位CMP AL,1BH     ;判断是否为结束字符JE NEXT   ;相等则跳转nextMOV AH,2       ;调用dos2号子功能MOV DL,AL      INT 21H        ;显示接收到的字符串JMP EXITNEXT:   MOV FLAG ,-1   ;将flag置为-1EXIT:   MOV AL,20H OUT 20H,AL POP DS POP DX POP AX IRET RECEIVE ENDP                                       ;辅串口初始化 I8250  PROC MOV DX,2FBH MOV AL,80H OUT DX,AL                      ;寻址地址为1 MOV DX,2F9H MOV AL,0 OUT DX,AL                      ;写除数寄存器高8位 MOV DX,2F8H MOV AL,60H OUT DX,AL                      ;写除数寄存器低8位 MOV DX,2FBH MOV AL,03H OUT DX,AL                      ;写数据帧格式 MOV DX,2F9H MOV AL,01H OUT DX,AL                      ;允许8250内部提出接收中断 MOV DX,2FCH MOV AL,08H OUT DX,AL                      ;8250正常收发并允许送出中断请求 RET I8250 ENDP   ;开放辅8259串口中断 I8259  PROC IN  AL,21H   AND AL,11110111B   ;将D3位置0  辅串口为D3位 OUT 21H,AL                     ;写中断命令字 RET I8259ENDP    ;读中断向量 RD0B   PROC MOV AX,350BH INT 21H MOV WORD PTR OLD0B ,BX         ;辅串口为0B MOV WORD PTR OLD0B+2 ,ES RET RD0B    ENDP    ;写中断向量 WR0B PROC PUSH  DS MOV AX,CODE MOV DS,AX MOV DX,OFFSET RECEIVE MOV AX,250BH INT 21H POP DS RET WR0B   ENDP       ;恢复原中断向量 RESET  PROC IN AL,21H OR AL,00001000B OUT 21H,AL MOV AX,250BH MOV DX, WORD PTR OLD0B MOV DS, WORD PTR OLD0B+2 INT 21H RET RESET  ENDP CODE   ENDS END BEG 
    特记下,以备后日回顾。

0 0
原创粉丝点击