📄 rece1.asm
字号:
;**************************
;* 8250串行通信接收程序 *
;通过超级终端发送数据,设置波特率为9600,8位数据
;1位停止位,无奇偶校验。本程序负责接受
;并回送数据,同时显示在屏幕上.
;1: allowiio 0xDC80 0xDC82 0xDC84 0xDC86 0xDC88 0xDC8A 0xDC8C
;2: receive1
;**************************
DATA SEGMENT
IOPORT EQU 0DC00H
ADDR1 EQU IOPORT+80H ;8250
ADDR2 EQU IOPORT+82H ;interrupt enable register/ LOW BYTE OF DIVI
INTFR EQU IOPORT+84H ;interrupt flag register
LCR EQU IOPORT+86H ;line control register
MCR EQU IOPORT+88H ;modem control register
LSR EQU IOPORT+8AH ;line status register
MSR EQU IOPORT+8CH ;modem status register
DATAR DB 100H DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DATAR
MOV DX,LCR
MOV AX,80H
OUT DX,AX ;SET THE DLAB,ACCESS THE DIVI REGISTER
MOV DX,ADDR1
MOV AX,0CH
OUT DX,AX
MOV DX,ADDR2
MOV AX,0H
OUT DX,AX ;9600,SET divisor gene
MOV DX,LCR
MOV AX,07H ;no pe,8 bit, 1 stop
OUT DX,AX
MOV DX,ADDR2
MOV AX,0
OUT DX,AX ;no interupt
mov dx,MCR
mov ax,03H
out dx,ax
MOV DX,LSR
IN AX,DX
MOV DX,ADDR1
IN AX,DX
CRD: CALL RECV
MOV AH,06H ;判断是否有键按下
MOV DL,0FFH
INT 21H
JE CRD
;EXIT:
MOV AX,4C00H
INT 21H
;JMP OUTE
;--------接收子程序--------------------------
RECV PROC
MOV DX,LSR
IN AX,DX
TEST AX,01H ;TEST THE FLAG OF RECIEVE
JNZ RECV1
JMP RECV
RECV1: MOV DX,ADDR1
IN AL,DX
MOV DS:[SI],AL ;SAVE THE READING DATA
;CMP AL,1BH ;IF THE DATA IS EOC THE EXIT
;JNZ DISP1
;MOV AH,4CH
; INT 21H
DISP1: mov bl,al
mov cl,4
shr al,cl
cmp al,9;/////
jle LLL
jmp DDD
LLL: add al,30h
jmp disp2
DDD: add al,37h
disp2: MOV AH,02h
MOV DL,AL
int 21h ;输出高四位
mov al,bl
and al,0fh
cmp al,9;/////
jle LLL1
jmp DDD1
LLL1:
add al,30h
jmp disp3
DDD1: add al,37h
disp3:
mov dl,al
mov ah,02h
INT 21H ;输出低四位
mov ah,02h
mov dl,' '
int 21h
RET
RECV ENDP
;--------程序结束----------------------
;OUTE:
CODE ENDS ;end of code segment
END START ;end assembly
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -