一、实验目的:
1、掌握 8251 的工作方式及应用。
2、了解有关串口通讯的知识。
二、实验内容与要求:
1. 数据信号的串行传输实验,循环向串口发送一个数,使用示波器测量 TXD 引脚上的波形,以了解串行传输的数据格式。
2.自收自发实验,将3000H起始的10个单元中的初始数据发送到串口,然后自接收并保存到4000H起始的内存单元中。
3. 双机通讯实验,本实验需要两台实验装置,其中一台作为接收机,一台作为发送机,发送机将 3000H~3009H内存单元中共10个数发送到接收机,接收机将接收到的数据直接在屏幕上输出显示。
三、实验步骤:
1.数据信号的串行传输
(1)按图连接实验接线。
(2)编写实验程序,经编译、链接无误后装入系统。
(3)运行程序,用示波器观察波形
2.自收自发实验
通过自收自发实验,可以验证硬件及软件设计,常用于自测试。具体实验步骤如下:
(1)连接实验线路。
(2)编写实验程序,编译、链接无误后装入系统。
(3)使用E命令更改4000H起始的10 个单元中的数据。
(4)运行实验程序,待程序运行停止。
(5)查看3000H起始的10 个单元中的数据,与初始化的数据进行比较,验证程序功能
3.双机通讯实验
使用两台实验装置,一台为发送机,一台为接收机,进行两机间的串行通讯。实验步骤如下:
(1)连接实验线路。
(2)为两台机器分别编写实验程序,编译、链接后装入系统。
(3)为发送机初始化发送数据。在发送机3000H~3009H内存单元写入ASCII 值:30,31,32,33,34,35,36,37,38,39 共10个数。
(4)首先运行接收机上的程序,等待接收数据,然后运行发送机上的程序,将数据发送到串口。
(5)观察接收机端屏幕上的显示是否与发送机端初始的数据相同,验证程序功能。
四、电路连接
1.数据信号的串行传输
2.自收自发实验
3.双机通讯实验
五、代码设计
1.8254的计数初值的计算
MOV AL, 0B6H ; 8254, 设置通讯时钟
MOV DX, M8254_CON
OUT DX, AL
MOV AL, 1BH
MOV DX, M8254_2
OUT DX, AL
MOV AL, 3AH
OUT DX, AL
0B6H=10 11 011 0:计数器2,先读写低字节,后读写高字节,方式3,二进制计数
2.8251方式字
MOV AL, 7EH
MOV DX, M8251_CON ; 写8251方式字
OUT DX, AL
写入8251方式字7EH=01 11 11 1 0B
3.8251控制字
MOV AL, 34H
OUT DX, AL ; 写8251控制字
写入8251控制字34H=00110110B
六、实验现象
1.数据信号的串行传输
起始位0,8位数据:10101010,由于发送的数据是从低到高,所以实际数据是01010101,即55H。无校验位。
2.自收自发实验
3.双机通讯实验
七、源代码
1.数据信号的串行传输
;==========================================================
; 文件名: A82511.ASM
; 功能描述: 研究了解串行传输的数据格式
;==========================================================
IOY0 EQU 0600H ;IOY0起始地址
IOY1 EQU 0640H ;IOY1起始地址
M8251_DATA EQU IOY0+00H*2
M8251_CON EQU IOY0+01H*2
M8254_2 EQU IOY1+02H*2
M8254_CON EQU IOY1+03H*2
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: CALL INIT
A1: CALL SEND
MOV CX, 0001H
A2: MOV AX, 0F00H
A3: DEC AX
JNZ A3
LOOP A2
JMP A1
INIT: MOV AL, 0B6H ; 8254, 设置通讯时钟
MOV DX, M8254_CON
OUT DX, AL
MOV AL, 1BH
MOV DX, M8254_2
OUT DX, AL
MOV AL, 3AH
OUT DX, AL
CALL RESET ; 对8251进行初始化
CALL DALLY
MOV AL, 7EH
MOV DX, M8251_CON ; 写8251方式字
OUT DX, AL
CALL DALLY
MOV AL, 34H
OUT DX, AL ; 写8251控制字
CALL DALLY
RET
RESET: MOV AL, 00H ; 初始化8251子程序
MOV DX, M8251_CON ; 控制寄存器
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
MOV AL, 40H
OUT DX, AL
RET
DALLY: PUSH CX
MOV CX, 5000H
A4: PUSH AX
POP AX
LOOP A4
POP CX
RET
SEND: PUSH AX
PUSH DX
MOV AL, 31H
MOV DX, M8251_CON
OUT DX, AL
MOV AL, 55H
MOV DX, M8251_DATA ; 发送数据55H
OUT DX, AL
POP DX
POP AX
RET
CODE ENDS
END START
2. 自收自发实验
;===========================================================
; 文件名: A82512.ASM
; 功能描述: 自收自发实验程序, 源地址4000H, 目的地址3000H
;===========================================================
IOY0 EQU 0600H ;IOY0起始地址
IOY1 EQU 0640H ;IOY1起始地址
M8251_DATA EQU IOY0+00H*2
M8251_CON EQU IOY0+01H*2
M8254_2 EQU IOY1+02H*2
M8254_CON EQU IOY1+03H*2
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX, 0000H
MOV DS, AX
;初始化8254,得到收发时钟
MOV AL, 0B6H
MOV DX, M8254_CON
OUT DX, AL
MOV AL, 0CH
MOV DX, M8254_2
OUT DX, AL
MOV AL, 00H
OUT DX, AL
;复位8251
CALL INIT
CALL DALLY
;8251方式字
MOV AL,7EH
MOV DX, M8251_CON
OUT DX, AL
CALL DALLY
;8251控制字
MOV AL, 34H
OUT DX, AL
CALL DALLY
MOV DI, 3000H
MOV SI, 4000H
MOV CX, 000AH
A1: MOV AL, [SI]
PUSH AX
MOV AL, 37H
MOV DX, M8251_CON
OUT DX, AL
POP AX
MOV DX, M8251_DATA
OUT DX, AL ;发送数据
MOV DX, M8251_CON
A2: IN AL, DX ;判断发送缓冲是否为空
AND AL, 01H
JZ A2
CALL DALLY
A3: IN AL, DX ;判断是否接收到数据
AND AL, 02H
JZ A3
MOV DX, M8251_DATA
IN AL, DX ;读取接收到的数据
MOV [DI], AL
INC DI
INC SI
LOOP A1
MOV AX,4C00H
INT 21H ;程序终止
INIT: MOV AL, 00H ;复位8251子程序
MOV DX, M8251_CON
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
MOV AL, 40H
OUT DX, AL
RET
DALLY: PUSH CX
MOV CX,3000H
A5: PUSH AX
POP AX
LOOP A5
POP CX
RET
CODE ENDS
END START
3.双机通讯实验
;========================================================
; 文件名: A82513.ASM
; 功能描述: 接收机接收程序
;========================================================
IOY0 EQU 0600H ;IOY0起始地址
IOY1 EQU 0640H ;IOY1起始地址
M8251_DATA EQU IOY0+00H*2
M8251_CON EQU IOY0+01H*2
M8254_2 EQU IOY1+02H*2
M8254_CON EQU IOY1+03H*2
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL, 0B6H ;初始化8254
MOV DX, M8254_CON
OUT DX, AL
MOV AL, 0CH
MOV DX, M8254_2
OUT DX, AL
MOV AL, 00H
OUT DX, AL
;CLI
CALL INIT ;复位8251
CALL DALLY
MOV AL, 7EH
MOV DX, M8251_CON
OUT DX, AL
CALL DALLY
MOV AL, 34H
OUT DX, AL
CALL DALLY
MOV AX, 0152H ;输出显示字符R
INT 10H
MOV DI, 3000H
MOV CX, 000AH
A1: MOV DX,M8251_CON
IN AL, DX
AND AL, 02H
JZ A1
MOV DX, M8251_DATA
IN AL, DX
AND AL, 7FH
MOV [DI],AL
INC DI
LOOP A1
MOV AL, 00H
MOV SI, 300AH
MOV [SI], AL
MOV AH, 06H
MOV BX, 3000H
INT 10H ;输出显示接收到的数据
;STI
A2: JMP A2
INIT: MOV AL, 00H ;复位8251子程序
MOV DX, M8251_CON
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
MOV AL, 40H
OUT DX, AL
RET
DALLY: PUSH CX
MOV CX, 3000H
A3: PUSH AX
POP AX
LOOP A3
POP CX
RET
CODE ENDS
END START
;=========================================================
; 文件名: A82514.ASM
; 功能描述: 发送机的发送程序
;=========================================================
IOY0 EQU 0600H ;IOY0起始地址
IOY1 EQU 0640H ;IOY1起始地址
M8251_DATA EQU IOY0+00H*2
M8251_CON EQU IOY0+01H*2
M8254_2 EQU IOY1+02H*2
M8254_CON EQU IOY1+03H*2
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL, 0B6H ;初始化8254, 得到收发时钟
MOV DX, M8254_CON
OUT DX, AL
MOV AL, 0CH
MOV DX, M8254_2
OUT DX, AL
MOV AL, 00H
OUT DX, AL
CALL INIT ;复位8251
CALL DALLY
MOV AL, 7EH
MOV DX, M8251_CON
OUT DX, AL ;8251方式字
CALL DALLY
MOV AL, 34H
OUT DX, AL ;8251控制字
CALL DALLY
MOV DI, 3000H
MOV CX, 000AH
A1: MOV AL, [DI]
CALL SEND
CALL DALLY
INC DI
LOOP A1
A2: JMP A2
INIT: MOV AL, 00H ;复位8251子程序
MOV DX, M8251_CON
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
OUT DX, AL
CALL DALLY
MOV AL, 40H
OUT DX, AL
RET
DALLY: PUSH CX
MOV CX, 3000H
A4: PUSH AX
POP AX
LOOP A4
POP CX
RET
SEND: PUSH DX ;数据发送子程序
PUSH AX
MOV AL, 31H
MOV DX, M8251_CON
OUT DX, AL
POP AX
MOV DX, M8251_DATA
OUT DX, AL
MOV DX, M8251_CON
A3: IN AL, DX
AND AL, 01H
JZ A3
POP DX
RET
CODE ENDS
END START