📄 12_8251.asm
字号:
;************************************************************
;文件名: 8251 FOR 8088
;功能: 8251可编程串行口与PC机通信实验
;接线: 用导线连接CPU模块中的CS8251接200H,
; CPU模块中的232RXD接至ERXD,232TXD接至ETXD。
;//**********************************************************
Z8279 EQU 239H
D8279 EQU 238H
D8251 EQU 200H
Z8251 EQU 202H
LEDMOD EQU 00H ;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址
READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE
START:
push cs
pop ds
MOV CX,100
LOOP $
CALL INIT8279
CALL INIT8251
WAIT0:
MOV DX,Z8251
IN AL,DX ;有数据送到吗?
AND AL,02h
JZ WAIT1 ;没有数据送到则跳转至发送
JMP DIS_REC
WAIT1:
CALL GETKEY
CMP AL,0FFH
JNZ WAIT0
MOV CX,10
LOOP $
MOV DX,Z8251
WAIT3:
IN AL,DX
AND AL,01H
JZ WAIT3 ;发送缓冲器不空则等待
MOV AL,BL ;无键按下则跳回"接收"处
MOV DX,D8251 ;有键按下则发送相应字符
OUT DX,AL
NOP
MOV DX,Z8251
WAIT2:
IN AL,DX
AND AL,01h
JZ WAIT2 ;发送缓冲器不空则等待
JMP WAIT0
DIS_REC:
MOV DX,D8251
IN AL,DX
SUB AL,30H
JC ERROR
SUB AL,0AH
JNC DIS_REC1
ADD AL,0AH
JMP DIS_REC2
DIS_REC1:
SUB AL,7H
JC ERROR
SUB AL,6H
JNC ERROR
ADD AL,10H
DIS_REC2:
MOV CH,0
MOV CL,AL
CALL DISLED
ERROR:
JMP WAIT0
DISLED PROC NEAR
PUSH AX
PUSH DX
MOV AL,LEDWR0
ADD AL,CH
MOV DX,Z8279
OUT DX,AL
LEA BX,LEDSEG
MOV AL,CL
XLAT
MOV DX,D8279
OUT DX,AL
POP dx
POP aX
RET
DISLED ENDP
INIT8251 PROC NEAR
PUSH CX
MOV DX,Z8251 ;初始化8251
MOV AL,4EH
OUT DX,AL
MOV DX,Z8251 ;初始化8251
MOV AL,25H
OUT DX,AL
MOV DX,Z8251 ;初始化8251
MOV AL,65H
OUT DX,AL
MOV CX,100
LOOP $
MOV AL,04EH ;设置为8个数据位,1个停止位波特率因子为16
OUT DX,AL ;无奇偶校验位
MOV CX,100
LOOP $
MOV AL,25H ;设为请求发送,允许发送,允许接收状态
OUT DX,AL
MOV CX,100
LOOP $
POP CX
RET
INIT8251 ENDP
INIT8279 PROC NEAR
PUSH DX
PUSH AX
MOV DX,Z8279
MOV AL,LEDMOD
OUT DX,AL
MOV AL,LEDFEQ
OUT DX,AL
MOV AL,LEDCLS
OUT DX,AL
CALL DELAY
POP AX
POP DX
RET
INIT8279 ENDP
GETKEY PROC NEAR
PUSH DX
PUSH CX
MOV DX,Z8279
IN AL,DX
AND AL,07H
JNZ GETVAL
MOV AL,0
JMP NKBHIT
GETVAL:
MOV AL,READKB
OUT DX,AL
MOV DX,D8279
IN AL,DX
AND AL,3FH
MOV CH,AL
LEA BX,KEYCODE
XLAT
MOV BL,AL
MOV AL,LEDWR0
MOV DX,Z8279
OUT DX,AL
PUSH BX
LEA BX,LEDSEG
MOV AL,CH
XLAT
MOV DX,D8279
OUT DX,AL
POP BX
MOV AL,0FFH
NKBHIT:
POP CX
POP DX
RET
GETKEY ENDP
delay proc near
push cx
mov cx,0FFFFh
loop $
pop cx
ret
delay endp
;LED显示常数表
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
;键盘键码表
KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'
DB 38H,39H,41H,42H,43H,44H,45H,46H ;'8,9,A,B,C,D,E,F'
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -