当前位置:文档之家› 串行通信实验16550

串行通信实验16550

(一)实验名称
串行通信实验16550
(二)实验内容
1)串行通讯基础实验。

编写程序,向串口连续发送一个数据(55H),将串口输出连
接到示波器上,用示波器观察数据输出产生的波形。

2)串口自发自收应用实验。

编写程序,将一串数据发送至串口,再接收回来显示。

(三)实验目的
1)学习和掌握有关串行通信的知识
2)学习和体会16550的工作原理、工作方式,利用其进行应用编程
3)学习和掌握PC机串口的操作方法
(四)实验日期、时间和地点
2011—1—4 6,7节
2011-1-7 1,节
微机高级实验室
(五)实验环境(说明实验用的软硬件环境及调试软件)
PC机一台,PIT-B实验箱一套,TDPIT、td-debug软件环境一套
(六)实验步骤(只写主要操作步骤,要简明扼要,还应该画出程序流程图或实验电路的具体连接图)
一:
二:自发自收
(七)实验结果(经调试通过的源程序的所有代码,应包含必要的说明文字)
MY_03F8 EQU 0E480H
MY_03FB EQU 0E483H
MY_03FD EQU 0E485H
DATAS SEGMENT
NUM DB 55H;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
DW 10 DUP(0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;初始化16550
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,80H ;置DLAB=1,设置除数寄存器
OUT DX,AL
CALL DALLY
MOV DX,MY_03F8 ;除数寄存器地址送DX
MOV AX,03C0H ;波特率为1200bit/s
OUT DX,AL
CALL DALLY
MOV AL,AH
INC DX
OUT DX,AL
CALL DALLY
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,0BH ;8位数据位,奇校验,1位停止位
OUT DX,AL
CALL DALLY
CALL GO
MOV AH,4CH
INT 21H
GO PROC NEAR
LOP1:
MOV DX,MY_03FD ;通信状态寄存器地址送DX
IN AL,DX
CALL DALLY
TEST AL,20H ;检测发送器是否准备就绪 JZ LOP1
LOP2:
MOV DX,MY_03F8
MOV AL,NUM
OUT DX,AL
CALL DALLY
CALL BREAK
JMP LOP2
RET
GO ENDP
DALLY PROC NEAR
PUSH CX
PUSH AX
MOV CX,0100H
D1: MOV AX,1000H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:RET
BREAK ENDP
CODES ENDS
END START
二:自发自收
MY_03F8 EQU 0E480H
MY_03FB EQU 0E483H
MY_03FD EQU 0E485H
MY_03FC EQU 0E48CH
DATAS SEGMENT
STR1 DB'this is good'
LEN EQU $-STR1
STR2 DB 20 DUP (0),'$';此处输入数据段代码DATAS ENDS
STACKS SEGMENT
DW 10 DUP (0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
;初始化16550
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,80H ;置DLAB=1,设置除数寄存器
OUT DX,AL
CALL DALLY
MOV DX,MY_03F8 ;除数寄存器地址送DX
MOV AX,03C0H ;波特率为1200bit/s
OUT DX,AL
CALL DALLY
MOV AL,AH
INC DX
OUT DX,AL
CALL DALLY
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,1BH ;8位数据位,奇校验,1位停止位
OUT DX,AL
CALL DALLY
MOV DX,MY_03FC
MOV AL,03H
OUT DX,AL
CALL DALLY
CALL GO
LEA DX,STR2 ;显示str2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
GO PROC NEAR
LEA BX,STR1
LEA DI,STR2
MOV CX,LEN
INC CX
LOP1:
DEC CX
JZ DONE
LOP2:
MOV DX,MY_03FD
IN AL,DX
TEST AL,20H ;测试发送是否就绪
JZ LOP2
MOV DX,MY_03F8
MOV AL,[BX] ;取出发送区域的待发送数据 OUT DX,AL
LOP3:
MOV DX,MY_03FD
IN AL,DX
TEST AL,1EH ;数据是否有错误
JNZ ERROR ;跳转错误处理
TEST AL,01H ;查看接受缓存器是否有信息 JZ LOP3
MOV DX,MY_03F8
IN AL,DX
MOV [DI],AL
INC BX
INC DI
JMP LOP1
CLC ;接收成功,清CY标志位JMP DONE
ERROR:
STC ;接收不成功,置CY标志位DONE:
RET
GO ENDP
DALLY: PUSH CX
PUSH AX
MOV CX,0100H
D1: MOV AX,2000H
D2: DEC AX
JNZ D2 LOOP D1
POP AX
POP CX RET
CODES ENDS
END START。

相关主题