8250A的串行异步通信实验(自发自收)实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;8250A的串行异步通信实验(自发自收)
;======================================================
; 实验连线:
; 一、译码单元
; 用若干双头实验导线对译码器输入与控制端作如下连接:
; 1.译码输入A端引入孔与地址线A3引出孔相连
; 2.译码输入B端引入孔与地址线A4引出孔相连
; 3.译码输入C端引入孔与地址线A5引出孔相连
; 4.译码控制端G引入孔与位于系统地址线A0下方的使能控制端G引出孔相连
; 二、8250串行通信单元
; 用若干双头实验导线对8250串行通信单元作如下连接:
; 1.串行接收端引入孔SIN与串行发送端SOUT引出孔相连
; 2.8250片选端引入孔/CS与译码单元输出端Y4引出孔相连
; 3.8250 时钟输入端XTAL引入孔与393分频单元T2引出孔相连
; 4.8250 A2 地址输入端引入孔与系统地址线A2引出孔相连
; 5.8250 IWR 控制信号引入孔与控制控制总线IOWR引出孔相连
; 6.8250 IRD 控制信号引入孔与控制控制总线IORD引出孔相连
; 7.8250 RESET 复位端引入孔与与位于地址线A8下方的/CLR引出孔相连
; 8.用一8芯扁平线把8250通信单元总线接口与系统总线单元任一8芯座相连
;======================================================
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 1000H
START: JMP STARS
PORT EQU 0ffe0H ;定义8250端口地址
ZXK EQU 0FFDCH ;定义字形端口地址
ZWK EQU 0FFDDH ;定义字位/键扫端口地址
zjk equ 0ffdeh ;定义键入端口地址
;======================================================
STARS: MOV BUF,08H ;DISPLAY 8250-1
MOV BUF+1,02H ;送串行收发启动标志
MOV BUF+2,05H
MOV BUF+3,00H
MOV BUF+4,14H
MOV BUF+5,01H
MOV CX,0088H
CJG: PUSH CX
CALL DIS
POP CX
LOOP CJG
;=================================
MOV AL,80H ;写线控制寄存器
MOV DX,PORT+3
OUT DX,AL
MOV AL,18H ;寄存器波特率4800
MOV DX,PORT
OUT DX,AL
MOV AL,00H ;写线控制寄存器
MOV DX,PORT+1
OUT DX,AL
MOV AL,03H ;定义8个数据位,1个停止位
MOV DX,PORT+3
OUT DX,AL
MOV AL,00H ;关中断
MOV DX,PORT+1
OUT DX,AL
;==================================
MOV BX,OFFSET BUF ;置显示缓冲区指针
MOV BUF+6,BL
MOV BUF+7,BH
;==================================
MOV BUF,
11H ;显示8250-1
MOV BUF+1,10H
MOV BUF+2,10H
MOV BUF+3,10H
MOV BUF+4,10H
MOV BUF+5,10H
;===================================
REDIKEY: CALL DISPKEY ;调显示键扫
CMP CL,10H ;判数字键还是功能键
JNC FUNCKEY ;转功能键处理
;===读取状态===
WATTXD: MOV DX,PORT+5 ;指向发送保持器
IN AL,DX
AND AL,20H
TEST AL,20H
JZ WATTXD ;若“忙”继续读取状态
;====发送键值===
MOV AL,CL
MOV DX,PORT
OUT DX,AL
;=====发送等待===
PUSH CX
MOV CX,0FFFFH ;发送等待
S50: LOOP S50
POP CX
;====读取状态=====
NEXT: MOV DX,PORT+5 ;判接收保持器
IN AL,DX
AND AL,01H
TEST AL,01H
JZ NEXT ;若“空”继续读取状态
;====读串行口数据====
MOV DX,PORT ;读串行口数据
IN AL,DX
CMP AL,CL
JZ SERI2 ;发送与接收相等转
MOV BUF,0EH ;不相等则显示ERR
MOV BUF+1,0AH
MOV BUF+2,0AH
MOV BUF+3,10H
MOV BUF+4,10H
MOV BUF+5,10H
SERERR: CALL DIS ;退出当前操作
JMP SERERR ;循环显示“ERR”
SERI2: MOV BX,OFFSET BUF+6
MOV AX,[BX]
MOV BX,AX
MOV [BX],CL ;接收值送显示缓冲区
INC AX ;调整显示指针
MOV BX,OFFSET BUF+6
CMP AX,BX
JC SERI3
MOV AX,OFFSET BUF
SERI3: MOV BUF +6,AL
MOV BUF+7,AH
JMP REDIKEY
FUNCKEY: CMP CL,1FH ;判是MON功能键否?
JNZ REDIKEY ;不是MON键循环回去
MOV BUF,09H ;显示“good”
MOV BUF+1,00H
MOV BUF+2,00H
MOV BUF+3,0DH
MOV BUF+3,10H
MOV BUF+3,10H
MONIT: CALL DIS ;退出当前操作
JMP MONIT ;循环显示“good”
;==================================================
DISPKEY: CALL DIS;调显示子程序
CALL KEY ;调键扫子程序
MOV AH,AL ;键消抖处理
MOV BX,OFFSET buF+8
MOV CX,[BX]
MOV BL,CL
MOV BH,CH
CMP AH,BH
MOV BH,AH
MOV AH,BL
JZ DISK4
MOV BL,88H
MOV AH,88H
DISK4: DEC AH
CMP AH,82H
JZ DISK6
CMP AH,0EH
JZ DISK6
CMP AH,00H
JZ DISK5
MOV AH,20H
DEC BL
JMP DISK7
DISK5: MOV AH,0FH
DISK6: MOV BL,AH
MOV AH,BH
DISK7: mov buF+8,bL
mov buF+9,bh
mov aL,ah
MOV cL,AH
RET
;==================================
LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H,0BFH
;===================================
BUF DB ?,?,?,?,?,?,?,?,?,?
;===========显示子程序=============
DIS: MOV CL,20H ;显示子程序
MOV BX,OFFSET BUF ;
DIS1: MOV AL,[BX]
PUSH BX
MOV BX,OFFSET LED
XLAT
POP BX
MOV DX,ZXK
OUT DX,AL
MOV AL,CL
MOV DX,ZWK
OUT DX,AL
PUSH CX
MOV CX,0100H
DELAY: LOOP $
POP CX
CMP CL,01H
JZ EXIT
INC BX
SHR CL,1
JMP DIS1
EXIT: MOV AL,00H
MOV DX,ZWK
OUT DX,AL
RET
;============键扫子程序==============
key: mov aL,0ffh ;关显示口
mov dx,zxk
out dx,aL
mov bL,00h
mov ah,0feh
mov cx,08h
key1: mov aL,ah
mov dx,zwk
out dx,aL
SHL AL,01H
MOV AH,AL
NOP
NOP
NOP
NOP
NOP
NOP
MOV DX,zjk
IN AL,DX
NOT AL
NOP
NOP
AND AL,0FH
JNZ KEY2
INC BL
LOOP KEY1
NKEY: MOV AL,20H
ret
KEY2: TEST AL,01H
JE KEY3
MOV AL,00H
JMP KEY6
KEY3: TEST AL,02H
JE KEY4
MOV AL,08H
JMP KEY6
KEY4: TEST AL,04H
JE KEY5
MOV AL,10H
JMP KEY6
KEY5: TEST AL,08H;
JE NKEY
MOV AL,18H
KEY6: ADD AL,BL
CMP AL,10H
JNC FKEY
mov bx,offset data
XLAT
FKEY: RET
;================================
DATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;
DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH ;
CODE ENDS
END START