打印
[疑难问答]

转:单片机串口通信浅谈

[复制链接]
2141|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TI佟掌柜|  楼主 | 2011-11-12 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、基础知识
1.什么是波特率?波特率又称比特率,单位bps(bit/s),指的是每秒传输的二进制位数,8个二进制位即1个字节。Rs232常用的波特率有19200、9600、4800,其中9600最常用。
2.什么是串口?
串即串行的意思,是指数据在一根数据线上按照二进制数的数位一位接一位的传输,例如要传输一个字节的数据10110010,先将最低位的0通过数据线传送过去,然后是下一位的1(两次传送时间间隔很小),依次将8位数据(1字节)传送过去。在此对比一下并口的传输方式,并就是并行的意思,就是说数据是并行传过去的,假如一个并口有8根数据线,那么它一次可以传送8位即一个字节,仍以刚才的数据为例,在某一时刻,通过并口传送此数据,那么此并口的一根线上传的是0信号,另一根是1信号,以此类推,每根线上在同一时刻传的数据不一样,这样就达到一次传送多位的目的。

初次接触的同学可能会很自然地认为并口比串口速度快,但其实不是这样的,首先,并口需要不只一根线,成本相对较高,多根线也造成线路阻抗、噪声等问题更加突出,不适合长距离传输。而串口只需两根线(一根发送,一根接收)即可完成通讯的功能,目前串口的速度以比并行端口传输速率快,rs232(即通常所说的串口)、USB、1394等都属于串口。
以下是串口的照片:

需要注意的是,串口是2排共9针(每针具体功能见下文),而我们常用的显示器接口VGA用的则是3排共15针,需要将两者区分开来。

3.什么是单片机的寄存器?
寄存器是单片机内的重要组成部分,在初学51时通过控制相应寄存器的值来告诉单片机你要使用他的什么功能。例如,我在代码中输入SCON=0x50,就告诉单片机我要使用它的串行端口,使用的是模式1(模式的讲解见下文)。

二、单片机端准备工作
1.需要用到的元器件或模块:
单片机最小系统模块×1,max232×1,10uF电容×4,串口接头×1
2.串口接头各引脚说明

3.电路图

4.代码编写Main函数开始对寄存器进行初始化操作:TMOD = 0x20;TMOD = 0x20;SCON = 0x50;SCON = 0x50;TH1 = 0xFA;或者TH1 = 0xFD;PCON = 0x80;PCON = 0x00;TR1 = 1;TR1 = 1; 发送数据代码(在程序相应位置写上):SBUF=变量;        //在相应的位置写上此代码,讲需要发送的数据先送到SBUF寄存器中while(TI==0);       //等到数据发送完再进行下一句代码TI=0;             //TI为传送结束标志,必须软件置零

三、PC机端编程(使用VB)

Private Sub Form_Load()MSComm1.Settings= "9600,n,8,1"   ' 设置波特率和发送字符格式MSComm1.CommPort= 4          ' 设置通讯串口MSComm1.InputLen= 0           ' 设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据MSComm1.InBufferSize= 512       ' 设置接收缓冲区512ByteMSComm1.InBufferCount= 0MSComm1.OutBufferSize= 512      ' 设置发送缓冲区512ByteMSComm1.OutBufferCount= 0MSComm1.RThreshold= 1          ' 每个字符到接收缓冲区都触发接收事件MSComm1.SThreshold= 1MSComm1.PortOpen= True         ' 打开串口End SubPrivate Sub MSComm1_OnComm()SelectCase MSComm1.CommEvent          ' 设置oncomm事件,读取片机内存的值Case comEvReceiveinputsignal = MSComm1.InputText13.Text = Asc(inputsignal)    ' 单片机内存的值用Text显示出Case ElseEnd Selectr =Val(Text13.Text)                     '将得到的数据赋给需要的变量,val为数值转换函数,将text内的内容转换成数值类型End Sub 如果只是对单片机串口通信功能进行测试,可从网上下载测试工具,如:comdebug.execommix.exescomv21.exe Terminal.exe,将单片机与PC通过rs232串口线连接即可测试。

四、结束语
串口通信并没有大家想像的那么困难,在熟练使用单片机的前提下,稍微看些相应的资料即可自己做出来,希望大家不要被吓到,只要努力学,这些都不会成太难的问题的。
以下附上作者写的一段源代码,实现的功能为扫描4*4键盘(编号0~9,a~f),按下键后将相应的编号通过串口传送出去。
扫描4*4键盘(编号0~9,a~f)源代码
沙发
TI过客| | 2011-11-12 21:08 | 只看该作者
初学者收益很多啊!

使用特权

评论回复
板凳
kedaxuezi| | 2013-1-31 22:50 | 只看该作者
没程序啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

113

帖子

1

粉丝