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

📄 sjtxs.asm

📁 微机接口实验 实现双机全双工通信 有实验源代码及实验报告
💻 ASM
字号:
;STACKSG	SEGMENT STACK 'S‘
;		DW  64  DUP('ST')
;STACKSG	ENDS
DATASTARTX	EQU		02F8H					;对方机器端口号	
DATASTART1	EQU		03F8H					;数据入口地址 当DL=0,RBR、THR 当DL=1 为DLL 
DATASTART2	EQU		03F9H					;DL=0,IER,当DL=1,DML 	
DATASTATE	EQU		03FDH					;线路状态寄存器端口号 LSR
com1k 		equ 	3fbh					;线路控制寄存器 也可能为02fb
data 		segment
p1 			db		"system ready!$"
p3 			db		"communication error!$"
INPUTDATA	DB		?						;输入的字符串
data 		ends
code 		segment
   			assume 	cs:code,ds:data
main		proc far
start:		push 	ds
     		xor 	ax,ax
     		push 	ax
     		mov 	ax,data
     		mov 	ds,ax
     		;下面是要自己写的内容1==========================
    		;写LCR 设8位数据,2位停止位,偶校验  无间隔传送,则线路控制寄LCR=9FH。
     		MOV	    AL,9FH
     		MOV		DX,COM1K
     		OUT		DX,AL	
     		;写分频系数 当编程的线路控制寄存器LCR的D7位DL=1时,
     		;接下来向02f8H和02f9H端口写入的值为分频系数16位值,允许仅写低8位。
     		;例如,置波特率9600时,分频系数=12。则为000CH
			;写入低地址
			MOV		DX,DATASTART1 			
     		MOV		AL,0CH					;根据波特率的不同而变化的
     		OUT		DX,AL
     		;写入高地址
     		MOV     DX,DATASTART2
     		MOV		AL,00H					;根据波特率的不同而变化的
     		OUT		DX,AL
    		;为FIFO的DL位回写零
    		MOV		DX,COM1K
    		MOV		AL,1FH
    		OUT		DX,AL
    	 	;1============================================
     		mov 	dx,DATASTART1+4 ;=3fch ;设置MCR 可能会变化的值
    		mov 	al,03h
     		out 	dx,al
     		mov 	dx,DATASTART2			;IER 屏蔽所有中断 
     		mov 	al,0
     		out 	dx,al
     
     		call 	back
     		mov 	dx,offset p1			;输出字符串
     		mov 	ah,9
     		int 	21h
			;下面是要自己写的内容2====================
			;发送部分   包括发送状态判断   读键盘输入	有输入则发送
SEND:		MOV  	DX,DATASTATE			;本机状态端口号
	        IN 		AL,DX					;读状态
			TEST   	AL,20H					;检发送器就绪 LSR中的THRE位 发总状态寄存器空
			JZ   	SEND
			MOV  	DX,DATASTARTX			;数据端口号  另一个机器的端口号  未知
			;从键盘输入字符 *表示输入结束
			MOV     AH,01H					;1号功能 带回显的字符输入
			INT		21H						;要发送的数据 已经在AL中了
			
			OUT  	DX,AL
			;2==========================================
	        cmp 	al,'*'
	        jz 		stop
	        mov 	bx,7
	        mov 	ah,14
	        int 	10h
			;下面是自己写的内容3=======================
			;接收部分
			;包括接收状态判断
			;出错状态判断
RECV:		MOV  	DX,DATASTATE			;状态端口号	 本机状态端口号
	        IN  	AL,DX					;读状态
			TEST  	AL,01H					;是否接收到数据 老师课件有错
			JZ   	RECV
			TEST  	AL,0EH					;检3个错误
			JNZ   	error 					;出错转处理
			MOV  	DX,DATASTART1			;数据端口号  	本机端口号
			IN  	AL,DX					;读数据
			;显示接收到的字符
			MOV		DL,AL
			MOV		AH,02H					;2号功能显示字符 输出DL对应的ASCII值
			INT 	21H
			;3=======================================
	        cmp 	al,'*'
	        jz 		stop
	        ;输出响铃字符
	        mov 	bx,7					;响铃字符的ASCII值
	        mov 	ah,14
	        int 	10h
	        jmp 	send					;循环发送

error:		call 	back
       		mov 	dx,offset p3
        	mov 	ah,9
        	int 	21h
        	jmp 	send
stop:		ret
       		main 	endp
;回车换行功能
back 		proc 	near
       		push 	ax
       		push 	dx
    	    mov 	dl,0dh      		;功能号:2  DL=字符的ASCII值  输出DL对应的ASCII值
     		mov 	ah,2
        	int 	21h
        	mov 	dl,0ah				;功能号:2  DL=字符的ASCII值  输出DL对应的ASCII值
        	mov 	ah,2
        	int 	21h
        	pop 	dx
	        pop 	ax
	        ret
back 		endp
code 		ends
        	end start

⌨️ 快捷键说明

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