两台 PC 机之间的串口通信
来源:互联网 发布:linux怎么写shell脚本 编辑:程序博客网 时间:2024/05/19 14:39
两台 PC 通过串口进行数据传输,早有这方面的例程。
但是接收键盘操作,到对方的屏幕上进行显示,却不常见。
当然,现在的 QQ 聊天,已经司空见惯,但是当年,使用串口聊天,则是微机原理初学者的一个大难题。
做而论道多年前就编写出了这种程序,并且自己焊接了串口通信电缆,实验大获成功。
网上有个问题:http://zhidao.baidu.com/question/250153413.html
问到了这方面的问题,于是做而论道就把以前编写的程序,翻腾了出来,但愿对网友有所启示。
下面就是“收”、“发”两个程序。
;============================================================
; 程序名:
; 说明: 232接口通信(发送部分)
; 利用 PC 机串行口进行通信
; 本程序使用串行口2,需要外接 RS-232 电缆
;**************************************************;2K 堆栈区
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP('STACK ')
STACK ENDS
;**************************************************;数据区
DATA SEGMENT PARA PUBLIC 'DATA'
MSG DB 0DH,0AH,0DH,0AH,0DH,0AH
DB ' +----------------+ +----------------+',0DH,0AH
DB ' | How do | | How do |',0DH,0AH
DB ' | you do ? | | you do ? |',0DH,0AH
DB ' | | | |',0DH,0AH
DB ' | bye ! | | bye ! |',0DH,0AH
DB ' +----------------+ +----------------+',0DH,0AH
DB ' | | | | ',0DH,0AH
DB ' +--------------------+ +--------------------+',0DH,0AH
DB ' | | -->->->-> | |',0DH,0AH
DB ' +--------------------+ +--------------------+',0DH,0AH
DB 0DH,0AH
DB ' This program let you TRANSMIT character to other computer.',0DH,0AH
DB 0DH,0AH,0DH,0AH
DB ' Copyright 2000-2003 by All Rights Reserved',0DH,0AH
DB 0DH,0AH
DB ' Press ESC to finish this program.',0DH,0AH
DB 0DH,0AH
DB 'Please input : $'
DATA ENDS
;**************************************************;代码区
CODE SEGMENT PARA PUBLIC 'CODE'
;_________________________________________________________
;主程序区
MAIN PROC FAR ;主过程
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA
START: PUSH DS
MOV AX, 00H
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV DX, OFFSET MSG ;显示提示信息
MOV AH, 9
INT 21H
CALL INITOUT ;初始化串行口
K_IN:
MOV AH, 7
INT 21H ;接受键盘输入,不显示
CMP AL, 1BH
JZ EXIT_SEN ;ESC退出
MOV BL, AL
MOV DL, AL
MOV AH, 2
INT 21H ;显示刚输入的字符
CMP BL, 0DH
JNZ FASONG ;如果不是'回车符',转发送
MOV DL, 0DH ;如是则回车换行
MOV AH, 2
INT 21H ;显示回车符
MOV DL, 0AH
MOV AH, 2
INT 21H ;显示换行符
FASONG:
MOV AL, BL
MOV DX, 2F8H
OUT DX, AL ;发送数据
_WAIT1:
MOV DX, 2FDH ;取线路状态寄存器
IN AL, DX
TEST AL, 20H ;测试 D5,为 1 则发送完毕
JZ _WAIT1
JMP K_IN
EXIT_SEN:
MOV DX, 2F8H
MOV AL, 03H
OUT DX, AL ;发送本文结束符
MOV AX, 4C00H ;程序结束
INT 21H
MAIN ENDP
;_________________________________________________________
;子程序区
INITOUT PROC NEAR
MOV DX, 2FBH
MOV AL, 80H ;设置写波特率除数锁存器
OUT DX, AL
MOV DX, 2F8H
MOV AL, 80H
OUT DX, AL
MOV DX, 2F9H
MOV AL, 01H ;除数 = 0180H, 波特率 = 600
OUT DX, AL
MOV DX, 2FBH ;设定数据格式
MOV AL, 0AH ;奇校验、1位停止位、7位数据位
OUT DX, AL
MOV DX, 2FCH ;设置 MODEN控制寄存器
; MOV AL, 1FH ;1FH令8250进行回送, 调试用
MOV AL, 0FH ;0FH令8250进行不回送, 通信用
OUT DX, AL
MOV DX, 2F9H ;设置中断允许寄存器
MOV AL, 00H ;禁止所有中断
OUT DX, AL
RET
INITOUT ENDP
;_________________________________________________________
CODE ENDS
END START
;============================================================
; 程序名:
; 说明: 232接口通信(接收部分)
; 利用 PC 机串行口进行通信
; 本程序使用串行口2,需要外接 RS-232 电缆
;**************************************************;2K 堆栈区
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP('STACK ')
STACK ENDS
;**************************************************;数据区
DATA SEGMENT PARA PUBLIC 'DATA'
MSG DB 0DH,0AH,0DH,0AH,0DH,0AH
DB ' +----------------+ +----------------+',0DH,0AH
DB ' | How do | | How do |',0DH,0AH
DB ' | you do ? | | you do ? |',0DH,0AH
DB ' | | | |',0DH,0AH
DB ' | bye ! | | bye ! |',0DH,0AH
DB ' +----------------+ +----------------+',0DH,0AH
DB ' | | | | ',0DH,0AH
DB ' +--------------------+ +--------------------+',0DH,0AH
DB ' | | -->->->-> | |',0DH,0AH
DB ' +--------------------+ +--------------------+',0DH,0AH
DB 0DH,0AH
DB ' This program let you RECEIVE character to other computer.',0DH,0AH
DB 0DH,0AH,0DH,0AH
DB ' Copyright 2000-2003 by All Rights Reserved',0DH,0AH
DB 0DH,0AH
DB ' Press ESC to finish this program.',0DH,0AH
DB 0DH,0AH
DB 'Please input : $'
DATA ENDS
;**************************************************;代码区
CODE SEGMENT PARA PUBLIC 'CODE'
;_________________________________________________________
;主程序区
MAIN PROC FAR ;主过程
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA
START: PUSH DS
MOV AX, 00H
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV DX, OFFSET MSG ;显示提示信息
MOV AH, 9
INT 21H
CALL INITOUT ;初始化串行口
_WAIT2:
MOV AH, 6 ;检查键盘输入(不等待)
MOV DL, 0FFH
INT 21H
CMP AL, 1BH ;是否 ESC
JZ EXIT_S ;是则转到结束
MOV DX, 2FDH ;取线路状态寄存器
IN AL, DX
TEST AL, 01H ;测试 D1, 为 1 则接收完毕
JZ _WAIT2
MOV DX, 2F8H
IN AL, DX ;取来数据
MOV BL, AL ;暂时存放
CMP BL, 03H ;检查是否结束符
JZ EXIT_S ;是则转到结束
MOV DL, AL ;显示数据
MOV AH, 2
INT 21H
CMP BL, 0DH
JNZ _WAIT2 ;如果不是'回车符', 转继续
MOV DL, 0DH ;如是则回车换行
MOV AH, 2
INT 21H ;显示回车符
MOV DL, 0AH
MOV AH, 2
INT 21H ;显示换行符
JMP _WAIT2 ;转继续等待
EXIT_S:
MOV AX, 4C00H ;程序结束
INT 21H
RET
MAIN ENDP
;_________________________________________________________
;子程序区
INITOUT PROC NEAR
MOV DX, 2FBH
MOV AL, 80H ;设置写波特率除数锁存器
OUT DX, AL
MOV DX, 2F8H
MOV AL, 80H
OUT DX, AL
MOV DX, 2F9H
MOV AL, 01H ;除数 = 0180H, 波特率 = 600
OUT DX, AL
MOV DX, 2FBH ;设定数据格式
MOV AL, 0AH ;奇校验、1位停止位、7位数据位
OUT DX, AL
MOV DX, 2FCH ;设置 MODEN控制寄存器
; MOV AL, 1FH ;1FH令8250进行回送, 调试用
MOV AL, 0FH ;0FH令8250进行不回送, 通信用
OUT DX, AL
MOV DX, 2F9H ;设置中断允许寄存器
MOV AL, 00H ;禁止所有中断
OUT DX, AL
RET
INITOUT ENDP
;_________________________________________________________
CODE ENDS
END START
;============================================================
百度空间的字体、排版真不敢恭维,格式全乱了。
复制出去,到记事本中查看,格式就整齐了。
- 两台 PC 机之间的串口通信
- 怎样用vc实现pc机之间的串口通信
- 用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- 用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- (转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- 用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- java socket 进行两台PC之间的文件传输
- PC机串口通信的工作原理
- PC机串口通信的工作原理
- 不同内网的两台主机之间的通信
- 练习:模拟实现两台计算机之间的通信
- 两台windows之间MQ中间消息件的通信
- java socket 进行两台计算机之间的通信
- 两台电脑上的虚拟机之间相互通信
- PC机之间通信
- 单片机与PC机之间的通信
- PC机串口通信工具
- 用网线直连的两台PC上的虚拟机通过网线通信的配置
- 【cocos3.x+box2d+tileMap】制作马里奥游戏(三)创世纪
- 日本发生9级地震与海啸
- MCS-51 单片机的存储器地址空间如何划分?
- IOS8 新增的UIVisualEffectView 使用
- 51单片机的中断控制
- 两台 PC 机之间的串口通信
- 用C语言编写程序,判断输入的一个字符串是否是回数
- 数据键入与排序程序--80x86汇编语言
- 数码管动态显示 汇编 60进制
- 基于51单片机的交通灯C语言程序设计
- 51单片机利用74HC595驱动数码管
- 按键控制移位显示
- 用汇编语言编写查表程序
- #UML#UML类图