• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机如何表示9bit的数据

莱克迷KW 2019-05-13 浏览量:1307
如何表示9bit的数据
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 单片机上没有9位的数据类型,只有8位,16位这样的,所以,你只能是使用16位的数据,但是把其他的高位的7位忽略掉
    • 发布于 2019-05-14
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:9
  • 用两个字节,16位,屏蔽掉 7 位,剩下 9位来表示数据。

    比如你定义好低 9 位有效

    short int  data = 0 ;                // 定义数据,初始化

    short int mask = 0x01ff;            //定义掩码,初始化

    short int  get_data(void){        //获取数据方法内部已经屏蔽了高7位,其实这里不用屏蔽也行,因为set_data已经屏蔽了,data 高7位已经是0

    return  (data & mask);

    }

    void  set_data(short int  value){       // 设置data数据方法,设置的时候清除 value 的高七位后赋值给 data。

     data = value & mask;

    }

    读写 data 数据的时候,不要直接使用 data,使用 get_data 和  set_data 这两个子函数(方法),子函数内包含了屏蔽操作

    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 9bit的数据吗?9bit的数据在程序里可以使用十六位的变量进行表示和保存,在单片机内部是使用了两个字节保存的,第八位保存的是第0位到第7位,高八位保存的是第九位,其中高八位中只有一位有效,其他位是不用的。
    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 用两个字节来表示,屏蔽掉7位,剩下的 9 位表示 9 bit 数据,比如:

    short int  data = 0 ;                          // 定义,初始化数据

    short int  mask = 0;                        // 定义,初始化掩码

    short int get_data(void){                  // 读数据,

    return  data;

    }

    void set_data(short int value){            // 写数据,内部已经实现屏蔽高7位操作,低9位是数据。

    data = mask & value;

    }

    使用 data 数据的时候,不要直接使用 data变量,使用 get_data    set_data  两个方法,方法内部实现了屏蔽操作。

    读数据内部也可以屏蔽,但是多余的。写进去的数据已经屏蔽了高七位,高7位永远是0,读的时候屏蔽不屏蔽就无所谓了。

    • 发布于2019-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 用两个字节表示,分成低位和高位,如果是连续多个9位数据,可以直接把下一位数据放在第二字节的第一位开始存放,这样节省空间
    • 发布于2019-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实理论上只要存储够,就可以表示任何bit位的数据。

    对于32位系统,其实9bit表示只占一个实际字宽(32bit)中的一部分,可以通过屏蔽掉不用的地方来表示,比如

    0x00000000 -0x000001ff 就是一个9bit的数据空间, 但只需要占用一个字宽,

    用long类型数据就可以存储,假设我们取低9bit数据来作为有效位,就可以直接在其中放置数据啦,使用时为了安全,可以采用 (0x1ff & V) 的形式取出有效位来,其中V是存储数据的变量。


    对于8位系统,则可以用两个byte空间来存储,其中9bit的低8bit占用1个byte,高的1bit存在另外一个byte中,使用时用(0x1 & HV) 的形式取出来。

    更多位的数据其实都是采用类似的方式都可以存储。

    • 发布于2019-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机上的数据,都是以8位为基数的,也就是8、16、32位的。所以,9位的,要使用16位的数据,但是高7位的不使用,可以通过位与清成0就可以了。
    • 发布于2019-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 是没有9位的数据的,要使用9位的数据,你只能是使用16位的数据,并把高的7位通过与操作清0
    • 发布于2019-05-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 对于8bit的单片机系统而言, 保存9bit数据需要使用2字节的长度来保存这个数据,9bit数据中的低8bit数据保存在低字节中,最高位bit的1bit数据保存在高字节的最低bit位中,使用的时候注意把高字节的高7bit位清零。
    对于16bit及以上的单片机系统,直接把数据进行传递比较计算就行了。
    还有一种方法是使用位域来表示。
    struct bs     
    {     
        unsigned a:9;   
    } bit;
    bit.a=7; //注意:位域的赋值不能超过该域所能表示的最大值,如a只有9位,能表示的最大数为2^9,若赋为2^9+1,就会出错   
    printf("%d\n"bit.a);
    • 发布于2019-05-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 要表示9位的数据,需要消耗两个字节的空间,然后高7位置空,为了防止高7位可能出现的数据,可以将这两个字节的内容&0x1ff来参与运算
    • 发布于5小时前
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机如何表示9bit的数据