学单片机不久,基本能做流水灯、逻辑控制之类的。最近有朋友交来一个项目,上位机通过串口和单片机通讯,单片机接驱动芯片带步进电机。上位机程序由别人用VC写,给了通讯协议如下。
单片机用的是89C2051, P1.0、P1.1控制1号步进电机,P1.0输出脉冲,P1.2输出高/低电平作方向信号;P1.2、P1.3控制2号步进电机,同理是P1.2输出脉冲,P1.2输出方向信号。脉冲数和方向信号由上位机指定。
看了一些书上讲串口的内容,都是把端口的状态或是某个存储单元的内容发送及接收,对应这个项目感觉毫无头绪,主要是帧结构还不太理解,校验、响应码什么的在单片机中怎么实现?请各位老师看一下,能给个示例程序吗提供点思路吗?
步进电机控制通讯接口协议
说明:1,按照节1进行数据定义
2,串口通讯参数为:9600bps,8,1,无奇偶校验
1,通讯数据帧结构
包头标识 包长 数据 校验
0x7f Sum1 Sum2
1)每包数据以0x7f为数据开头标识;
2)“包长”为数据字段+校验字段 的数据字节长度;
3)数据通讯采用“呼叫-应答”处理模式,由上位机呼叫,下位机应答处理模式;
4)包头标识,包长字段分别为1字节长度,校验为2字节长度,数据字段长度由以下具体协议决定;
5)校验 方式为 包头标识+包长+数据字段 的求和。校验和= Sum1*256+ Sum2.
2,通讯协议(数据字段部分定义)步进电机输出
上位机请求
地址 功能码 转角方向1 转角增量1 转角方向2 转角增量2
0x01 0x02 0/1 Δ1 Δ2 0/1 Δ3 Δ4
、
说明:
1)转角方向,1-顺时针,0-逆时针
2)转角增量1=Δ1*256+Δ2; 转角增量2=Δ3*256+Δ4
转角单位为度;转角增量数据应少于300,否则下位视为无效数据
下位机响应
地址 功能码 响应码
0x01 0x01 R
说明:
响应码:0-正确完成,1-无效数据,2-校验和错