|
凌阳61单片机与外设串口通信,我有一个模块定义的协议如下文,请哪位高手帮我用C代码实现一下,谢谢!
[复制链接]
NIBP 模块接口协议
数值计算:计算得到 收缩压,平均压,舒张压,脉率 。
1、物理特性
串行通讯方式:4800波特率
8个数据位
1个停止位
无校验
无附加握手信号线(3线串口)
2、主机到模块通讯
一个命令帧为8个字符结构:
ab;;cd
其中:是文本起始字符的ASCⅡ码(02)
′ab′是定义为01-27的命令字符的2位ASCⅡ码
′cd′是定义为0-9,A-F的16进制校验和的2位ASCⅡ码
是文本结束字符的ASCⅡ码(03)
例如:02;;D8 发送命令2
主机到模块命令表
注意: 除了ABORT命令,其它命令在测量过程中均可接受,在压力计模式和电磁阀测试时被忽略。命令字串的发送间隔最少应保持50ms以上。测量及电磁阀检测会在完成后自动结束。
命令 校验和 功能
01 D7 启动测量——该命令开始一个测量周期,不同于STAT模式,该命令将初始化一个测量。
18 DF 请求数据(对状态报告帧的响应)
ABORT:
在任何时候收到单字符‘X’将会引起模式ABORT所有动作,袖带放气、系统静止。
3、模块到主机通讯
注:压力单位为mmHg,脉率单位为BPM
有三种数据帧格式发送给主机:
(1)实时袖带压报告(rcpt)
当模块在测量模式、压力计模式、电磁阀测试模式中时,以每秒5次的发生频率发生。
(2)结束提示
(3)状态报告
只会在启动及收到数据请求命令(18)后才发送。
3.1格式1:rtcp报告
帧结构为:abcCdse
其中:、同上所述,为回车的ASCⅡ码(13)
‘abc’对应于当前袖带压的3位ASCⅡ码数字
‘d’是一位ASCⅡ码数字,用于表示袖带压错误,模块监视充气的速率,并向主机报告
早期警告标志。该位只在测量期有效,并以下值:
‘0’——正常测量及作测量时
‘1’——在成人模式中检测到婴儿袖带
‘e’是一位ASCⅡ码数字,表示模式/状态报告,它可以是以下几个值:
‘3’——测量期间
‘4’——血压计模式期间
‘5’——看门测试期间
‘7’——电磁阀检测期间
例如:035C0S3
3.2格式2:结束提示
帧结构为:999
表示rtcp已经结束,模块进入静止状态(手动模式或者下次测量倒计时结束之前的自动模式)
3.3格式3:状态报告
帧结构为:
Sa;Ab;Ccd;Mef;Pghijklmno;Rpqr;Tstuv;;wx
其中:
‘a’是一位ASCⅡ码数字,给出状态:
0 自检(只是启动信息)
1 无错误,自启动定时器没有运作
2 有错误发生
6 无错误,自启动定时器运作
‘b’是一位ASCⅡ码数字,给出病人模式
0 成人
1 婴儿
‘cd’是两位ASCⅡ码数字,给出周期测量模式
00 非自动周期(手动)
01-90 选择的自动周期测量间隔
99 STAT模式
‘ef’是两位ASCⅡ码数字,给出错误信息:
注:在模块复位后,‘ef’给出软件版本号
‘ghi’是3位ASCⅡ码数字,表示收缩压
‘jkl’是3位ASCⅡ码数字,表示舒张压
‘mno’是3位ASCⅡ码数字,表示平均动脉压(MAP)
‘pqr’ 是3位ASCⅡ码数字,表示脉率
如果最后一次测量不成功,3位数字中的一个或多个将表示为--破折号,例如:“123---98;R104”
表示血压为123/---mmHg,MAP为98mmHg,脉率为104BPM。
‘stuv’是4位ASCⅡ码数字,表示在自动周期测量中到下一次开始测量的剩余时间,单位为秒。如不是在自动周期测量模式,则这4位为空格。
‘wx’为2位ASCⅡ码16进制字符(0-9,A-F),表示在帧结构中前面可有字符的校验和(除了)
例如:S1;A0;C03;M00;P---015025;R---;T ;;D2
6、注意事项:(当检测到时可以忽略)
在复位后,模块在8秒内发出一个状态报告帧,格式为:
Sa;Ab;Ccd;Mef;P---------;R---;T ;;wx
其中:‘a’、‘b’、‘cd’为零
‘ef’固定值
‘wx’是本帧的校验和
模块可能会被查询(命令18)一个状态信息以确定复位是否成功。在返回的字符串中,‘a’
表示状态(0-ok,2-失败),‘ef’表示失败的原因。
当一个错误发生时,STAT模式可以在5分钟的时间窗没有结束时,在被中断的周期点恢复,只需简单地发送一个启动命令(01)给模块。
例如:(以下为串口通讯时的监视数据,为十六进制)
发送命令:(通常两个命令连续发送,注意命令至少间隔50ms):
02 30 31 3B 3B 44 37 03 //ab;;cd
Stx 0 1 ; ; D 7 Etx //发送开始命令01 及校验和 D7
02 31 38 3B 3B 44 46 03
Stx 1 8 ; ; D 6 Etx //发送数据请求命令18 及校验和 D6
接收到的数据:
02 30 34 37 43 30 53 33 03 0d //abcCdse 格式1 Stx 0 4 7 C 0 S 3 Etx CR
02 39 39 39 03 0d //999 格式2
Stx 9 9 9 Etx CR
S1;A0;C03;M00;P---015025;R---;T ;;D2 //格式3
停止命令:
02 58 03
Stx x Etx //发送停止命令(abort) x
即控制内容:开始测量,停止测量,
显示内容:平均压,收缩压,舒张压,心率,测量过程中的实时压力。
|
|