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

本实验通过PC系列机及TASM5.0工具实现串口自发自收测试,使用查询方式发送数据并采用中断方式接收数据,同时实现了字符的输入与显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

实验目的:

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

实验内容:

1. 完成硬件测试环境;

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

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

实验步骤:

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

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

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

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


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

    给出代码和一定注释:

[plain]  view plain  copy
  1. .586                         //by  zwy  
  2. DATA   SEGMENT USE16  
  3. OLD0B  DD ?  
  4. FLAG   DB 0  
  5. DATA   ENDS  
  6. CODE   SEGMENT USE16  
  7.        ASSUME CS:CODE ,DS:DATA  
  8.        
  9. BEG:   MOV AX,DATA  
  10.        MOV DS,AX  
  11.        CLI            ;关中断  
  12.        CALL I8250     ;辅串口初始化  
  13.        CALL I8259     ;开发8259辅串口中断  
  14.        CALL RD0B      ;读中断向量  
  15.        CALL WR0B      ;写中断向量  
  16.        STI            ;开中断  
  17.          
  18. SCANT: CMP FLAG ,-1   ;测试是否收到结束字符  
  19.        JE RETURN      ;接收到ESC则结束程序  
  20.        MOV DX,2FDH    ;读取通信线状态寄存器    
  21.        IN AL,DX       ;读取通信状态字  
  22.        TEST AL,20H    ;查询D5位 发送保持寄存器空闲标志位 为1则空闲  
  23.        JZ SCANT       ;结果为0 说明发送器D5位为0 不空 则跳转继续查询    
  24.       
  25.                         
  26.        MOV AH,1       ;查询键盘缓冲区  
  27.        INT 16H  
  28.        JZ SCANT    
  29.        MOV AH,0       ;BIOS 0号子功能调用 不回显输入  
  30.        INT 16H         
  31.          
  32.        AND AL,7FH     ;屏蔽最高位  标准ASCII码为7位  
  33.          
  34.        MOV DX,2F8H    ;送辅串口数据寄存器  
  35.        OUT DX,AL  
  36.          
  37.        CMP AL,1BH     ;判断是否是ESC 结束字符  
  38.        JNE SCANT  
  39.          
  40. TWAIT: MOV DX,2FDH    ;读取通信线状态寄存器  
  41.        IN AL,DX       ;读取通信状态字  
  42.          
  43.        TEST AL,40H    ;D6位为发送移位寄存器空闲标志位 为1则空闲 测试一帧数据是否发送完成  
  44.        JZ  TWAIT  
  45.          
  46. RETURN:CALL RESET       
  47.        MOV AH,4CH  
  48.        INT 21H  
  49.       
  50.       
  51. RECEIVE PROC          ;中断方式进行接收  
  52.         PUSH AX       ;保护现场  
  53.         PUSH DX  
  54.         PUSH DS  
  55.         MOV AX,DATA  
  56.         MOV DS,AX  
  57.         MOV DX,2F8H    ;接收缓冲寄存器  
  58.         IN AL,DX       ;读取接收缓冲区的内容  
  59.         AND AL,7FH     ;屏蔽最高位  
  60.         CMP AL,1BH     ;判断是否为结束字符  
  61.         JE NEXT        ;相等则跳转next  
  62.           
  63.         MOV AH,2       ;调用dos2号子功能  
  64.         MOV DL,AL        
  65.         INT 21H        ;显示接收到的字符串  
  66.         JMP EXIT  
  67.           
  68. NEXT:   MOV FLAG ,-1   ;将flag置为-1  
  69.   
  70. EXIT:   MOV AL,20H  
  71.         OUT 20H,AL  
  72.         POP DS  
  73.         POP DX  
  74.         POP AX  
  75.         IRET  
  76.  RECEIVE ENDP  
  77.   
  78.   
  79.                                        ;辅串口初始化  
  80.  I8250  PROC  
  81.         MOV DX,2FBH  
  82.         MOV AL,80H  
  83.         OUT DX,AL                      ;寻址地址为1  
  84.         MOV DX,2F9H  
  85.         MOV AL,0  
  86.         OUT DX,AL                      ;写除数寄存器高8位  
  87.         MOV DX,2F8H  
  88.         MOV AL,60H  
  89.         OUT DX,AL                      ;写除数寄存器低8位  
  90.         MOV DX,2FBH  
  91.         MOV AL,03H  
  92.         OUT DX,AL                      ;写数据帧格式  
  93.         MOV DX,2F9H  
  94.         MOV AL,01H  
  95.         OUT DX,AL                      ;允许8250内部提出接收中断  
  96.         MOV DX,2FCH  
  97.         MOV AL,08H  
  98.         OUT DX,AL                      ;8250正常收发并允许送出中断请求  
  99.         RET  
  100.  I8250 ENDP  
  101.   
  102.   
  103.                                        ;开放辅8259串口中断  
  104.  I8259  PROC  
  105.         IN  AL,21H    
  106.         AND AL,11110111B               ;将D3位置0  辅串口为D3位  
  107.         OUT 21H,AL                     ;写中断命令字  
  108.         RET  
  109.  I8259  ENDP  
  110.   
  111.   
  112.                                        ;读中断向量  
  113.  RD0B   PROC  
  114.         MOV AX,350BH  
  115.         INT 21H  
  116.         MOV WORD PTR OLD0B ,BX         ;辅串口为0B  
  117.         MOV WORD PTR OLD0B+2 ,ES  
  118.         RET  
  119.  RD0B    ENDP  
  120.   
  121.   
  122.                                        ;写中断向量  
  123.  WR0B   PROC  
  124.         PUSH  DS  
  125.         MOV AX,CODE  
  126.         MOV DS,AX  
  127.         MOV DX,OFFSET RECEIVE  
  128.         MOV AX,250BH  
  129.         INT 21H  
  130.         POP DS  
  131.         RET  
  132.  WR0B   ENDP  
  133.   
  134.                                        ;恢复原中断向量  
  135.  RESET  PROC  
  136.         IN AL,21H  
  137.         OR AL,00001000B  
  138.         OUT 21H,AL  
  139.         MOV AX,250BH  
  140.         MOV DX, WORD PTR OLD0B  
  141.         MOV DS, WORD PTR OLD0B+2  
  142.         INT 21H  
  143.         RET  
  144.  RESET  ENDP  
  145.   
  146.  CODE   ENDS  
  147.         END BEG  
  148.           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值