找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3328|回复: 10
打印 上一主题 下一主题
收起左侧

在写一个程序时发现,数据低八位会发生丢失,求大神指导

[复制链接]
跳转到指定楼层
楼主
ID:81678 发表于 2015-6-2 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先贴代码

void main()
{
        unsigned int a=0x1c00;
        unsigned char b;
        (unsigned int)b=a;
        b=b>>8;
        uart_init();
        while(1)
        {
                TI=1;
                ES=0;
                printf("%x \r\n",b);
                printf("%d \r\n",b);
                Delay(10000);
        }
       
}


我在写其他程序时出现了数据丢失问题,就写了这个小程序测试了下,果然如此。。。。。
求助下, 怎么样让数据右移八位不丢失啊,输出b=0x1c;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2015-6-2 20:15 | 只看该作者
更换单片机芯片~~~~~~~~~~

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:7485 发表于 2015-6-3 22:01 | 只看该作者
在汇编中,   RRC 指令功能:累加器内容连同进位标志位(c)循环右移一位(C进入最高位,最低位进入C,也就是9位圆周循环)
    操作内容:      A7←(C)      An←(An+1)    C←(A0)       (n=0~6)
  (RLC  类似)

在C51中操作符右移为">>",每执行一次右移指令,操作数最高低移入CY,CY中本来的数丢失,最高位补0,其他位依次向右移动1位。左移指令类同。也就是说不采取其他措施,移出去的一位就丢失了。 类似于汇编的 “RR”。C语言中没有单独的 类似于"RLC"或"RRC"的语句。
所以如果  b=b>>8 ,高8位进入低8位,高8位补8个”0“,低8位就丢失了。(假设b为16位数据)。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:81808 发表于 2015-6-4 08:34 来自手机 | 只看该作者
太明显了,b改成uint就好了,51里面搞强制类型转换不是很推荐
回复

使用道具 举报

5#
ID:81678 发表于 2015-6-4 19:17 | 只看该作者
lxa0 发表于 2015-6-2 20:15
更换单片机芯片~~~~~~~~~~

不用吧,设置了个中间变量,好了。。。。。。。
回复

使用道具 举报

6#
ID:81678 发表于 2015-6-4 19:17 | 只看该作者
ahshmj 发表于 2015-6-3 22:01
在汇编中,   RRC 指令功能:累加器内容连同进位标志位(c)循环右移一位(C进入最高位,最低位进入C,也就 ...

回复

使用道具 举报

7#
ID:81678 发表于 2015-6-4 19:18 | 只看该作者
yanjibao 发表于 2015-6-4 08:34
太明显了,b改成uint就好了,51里面搞强制类型转换不是很推荐

嗯,改了,好了,谢了啊。。。。。。。。。
回复

使用道具 举报

8#
ID:82058 发表于 2015-6-4 20:39 | 只看该作者
建议多看基础

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:82090 发表于 2015-6-5 10:45 | 只看该作者
b改成uint应该可以

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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