📄 pcsf.asm
字号:
;
;*******pc-接收发送程序****************
;
stack segment para stack 'stack' ;
db 256 dup(0) ;设堆栈段
stack ends
data segment para public 'data'
msg db 10,13,'$'
msg1 db 'one data hasnot received! $' ;设数据段
db 256 dup(0)
data ends
code segment para public 'code'
start proc far
assume cs:code,ds:data,es:data
push ds
mov ax,0 ;保护原数据段段址
push ax
mov ax,data
mov es,ax ;设数据段和附加段偏移地址
mov ds,ax
mov dx,3fbh ;使线控寄存器的D7位为1,准备设置波特率
mov al,80h
out dx,al
mov dx,3f8h ;设置波特率为2400
mov al,60h ;低
out dx,al
mov dx,3f9h ;
mov al,00h ;高
out dx,al
mov dx,3fbh ;置通信格式为8位数据位,1位停止位
mov al,13h ;偶校
out dx,al
mov dx,3fch
mov al,09h ;置数据终端准备好信号有效
out dx,al
mov dx,3f9h ;禁止所有中断
mov al,0
out dx,al
mm0: mov ah,0bh ;测试键盘,为1时表示已有键盘按下
int 21h
test al,01h
jz mm1 ;无键按下转
mov ah,01h ;显示键名
int 21h
mov ah,al ;键名送AH保存
mov dx,3fdh ;
mn1: in al,dx ;测试串口
test al,20h ;发送保存寄存器空? 不空等待
jz mn1 ;
test al,40h ;发送位移寄存器空? 不空等待
jz mn1
mov dl,ah
mov ah,04h ;把键名发出去
int 21h
mm1: mov dx,3fdh ;测试串口
in al,dx
test al,02h ;有"数据被冲出错?" 无错则转
jz mm2
mov dx,offset msg
mov ah,09h
int 21h ;显示"漏收一个数据"
mov dx,offset msg1
mov ah,09h ;DOS功能调用
int 21h
mm2: test al,01h ;测试串行口,接收到数据否?无则转
jz mm0
mov ah,03h ;接收一个数据(即对方送来的键名)
int 21h
mov dl,al
mov ah,02h
int 21h
jmp mm0 ;跳转
ret
start endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -