RS-232标准全双工查询方式异步串行通信

时间:2022-11-22 17:08:43 作者:壹号 字数:4094字

HUNAN CITY UNIVERSITY

微机原理与接口技术课程

设 计 报 告

设计题目: RS-232标准全双工查询方式异步串行通信 专 业: 计算机科学与技术 学生姓名: 班级学号: 分组成员: 指导教师:

2011 年12月31日

一、 设计时间

2011年12月 26日---2011年12月 30日

二、 设计地点

三、 设计目的

1.掌握MFID接口硬件开发平台的使用方法。 2.掌握基本接口电路的综合应用。

3.学习 RS-232C 标准的串行通信接口电路及串行通信收/发程序的设计原理与方法。

四、 设计小组成员

五、 指导老师

六、 设计课题

RS-232标准全双工查询方式异步串行通信(实现类似QQ聊天功能)

七、 基本思路及关键问题的解决方法

甲乙两台微机之间,按RS-232C标准协议,进行零MODEM方式,全双工串行通信。所谓全双工是双方通过各自的键盘按键发送,同时接收对方发来的字符。发送与接收的字符均在屏幕上显示。,接口电路以8251为核心,8253提供发/收时钟,8255控制8253的Gate门。按ESC键,退出采用两台MFID平台板上的串行接口电路进行硬件连接,分别编写甲乙两机各自的发送与接收程序,并进行调试,直至程序正常运行。

八、 算法及流程图

(一)流程图

空操作 内部复位 方式命令 工作命令 返回 计数初值计算 8253-5初始化 计数初值装入 返回 (a) 开始 (b)

计数初值计算与装入

8251初始化 返回DOS 结束 是ESC键? N 显示发送字符 N TxRDY=1? 关闭8253 Y 是ESC键? N Y Y 打开8253 查键盘 N N 有键按下? RxRDY=1? 接收准备好? Y 接收一个字符 显示接收字符 发送准备好? Y 发送1个字符 全双工查询方式串行通信

(c)

(二)原理框图

九、 调试过程出现的问题及相应的解决方法

问题一:双方通信不成功,或者只有一方能够接受,另一方不能收到信息。 解决方法:检验双方的波特率设置,看是否相同。要达到双方的波特率相同才能够进行相互通信。

问题二:双方发送均不成功。

解决方法:仔细检查通信线路的连接情况。要保证每一条线的连接的正确性,同时也要保证双方的波特率设置一致。

十、 课程设计心得体会

由于我C语言学的不好,我组的其他两个成员让我负责本实验中用到编写程序很简单的8255模块以及整理实验报告。通过参考课本以及老师以前所教过的内容,找出8255的初始化以及8255的控制字的设置。初始化8255: outportb(0x303,0x80),将PC6设置为1:utportb(0x303,0x0d)。

虽然,我的组员让我负责最简单的模块,但是整个过程中他们也耐心地给我讲解了8253和8251的功能,通过这次试验我更加深刻地理解了

8255、8253、8251这三个芯片的工作原理,同时也体会到团体的配合的重要性,感谢老师给我这次与他人合作的机会和也非常感谢我的组员对我的帮助。

十一、 源程序参考文献

#include #include #include

#define factor 16 //波特率因子16 unsigned long int clk = 1919828; void main() {

while(1)

outportb(0x303,0x80);

//初始化8255

outportb(0x303,0x0d); //pc6=1 outportb(0x309,0x00); outportb(0x309,0x40); outportb(0x309,0x4e); outportb(0x309,0x27);

//复位控制口 //复位

//初始化方式控制字 //初始化命令控制字

outportb(0x307,0xb6);//初始化8253

outportb(0x306,sendlow);//装计数初值低字节 outportb(0x306,sendhigh);//装计数初值高字节 int send,recv,status,hel; int sendhigh,sendlow;

…… 此处隐藏0字 ……

hel=clk/600; //8253计数初值计算与装入 hel=hel/factor; //计算计数初值

sendhigh = (hel>>8)&0x00ff;//装入高8位 sendlow = hel & 0x00ff;//装入低8位