📄 sy6-2.asm
字号:
; 实验六 8251通讯实验(自发自收) SY6-2.ASM
DATA SEGMENT
DATA51 EQU 280H
CTRL51 EQU 281H
TIMER2 EQU 292H
TIMCTL EQU 293H
CLKQ4 EQU 187
CLKQ3 EQU 375
CLKQ2 EQU 750
CLKQ1 EQU 1500
CLKQ0 EQU 3000
BPS00 EQU 1200
BPS01 EQU 2400
BPS02 EQU 4800
BPS03 EQU 9600
BPS04 EQU 19200
BPS05 EQU 38400
BPS06 EQU 57600
FACTOR EQU 16
MES DB 'NOW YOU CAN PLAY A KEY ON THE CUP_KEYBOARD',0AH,0DH
DB 'IT WILL DISPLAY ON THE TERMINAL_SCREEN!!',0AH,0DH
DB 'END "#"',0AH,0DH,0AH,0DH,'$'
DATA ENDS
STAC SEGMENT PARA STACk 'STACK'
STA DB 50 DUP(?)
TOP EQU LENGTH STA
STAC ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: CALL SET
CALL INIT51
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES
MOV AH,09H
INT 21H
LOP3: MOV AH,01H
INT 21H
MOV BL,AL
MOV DX,CTRL51
LOP4: IN AL,DX
TEST AL,01H
JZ LOP3
MOV DX,DATA51
MOV AL,BL
INC AL
OUT DX,AL
MOV CX,0FFFFH
S51: LOOP S51
MOV CX,0FFFFH
S52: LOOP S52
NEXT: MOV DX,CTRL51
IN AL,DX
TEST AL,02H
JZ NEXT
NEXT1: MOV DX,DATA51
IN AL,DX
MOV DL,AL
MOV AH,02H
INT 21H
PUSH DX
MOV DL,20H
MOV AH,02H
INT 21H
POP DX
DEC DL
CMP DL,"#"
JNZ LOP3
OVER: MOV AX,4C00H
INT 21H
MAIN ENDP
INIT51 PROC NEAR
MOV DX,CTRL51
XOR AX,AX
MOV CX,03H
LOP1: CALL CHAROUT
LOOP LOP1
MOV AL,40H
CALL CHAROUT
MOV AL,4EH
CALL CHAROUT
MOV AL,27H
CALL CHAROUT
RET
CHAROUT: OUT DX,AL
PUSH CX
MOV CX,02H
LOP2: LOOP LOP2
POP CX
RET
INIT51 ENDP
SET PROC NEAR
MOV DX,0H
MOV AX,CLKQ0
MOV BX,1000
MUL BX
MOV BX,BPS05
DIV BX
MOV DX,00H
MOV BX,FACTOR
DIV BX
MOV BX,AX
MOV DX,TIMCTL
MOV AL,0B6H
OUT DX,AL
MOV DX,TIMER2
MOV AX,BX
OUT DX,AL
MOV AL,AH
OUT DX,AL
RET
SET ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -