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

南邮汇编实验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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值