单片机(C语言)向外设,读取和发送数据。

Cognitive Humility 2020-01-11 08:00:48
首先进行移位,然后进行数据的判断,这是读取数据。如果是写数据的话,那么移位就放在后面,如果是读取数据的话,那么移位就放在前面,否则你放在后面的话就移了八次,最高位就被移走了?为什么?

为什么读取数据要先进行数据的移位,然后进行读取?
...全文
495 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
地瓜F 2020-04-22
  • 打赏
  • 举报
回复
找人写程序 硬件是stc12c5024ad 硬件都做好了 用22.1184的晶振 用2片hc244 做12路输入 一个64位的拨码开关做地址输入 4片tpic6b595做2组输出 一个485和西门子plc200做通信用 plc的程序写好了 实现12路乘n地址的输入的计数 报警 显示 的
fly 100% 2020-01-21
  • 打赏
  • 举报
回复
就是一次发不出去 需要移位分多次发送或者接收
差不多QAQ 2020-01-20
  • 打赏
  • 举报
回复
不管你用什么单片机或者编译器,数据的排序都是这样的,数据怎么排序是人为定义的,只是我们一般默认为高字节在前,低字节在后如果不懂的话你自己仿真传输数据把数据位置对调看看,多搞几次就懂了,我当年也是
Cognitive Humility 2020-01-20
  • 打赏
  • 举报
回复
引用 11 楼 差不多QAQ的回复:
数据的大小端。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。。 这个看你协议编写时候设定什么方式给数据排序
不咋懂,我是用51单片机,用keil4编的
差不多QAQ 2020-01-20
  • 打赏
  • 举报
回复
数据的大小端。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。。 这个看你协议编写时候设定什么方式给数据排序
Cognitive Humility 2020-01-14
  • 打赏
  • 举报
回复
引用 9 楼 worldy的回复:
说的也是,加油
嗯嗯,加油(ง •̀_•́)ง
worldy 2020-01-14
  • 打赏
  • 举报
回复
说的也是,加油
Cognitive Humility 2020-01-14
  • 打赏
  • 举报
回复
引用 6 楼 worldy的回复:
lz貌似不适合做编程,一点逻辑思路都没有,做编程会累死你的,牛都会累死
学编程不是可以提高逻辑思维嘛
Cognitive Humility 2020-01-14
  • 打赏
  • 举报
回复
学编程不是可以提高逻辑思维嘛
worldy 2020-01-14
  • 打赏
  • 举报
回复
lz貌似不适合做编程,一点逻辑思路都没有,做编程会累死你的,牛都会累死
Cognitive Humility 2020-01-14
  • 打赏
  • 举报
回复
引用 4 楼 dceacho的回复:
[quote=引用 3 楼 m0_45393514 的回复:] [quote=引用 2 楼 m0_45393514的回复:][quote=引用 1 楼 dceacho的回复:]
for(i=0;i<8;i++)
{
  dat<<=1;
  if(bit==1)dat|=1;else dat&=0xfe;
}

for(i=0;i<8;i++)
{
  if(bit==1)dat|=1;else dat&=0xfe;
  dat<<=1;
}
你比较一下
看不懂,大佬能讲讲嘛。[/quote] 就是不理解读取数据为什么要先把变量移位然后再把读取数据赋值给变量,[/quote] dat是读取的结果,bit是发过来的“位“, 就是用dat获取通过bit口发过来的数据 第二例里面当循环结束时,得到的结果是错的,最后dat<<=1循环移动了一位,所以最后位是错误的 这个不用太在意,实际你用的时候就明白了,[/quote] 懂了懂了,谢谢
dceacho 2020-01-13
  • 打赏
  • 举报
回复
引用 3 楼 m0_45393514 的回复:
[quote=引用 2 楼 m0_45393514的回复:][quote=引用 1 楼 dceacho的回复:]
for(i=0;i<8;i++)
{
  dat<<=1;
  if(bit==1)dat|=1;else dat&=0xfe;
}

for(i=0;i<8;i++)
{
  if(bit==1)dat|=1;else dat&=0xfe;
  dat<<=1;
}
你比较一下
看不懂,大佬能讲讲嘛。[/quote] 就是不理解读取数据为什么要先把变量移位然后再把读取数据赋值给变量,[/quote] dat是读取的结果,bit是发过来的“位“, 就是用dat获取通过bit口发过来的数据 第二例里面当循环结束时,得到的结果是错的,最后dat<<=1循环移动了一位,所以最后位是错误的 这个不用太在意,实际你用的时候就明白了,
Cognitive Humility 2020-01-13
  • 打赏
  • 举报
回复
引用 2 楼 m0_45393514的回复:
[quote=引用 1 楼 dceacho的回复:]
for(i=0;i<8;i++)
{
dat<<=1;
if(bit==1)dat|=1;else dat&=0xfe;
}

for(i=0;i<8;i++)
{
if(bit==1)dat|=1;else dat&=0xfe;
dat<<=1;
}

你比较一下
看不懂,大佬能讲讲嘛。[/quote] 就是不理解读取数据为什么要先把变量移位然后再把读取数据赋值给变量,
Cognitive Humility 2020-01-13
  • 打赏
  • 举报
回复
引用 1 楼 dceacho的回复:
for(i=0;i<8;i++)
{
dat<<=1;
if(bit==1)dat|=1;else dat&=0xfe;
}

for(i=0;i<8;i++)
{
if(bit==1)dat|=1;else dat&=0xfe;
dat<<=1;
}

你比较一下
看不懂,大佬能讲讲嘛。
dceacho 2020-01-12
  • 打赏
  • 举报
回复
for(i=0;i<8;i++)
{
dat<<=1;
if(bit==1)dat|=1;else dat&=0xfe;
}

for(i=0;i<8;i++)
{
if(bit==1)dat|=1;else dat&=0xfe;
dat<<=1;
}

你比较一下

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧