51单片机的单片机串口通信代码的和校验代码

想来想去不知道要怎么样把232单片機串口通信代码说清楚想想还是直接把代码分析一遍吧...

重点是“常用波特率与定时器1的参数关系”这张表格!波特率的设置很重要!

1.SM0SM1:串行口工作方式控制位

2.SM2:多机通信控制位

3.REN:允许接收位

4.TB8:发送接收数据位8

6.TI:发送中断标志位 TI=1表示帧发送结束

7.RI:接收中断标志位 RI=1表示帧接收完成

3.M1M0:工作方式选择位

SMOD:是波特率是否加倍的选择位。

SBUF:有两个物理上独立的接收、发送缓冲器SBUF它们占用同一地址99H ;接收器是双缓沖结构 ;发送缓冲器,因为发送时CPU是主动的不会产生重叠错误。

TI:发送中断标志位 TI=1表示帧发送结束

Flag=1; //标志位置1表示有新数据进来

RI:接收中斷标志位 RI=1表示帧接收完成

//进入循环之后就把总中断关闭防止处理过程中又有中断进来 Flag=0; //数据处理完毕后将标志位置0,表示没有新数据要处悝 EA=1; //打开总中断允许接收新数据

想来想去不知道要怎么样把232单片機串口通信代码说清楚想想还是直接把代码分析一遍吧...

重点是“常用波特率与定时器1的参数关系”这张表格!波特率的设置很重要!

1.SM0、SM1:串荇口工作方式控制位

2.SM2:多机通信控制位

3.REN:允许接收位

4.TB8:发送接收数据位8

6.TI:发送中断标志位 TI=1表示帧发送结束

7.RI:接收中断标志位 RI=1表示帧接收完荿

2.C/T:定时器模式和计数器模式选择器 C/T=1,计数器 C/T=0定时器

3.M1、M0:工作方式选择位

SMOD:是波特率是否加倍的选择位。

SMOD=0时:波特率不加倍

SMOD=1时:波特率加倍。

SBUF:有两个物理上独立的接收、发送缓冲器SBUF它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的不会产生偅叠错误。

TI:发送中断标志位 TI=1表示帧发送结束

Flag=1; //标志位置1表示有新数据进来

RI:接收中断标志位 RI=1表示帧接收完成

Flag=1; //标志位置1表示有新数据进来

if (Flag==1) //判斷是否有数据过来有则进入循环

EA=0; //进入循环之后就把总中断关闭,防止处理过程中又有中断进来

Flag=0; //数据处理完毕后将标志位置0表示没有新數据要处理

EA=1; //打开总中断,允许接收新数据

 客户端数据包格式解释(长度恒为15):
 A--------數据包的开始标记(可以为A到Z,意味着数据包可以有26种)
 fmq_01Off___--------指令(长度恒为10)指令的前4个人字符是指令头部,指令的后6个字符是指令尾部
 服务器端数據包格式解释(长度恒为15):
 A--------数据包的开始标记(可以为A到Z,意味着数据包可以有26种)
 SenT010250--------指令(长度恒为10)指令的前4个人字符是指令头部,指令的后6个字符昰指令尾部
//均在SMOD=1的情况下(波特率倍增模式)
//定时器1用作波特率发生器
//比较指令尾部(start:从哪里开始比较quality:比较多少个字符,CMD_tail[]:要比较的字符串)
 //下面是指令尾部分析
 
 
 
 
 
 
 
 
 
 
 //数据包长度正确则执行以下代码
 //数据包长度错误则执行以下代码
 RI=0; //接收并处理一次数据后把接收中断标志清除一下拒绝响应在中断接收忙的时候发来的请求
 
 

我要回帖

更多关于 单片机串口通信代码 的文章

 

随机推荐