|
求助-双机在串行通信方式下的近距离发送和接收的程序
[复制链接]
一、毕业论文的要求和内容
要求:
1. 掌握串行通信的基本原理。
2. 掌握RS-232的基本结构和特性。
3. 掌握8250的工作特性。
4. 掌握串行通信的硬件连接方法。
5. 查找与本课题相关的一篇外文资料,并翻译成中文。
6. 小组共同讨论,每周向指导老师汇报讨论结果。
7. 按要求完成开题报告和毕业论文.
内容:
1. 双机在串行通信方式下的近距离通信。
2. 设计硬件连接图。
3. 用C语言编写发送和接收程序。
4. 用电缆线将双机相连,并运行本程序,实现双机通信。
下面是汇编语言的程序,谁能帮我转成C语言的,越快出来越好,谢谢了
入口参数:AL=初始化参数,其格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
波特率除数 奇偶选择 停止位 数据位数
其中,D4~D0各位的定义与线路控制寄存器相对应的位定义相同,而D7~D5的各位则为波特率选择。
串口初始化的子程序
;波特率除数表 ;D7 D6 D5 波特率
BAUD_TABLE DW 1047 ;0 0 0 110
DW 768 ;0 0 1 150
DW 384 ;0 1 0 300
DW 192 ;0 1 1 600
DW 96 ;1 0 0 1200
DW 48 ;1 0 1 2400
DW 24 ;1 1 0 4800
DW 12 ;1 1 1 9600
SERIAL_INIT PROC NEAR
MOV AH,AL ;入口参数保存到AH
MOV DX,3FBH ;线路控制寄存器端口
MOV AL,80H ;置DALB=1
OUT DX,AL ;
MOV DL,AH ;获取波特率除数值
MOV CL,4 ;
ROL DL,CL ;循环左移4次,波特率除数移低4位
AND DX,0EH ;除数值乘2,存放在DX中
MOV DI,OFFSET
BAUD_TABLE
ADD DI,DX ;DI为波特率除数表索引
MOV DX,3F9H ;波特率除数高字节端口
MOV AL,CS:[DI]+1 ;
OUT DX,AL ;写入除数高字节
MOV DX,3F8H ;波特率除数低字节端口
MOV AL,CS:[DI]
OUT DX,AL ;写汝低字节
MOV DX,3FBH ;线路控制积存器端口
MOV AL,AH
AND AL,1FH ;留下数据格式参数
OUT DX,AL ;写入数据格式
MOV AL,0 ;屏蔽4种中断源类型
MVO DX,3F9H ;中断允许寄存器端口
OUT DX,AL ;采用查询I/O
RET ;正常通信,返回
SERIAL_INIT ENDP
发送一个字符子程序
;入口:AL=发送字符
SERIAL_TRAN PROC NEAR
PUSH AX ;保存入口字符(发送字符)
MOV DX,3FCH ;MODEM控制寄存器端口
MOV AL,3 ;置RST=1,DTR=1
OUT DX,AL
MOV DX,3FEH ;MODEM状态寄存器端口
MOV BH,30H ;检测CTS=1、DSR=1?
CALL TEST_SEATUS ;调用状态检测子程序
JZ TRAN_2 ;已检测到状态位,转发送
TRAN_1 POP CX
MOV AL,CL ;恢复发送字符
OR AH,80H ;为检测到状态位,置朝时错(D7=1)
JMP TRAN_3 ;返回
TRAN_2 MOV DX,3FDH ;线路状态积存器端口
MOV BH,20H ;查到保持寄存器为空?(THRE=1?)
CALL TEST_STATUS ;调用状态检测子程序
JNZ TRAN_1 ;未查到,返回Z=0,转超时错
MOV DX,3F8H ;已查到,指向白痴寄存器
POP CX ;恢复发送字符
MOV AL,CL
OUT DX,AL ;发送字符,写到保持寄存器
TRAN_3 RET ;发送结束,返回
SERIAL_TRAN ENDP
|
|