北京交通大学 - 微机实验(5)

2019-01-12 16:39

三、源程序及注释

1、PC机RS-232串口自发自收 源程序:

DATA SEGMENT

CHL DB 0AH,0DH,'$' ;换行字符串 DATA ENDS

STACK1 SEGMENT STACK DW 100 DUP(0) STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DX,3FBH ; MOV AL,80H ;DLAB=1 OUT DX,AL

MOV AX,0CH ;N=12 BAUD=9600bps

MOV DX,3F8H ;低位 OUT DX,AL MOV AL,AH INC DX

OUT DX,AL

MOV AL,03H ;八位数据,1停止,无校验 MOV DX,3FBH ;线路控制REG

OUT DX,AL

MOV AL,0 ;屏蔽全部中断 MOV DX,3F9H

OUT DX,AL

WAIT1: MOV DX,3FDH ;读线路状态寄存器

IN AL,DX

TEST AL,1EH ;判断是否有错 JNZ ERROR

TEST AL,01H ;判断是否收到 JNZ RECEIVE

TEST AL,20H ;判断发送端是否空 JZ WAIT1

19

MOV DL,0FFH ;六号功能调用读入待发送数据 MOV AH,06H INT 21H JZ WAIT1

MOV DX,3F8H ;写发送REG

OUT DX,AL PUSH AX MOV DL,AL MOV AH,02H INT 21H JMP WAIT1

;返回 WAIT1

CHAR: PUSH AX MOV DL,AL ;显示接收

MOV AH,02H INT 21H

MOV DX,OFFSET CHL;输出字符串换行 MOV AH,09H

INT 21H

POP AX JMP WAIT1

ERROR: MOV DX,3FDH IN AL,DX MOV DL,'?' ;对于错误显示'?\

MOV AH,02H INT 21H

JMP WAIT1

RECEIVE:MOV DX,3F8H

IN AL,DX ;读数据接收寄存器 CMP AL,'!' ;判断是否结束 JNE CHAR

MOV AH,4CH INT 21H CODE ENDS END START

2、两台PC机间RS-232串口通信 发送源程序: CODE SEGMENT

ASSUME CS:CODE

20

START: MOV AL,80H ;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL

MOV AX,30H

MOV DX,3F8H

OUT DX,AL ;写入除数低字节 MOV AL,AH INC DX

OUT DX,AL ;写入除数高字节

MOV AL,0AH ;7位数据,1位停止,奇校验 MOV DX,3FBH

OUT DX,AL ;写入线路控制寄存器

MOV AL,03H

MOV DX,3FCH

OUT DX,AL ;写入Modem控制寄存器

MOV AL,0 MOV DX,3F9H

OUT DX,AL ;写中断允许寄存器,屏蔽所有中断

WAIT1: MOV DX,3FDH ;读线路状态寄存器 IN AL,DX

TEST AL,1EH ;出错否 JNZ ERROR

TEST AL,01H ;接收数据就绪否 JNZ SEND ;发送

TEST AL,20H ;发送寄存器空否,不空,返回等待 JZ WAIT1

SEND: MOV AH,1

INT 21H ;读键盘 CMP AL,21H ;是'!'?

JZ EXIT

;是,返回操作系统

MOV DX,3F8H ;不是,则发送 OUT DX,AL

JMP WAIT1 ;返回等待

ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器

21

IN AL,DX

MOV DL,'?' ;显示'?' MOV AH,02H INT 21H JMP WAIT1

EXIT: MOV AH,4CH INT 21H CODE ENDS END START

接收源程序: CODE SEGMENT

ASSUME CS:CODE

START: MOV AL,80H MOV DX,3FBH OUT DX,AL

MOV AX,30H MOV DX,3F8H

OUT DX,AL MOV AL,AH INC DX

MOV DX,3F9H

OUT DX,AL

MOV AL,0AH MOV DX,3FBH

OUT DX,AL

MOV AL,03H MOV DX,3FCH

OUT DX,AL

MOV AL,0 MOV DX,3F9H

OUT DX,AL

WAIT1: MOV DX,3FDH IN AL,DX

TEST AL,1EH JNZ ERROR

;8250初始化 ;写除数 ;写入除数低字节 ;写入除数高字节 ;写入线路控制寄存器

;写入Modem控制寄存器 ;写中断允许寄存器,屏蔽所有中断 ;读线路状态寄存器 ;出错否 22

TEST AL,01H ;接收数据就绪否

JNZ RECEIVE ;转接收

TEST AL,20H ;发送寄存器空否,不空,返回等待 JZ WAIT1

JMP WAIT1 ;均返回等待

RECEIVE: MOV DX,3F8H ;读接收数据 IN AL,DX

AND AL,01111111B ;保留位数据 CMP AL,21H ;是'!'? JNZ CHAR

MOV AH,4CH ;返回操作系统 INT 21H

CHAR: PUSH AX

MOV DL,AL

MOV AH,2 ;显示接受字符 INT 21H

POP AX

JMP WAIT1 ;返回等待

ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX

MOV DL,'?' ;显示'?' MOV AH,02H INT 21H JMP WAIT1 CODE ENDS

END START

四、总结

本次实验要编写三段程序。但是这三段程序的内容结构是大致相同的。在分析程序时也没有很大的困难。以串口自发自收为例,主要是按照顺序写控制字,然后在屏幕上显示。

23


北京交通大学 - 微机实验(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙江平原农田防护林建设技术规程试行

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: