📄 sendbytetoserialport.asm
字号:
; THIS PROGRAM INITIALIZES THE PORT COM1 TO
; 8-BIT DATA, NO PARITY, AND 1-BIT STOP.
; IT THEN SENDS A BYTE (0f0H) TO THE TX LINE OF THE PORT COM1
; AND WAITS FOR ANY KEY PRESS TO EXIT THE PROGRAM NORMALLY
STK SEGMENT PARA STACK
DB 2048 DUP (?)
STK ENDS
DATA SEGMENT
XMSG DB 'PRESS ANY KEY TO EXIT ...',0DH,0AH,'$'
DPT EQU 03F8H ;03F8H = COM1, 02F8H = COM2, 03E8H=COM3
MCR EQU 03FCH
LSR EQU 03FDH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STK
START: MOV AX, STK
MOV SS, AX
MOV AX, DATA ;SET UP DATA SEGMENT
MOV DS, AX
MOV DX, MCR ;DE-ACTIVATE THE HAND-SHAKING SIGNALS
MOV AL, 00H
OUT DX, AL
LEA DX, XMSG ;SET UP POINT TO OUTPUT EXIT MESSAGE
MOV AH, 9 ;DISPLAY STRING FUNCTION
INT 21H ;DOS CALL
INIT: MOV AH, 0H
MOV DX, 0H ;COM1=0, COM2=1, COM3=2, COM4=3
MOV AL, 0E3H ;INITIALIZE PORT 8-B DATA, NO PARITY
INT 14H ;ONE STOP, 9600 BAUD.
MOV DX, MCR ; ACTIVATE THE HAND-SHAKING SIGNALS
MOV AL, 03H
OUT DX, AL
COM3: MOV DX, LSR ;SET UP LINE STATUS REGISTER PORT ADDRESS
MORE: MOV AH, 0BH ;CHECK STD INPUT (KEYBOARD) STATUS
INT 21H
CMP AL, 0FFH ;HAS ANY KEY BEEN PRESSED?
JZ EXIT
MOV AX, 0F0H ;0ABH IS THE BYTE TO BE SENT TO COM1
; YOU CAN CHANGE IT TO ANY VALUE
PUSH AX ;SAVE CHARACTER
WAIT1: IN AL, DX ;READ UART STATUS
TEST AL, 20H ;CHECK TRANSMITTER READY BIT - BIT5
JZ WAIT1
MOV DX, DPT ;SET UP DATA PORT ADDRESS
POP AX ;GET CHARACTER BACK
OUT DX, AL ;OUTPUT IT
JMP COM3
EXIT: MOV DX, MCR ;DE-ACTIVATE THE HAND-SHAKING SIGNALS
MOV AL, 00H
OUT DX, AL
MOV AH, 4CH ;TERMINATE PROGRAM FUNCTION
INT 21H ;DOS CALL
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -