📄 sy6-8253.asm
字号:
PORT EQU 0C400H-0280H
P8253_C EQU PORT+283H;控制口
P8253_0 EQU PORT+280H;定时器0
P8251_C EQU PORT+2B9H;控制口
P8251_D EQU PORT+2B8H;数据口
DATA SEGMENT
DIS DB 0AH,0DH,'Please enter a charater:',0AH,0DH,'$'
ERRO DB 'Transport error!',0AH,0DH,'$'
ENDDD DB 'The end!',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,P8253_C ;初始化8253
MOV AL,00010110B ;工作在方式3,定时器0
OUT DX,AL
MOV DX,P8253_0
MOV AL,52 ;十进制为52,计数器初值为52
OUT DX,AL
MOV DX,P8251_C
MOV BL,3 ;8251复位
MOV AL,00
NEXT:OUT DX,AL
DEC BL
JNZ NEXT
MOV AL,01000000B
OUT DX,AL
;NOP
;NOP
MOV AL,11001110B ;设置8251工作方式异步,2个停止位,无校验,字长8,波特率因子为16
OUT DX,AL
MOV AL,00110111B ;命令启动(命令控制字)RTS ER 有效 接受允许 DTR有效 发送允许
OUT DX,AL
;NOP
;NOP
MOV DX,OFFSET DIS ;显示
MOV AH,09H
INT 21H
MOV DX,P8251_C ;发送
L1: IN AL,DX
TEST AL,01H ;是否准备好(测试D0)
JZ L1
MOV AH,01H ;输入一个字符
INT 21H
CMP AL,1BH
JZ ENDD
INC AL ;加1
MOV DX,P8251_D
OUT DX,AL
MOV DX,P8251_C ;接收
L2: IN AL,DX
TEST AL,02H ;是否准备好
JZ L2
MOV DX,P8251_D
IN AL,DX
MOV DL,AL ;接收到后输出
MOV AH,02H
INT 21H
JMP L1 ;直到输入ESC为止
ENDD: MOV DX,OFFSET ENDDD
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -