本来写了两三个小时,死活没反应。
原因是:笔记本的串口没有用实验室的器件插上,完成不了自发自收。
这次实验还得感谢本专业的一个大神的帮助。
参考程序如下:
;FILENAME:自发自收
;when send , get and display
.586
data segment use16
buf db 'Hello!',03H
lens equ $-buf
mesg db 'The received characters:','$'
data ends
code segment use16
assume cs:code,ds:data
beg:
mov ax,data
mov ds,ax
call i8250
mov dx,offset mesg
mov ah,9h
int 21h
lea bx,buf
mov cx,lens
scan:
mov dx,3fdh ;通信线状态寄存器
in al,dx ;此时要查看发送保持寄存器是否有值
test al,01h
jnz process ;如果可以读取
test al,20h ;若有a5为1则写入发送保存寄存器
jz scan ;否则就不可以写入,继续查看
mov dx,3f8h ;写入发送保存寄存器
mov al,[bx]
out dx,al
inc bx ;写完之后考虑直接用读取输出到屏幕上
loop scan
process: ;接收子程序
mov dx,3f8h
in al,dx
and al,01111111B
cmp al,03h
jnz disp ;此时可以从接受缓存寄存器中读取
mov ah,4ch
int 21h
disp proc
push ax
mov ah,02h
mov dl,al
int 21h
pop ax
jmp scan
disp endp
i8250 proc
mov dx,3fbh
mov al,80h
out dx,al
mov dx,3F9H
mov al,0
out dx,al
mov dx,3F8H
mov al,30H
out dx,al
mov dx,3FBH
mov al,0AH
out dx,al
mov dx,3F9H
mov al,0
out dx,al
mov dx,3FCH
mov al,0
out dx,al
ret
i8250 endp
code ends
end beg