⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.asm

📁 在PC机上进行的8250串口接受实验
💻 ASM
字号:

data segment
dis0 db '+-----------------------------------------------------------------------+',0dh,0ah
     db '|                    Serial Test       Receive Terminal                 |',0dh,0ah 
     db '|                          ^-^    ^-^     ^-^                           |',0dh,0ah
     db '+-----------------------------------------------------------------------+',0dh,0ah,'$'
dis1 db 0dh,0ah,'The data you have received are:   ',0dh,0ah,'$'
dis2 db 0dh,0ah,'Do you want to continue? (y\n)',0dh,0ah,'$'
dis3 db 0dh,0ah,'Receive Successfully!',0dh,0ah,'$'
dis4 db 0dh,0ah,'->  Receive error!',0dh,0ah,'$'
dis5 db 0dh,0ah,'Waiting for the data......',0dh,0ah,'$'
receive_data  db 100 dup(?)
data ends
code segment
     assume cs:code,ds:data
;------------------------------------------------------------------------------------------
main proc far
     mov ax,data
     mov ds,ax
     xor ax,ax
	 
	 ;16色文本显示方式
     mov al,3
     mov ah,0
     int 10h 


     mov dx,offset dis0
     call disp

	 ;初始化串口
	 call initialize_serial
repeat_all:

     ;显示等待数据
	 mov dx,offset dis5
     call disp

	 ;接收来自接发送端的信
	 call receive	 
	 call crlf

choose_yesno:

     ;询问是否继续
	 mov dx,offset dis2
     call disp

	 ;调用选择是否继续程序段
	 call inpute_yesno
exit_all:
     mov ax,4c00h
     int 21h
main endp
;---------------------------------------------------------------------------------------
initialize_serial proc near
     ;通信控制寄存器D7=1
     mov dx,03fbh
	 mov al,80h
	 out dx,al

     ;设置波特率为9600
	 mov dx,03f8h
	 mov al,0ch
	 out dx,al
	 inc dx
	 mov al,0
	 out dx,al

     ;初始化通信控制寄存器
	 mov dx,03fbh
	 mov al,0bh
	 out dx,al

     ;初始化modem控制器
	 mov dx,03fch
	 mov al,03h
	 out dx,al

     ;写中断允许寄存器
	 mov dx,03f9h
	 mov al,0
	 out dx,al
     ret
initialize_serial endp

;---------------------------------------------------------------------------------------
receive proc near
     mov si,0
waitre:
     mov dx,3fdh
	 ;循环等待接受段的确认信息
	 in al,dx 
	 mov ah,al
	 test ah,1eh
	 jnz receive_error
     test al,01h
	 jz waitre  
	   
	 mov dx,3f8h
	 in al,dx
	 mov receive_data[si],al
	 inc si
	 cmp al,24h
	 jz receive_exit
	 jmp waitre
	 
receive_exit:
     ;显示成功接受
	 mov dx,offset dis3
     call disp
	 ;显示接受到的数据
	 mov dx,offset dis1
     call disp
	 mov dx,offset receive_data
	 call disp
	 ret
	 
receive_error:
     ;显示接受错误
	 mov dx,offset dis4   
     call disp
     ret
receive endp

;------------------------------------------------------------------------------------------
inpute_yesno proc near
inpute_yesno_again:
     mov ah,7
     int 21h
     cmp al,79h
     je yes
     cmp al,6eh
     je no
     jmp inpute_yesno_again
yes:
     jmp repeat_all
no:
     jmp exit_all
     ret
inpute_yesno endp
;------------------------------------------------------------------------------------------
disp proc near
        mov ah,9
        int 21h
        ret
disp endp
;------------------------------------------------------------------------------------------
crlf proc near
     mov dl,0dh
     mov ah,2
     int 21h
     mov dl,0ah
     mov ah,2
     int 21h
     ret
crlf endp
code ends
end main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -