欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

南邮汇编实验2——串口测试

程序员文章站 2022-06-20 20:26:12
...

南邮汇编实验2——串口测试

串口测试,实现电脑的自发自收。

发送用查询方式,接收用中断方式。

 .586
DATA        SEGMENT     USE16
OLD0C       DD          ?                  ;存放中断向量
FLAG        DB          0                  ;结束
DATA        ENDS
CODE        SEGMENT     USE16
            ASSUME      CS:CODE,DS:DATA
BEG:        MOV         AX,DATA
            MOV         DS,AX
            CLI                            ;关中断
            CALL        I8250              ;8250初始化
            CALL        I8259              ;开放 设置的屏蔽字
            CALL        RD0C
            CALL        WR0C
            STI                            ;开中断
SCANT:      CMP         FLAG,-1            ;判断结束
            JE          RETURN
            MOV         DX,2FDH            ;状态端口,查询状态
            IN          AL,DX
            TEST        AL,20H             ;判断8250有没有准备好
            JZ          SCANT
            MOV         AH,1               ;查询键盘缓冲区
            INT         16H                ;bios功能
            JZ          SCANT
            MOV         AH,0               ;读取
            INT         16H                ;bios功能
            AND         AL,7FH             ;后7位
            MOV         DX,2F8H            ;数据端口
            OUT         DX,AL
            CMP         AL,1BH             ;判断esc
            JNE         SCANT
TWAIT:      MOV         DX,2FDH
            IN          AL,DX
            TEST        AL,40H             ;测试一帧数据是否发送完
            JZ          TWAIT
RETURN:     CALL        RESET
            MOV         AH,4CH
            INT         21H
            
RECEIVE     PROC
            PUSH        AX					;保护现场
            PUSH        DX
            PUSH        DS
            MOV         AX,DATA
            MOV         DS,AX
            MOV         DX,2F8H				;接收数据缓冲寄存器
            IN          AL,DX               ;读取
            AND         AL,7FH              ;最高位置0
            CMP         AL,1BH
            JE          NEXT                ;FLAG=-1
            MOV         AH,2                ;显示字符
            MOV         DL,AL
            INT         21H
            JMP         EXIT
NEXT:       MOV         FLAG,-1
EXIT:       MOV         AL,20H              ;向主8259发送结束
            OUT         20H,AL
            POP         DS
            POP         DX
            POP         AX
            IRET
RECEIVE     ENDP

I8250       PROC						;8250初始化
            MOV         DX,2F8H
            MOV         AL,80H
            OUT         DX,AL
            MOV         DX,2F9H
            MOV         AL,0
            OUT         DX,AL
            MOV         DX,2F8H
            MOV         AL,60H
            OUT         DX,AL
            MOV         DX,2F8H
            MOV         AL,03H
            OUT         DX,AL
            MOV         DX,2F9H
            MOV         AL,01H
            OUT         DX,AL
            MOV         DX,2FCH
            MOV         AL,08H
            OUT         DX,AL
            RET
I8250       ENDP

I8259       PROC
            IN          AL,21H
            AND         AL,11110111B     ;IR3开放,全0则全开放
            OUT         21H,AL
            RET                          ;结束
I8259       ENDP

RD0C        PROC
            MOV         AX,350BH          ;辅串口0B,主串口0C
            INT         21H
            MOV         WORD PTR OLD0C,BX		;ES:BX中断程序地址
            MOV         WORD PTR OLD0C+2,ES
            
            RET
RD0C        ENDP

WR0C        PROC
            PUSH        DS
            MOV         AX,CODE
            MOV         DS,AX			;段基址
            MOV         DX,OFFSET RECEIVE	;偏移地址
            MOV         AX,250BH		;25H功能号,0BH终端类型号
            INT         21H
            POP         DS
            RET
WR0C        ENDP

RESET       PROC
            IN          AL,21H
            OR          AL,00001000B	;IR3端口开放
            OUT         21H,AL
            MOV         AX,250BH        ;25H功能号,0BH终端类型号
            MOV         DX,WORD PTR OLD0C  		;DX偏移地址
            MOV         DS,WORD PTR OLD0C+2		;DS段基址
            INT         21H
            RET
RESET       ENDP
CODE        ENDS
            END         BEG

相关标签: 南邮学习