NJUPT 微机 串行通信 自发自收 8250编程

本来写了两三个小时,死活没反应。

原因是:笔记本的串口没有用实验室的器件插上,完成不了自发自收。

这次实验还得感谢本专业的一个大神的帮助。

参考程序如下:

;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





你可能感兴趣的:(NJUPT-CS,汇编)