例9:一个字节有8位,其实可以用1个字节传输8个灯的开关状态
注意
每个页面仅建议在一个定时器中读取串口缓冲区的数据,在多个定时器中读取串口缓冲区的数据容易照成逻辑混乱。
新建一个空白工程
在工程中新建一个定时器tmDecode,tim设置为50,en设置为1,用于定时解析串口数据
新建数字控件n1,n2,n3,n4,用于显示解析出来的数据
假设串口屏获取4个led灯的开关状态,串口屏需要解析的参数为灯的状态(开或关)
注意
16进制发送时,可以忽略大小写,ff和FF是一样的,AA和aa是一样的,但是请不要写成Ff,Ab这样大小写混用
0F //二进制为:00001111,含义:后4位表示4个灯状态分别为:开、开、开、开
00 //二进制为:00000000,含义:后4位表示4个灯状态分别为:关、关、关、关
05 //二进制为:00000101,含义:后4位表示4个灯状态分别为:关、开、关、开
0A //二进制为:00001010,含义:后4位表示4个灯状态分别为:开、关、开、关
program.s中的配置如图所示
//以下代码只在上电时运行一次,一般用于全局变量定义和上电初始化数据
//全局变量定义目前仅支持4字节有符号整形(int),不支持其他类型的全局变量声明,如需使用字符串类型可以在页面中使用变量控件来实现
int sys0=0,sys1=0,sys2=0
//frameLength:每帧数据长度
//getFrameFlag:是否找到帧头或帧尾标记
int frameLength=1,getFrameFlag
bauds=115200 //波特率115200
recmod=1 //打开主动解析
page 0
解析定时器(tim为50)中的代码如下图所示
if(usize>=frameLength)
{
//通过位运算来获取每个位的数据
n1.val=u[0]&0x01
n2.val=u[0]>>1&0x01
n3.val=u[0]>>2&0x01
n4.val=u[0]>>3&0x01
code_c //清空串口数据缓冲区
}
定长hex-示例9-样例工程下载
演示工程下载链接: