一、基础知识 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.exe,commix.exe,scomv21.exe ,Terminal.exe,将单片机与PC通过rs232串口线连接即可测试。
四、结束语 串口通信并没有大家想像的那么困难,在熟练使用单片机的前提下,稍微看些相应的资料即可自己做出来,希望大家不要被吓到,只要努力学,这些都不会成太难的问题的。 以下附上作者写的一段源代码,实现的功能为扫描4*4键盘(编号0~9,a~f),按下键后将相应的编号通过串口传送出去。 扫描4*4键盘(编号0~9,a~f)源代码 |