OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2838|回复: 8

大侠解释一下这段代码,最好做一个比喻形容一下

[复制链接]

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2018-1-11
在线时间
24 小时
发表于 2018-3-19 17:23:33 | 显示全部楼层 |阅读模式
1金钱
if(strncmp(usart1_receive_buf,"WI",2)==0) 这行代码是获取usart1_receive_buf的字符与WI对比,2是代表2个字符,usart1_receive_buf接收到字符与WI抵捎=0就往下执行。
      {
       usart1_receive_buf[2]=(usart1_receive_buf[2]<<4&0xf0)+usart1_receive_buf[3];这行代码usart1_receive_buf[2]接受的字符=刚接受到的字符往左移4位,然后再按位与运算,再加usart1_receive_buf[3];我有点蒙,是不是假如00000011往左移4位就等于00110000,然后再与运算0xf0=11110000&00110000得出来的结果还是00110000,然后再加usart1_receive_buf[3];指的是第三位,加上就等00110100
A=HexToAsc(usart1_receive_buf[2]);这行有点蒙。
switch(A)
         {
          case 0x00:A0;printf("WI00 OK\r\n");break;
          case 0x01:A1;printf("WI01 OK\r\n");break;
         }
      }
我对自己理解不敢确定。

注释上写的usart1_receive_buf[BUF_SIZE],指的是位数大小吗?

最佳答案

查看完整内容[请看2#楼]

串口自动解析。你串口输入WI00,是分4次发送的。 分别是:W、I、0、0。 然后接收到每一个字符,串口会进入接收中断,你可以在中断里面读取DR寄存器,保存起来。保存完4次,就是WI00了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-19 17:23:34 | 显示全部楼层
learnone 发表于 2018-3-20 10:47
谢谢你!大侠,但我是想请你们帮我解释一下,现在通过串口输入WI00,打印出来是WI00 OK,WI00与这些代码 ...

串口自动解析。你串口输入WI00,是分4次发送的。
分别是:W、I、0、0。
然后接收到每一个字符,串口会进入接收中断,你可以在中断里面读取DR寄存器,保存起来。保存完4次,就是WI00了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2018-3-19 22:20:12 | 显示全部楼层
所有的都是机器码0 1,一样可以移位的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-20 01:23:32 | 显示全部楼层
移位没错啊,没毛病。
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2018-1-11
在线时间
24 小时
 楼主| 发表于 2018-3-20 10:47:04 | 显示全部楼层
正点原子 发表于 2018-3-20 01:23
移位没错啊,没毛病。

谢谢你!大侠,但我是想请你们帮我解释一下,现在通过串口输入WI00,打印出来是WI00 OK,WI00与这些代码是如何映射的(转换),假如首先抓2个字符对比,WI这两个字符要转换成什么码存放在哪个寄存位,然后再移某个位与算,加某个位来实现。
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2018-1-11
在线时间
24 小时
 楼主| 发表于 2018-3-21 10:39:43 | 显示全部楼层
谢谢!
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-21 14:33:36 | 显示全部楼层
learnone 发表于 2018-3-20 10:47
谢谢你!大侠,但我是想请你们帮我解释一下,现在通过串口输入WI00,打印出来是WI00 OK,WI00与这些代码 ...

WI 那俩 你明白对吧~~后面的0实际值是 0x30,再后面一个0还是 0x30,这样通过你左移那个代码就会被处理成 0x30,(uchar型), 再通过HextoAsc变成 0,再经过switch,输出 WI00 ok。
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2018-1-11
在线时间
24 小时
 楼主| 发表于 2018-3-22 15:24:26 | 显示全部楼层
孟亮 发表于 2018-3-21 14:33
WI 那俩 你明白对吧~~后面的0实际值是 0x30,再后面一个0还是 0x30,这样通过你左移那个代码就会被处理成 ...

谢谢!你能否给我讲解一下串口通讯的整个传输演变过程不?我看正点原子的视频,没讲到这一切,不知是那里漏了 ,作一个数据的比较。
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-23 08:54:29 | 显示全部楼层
learnone 发表于 2018-3-22 15:24
谢谢!你能否给我讲解一下串口通讯的整个传输演变过程不?我看正点原子的视频,没讲到这一切,不知是那里 ...

串口通讯。这个网上例子很多,你可以看看图解版的通讯原理,然后再看一下通讯协议制定,如果找不到合适的参考,就看看8位芯片的串口协议制定,我看的是AVR的入门书里,用BB开始EE结尾,对通讯讲解还可以,之后再看;or 0D结尾的通讯协议,那个处理起来比 有起始符的难。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 08:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表