首页 > 其他分享 >ADS1256读取到的24位有符号数据处理

ADS1256读取到的24位有符号数据处理

时间:2024-02-01 18:55:23浏览次数:39  
标签:24 int32 0000 符号 位有 numB ADS1256

ADS1256通过SPI读取到的数据为24位有符号数据[0,23],第23位为符号位,1为负,0为正。

但是在STM32中,我们常用int32或者uint32来存放这个数据,如果直接赋值赋过去就会出现意想不到的后果,如下:

这就是直接赋值之后绘出来的图,因此我们需要将24为有符号变量转换为32位有符号变量,但在此处很容易绕晕,具体分析如下

24位有符号数据当大于0x80 0000(8388608)时说明当前数据为负数,为什么这么说呢,因为24位的有符号数存在int32的数据中,其已经变成了一个正数

举个栗子(假设有int24这种类型)

int24_t numA = -1;其转换为hex则为0x80 0001(1000 0000 0000 0000 0000 0001),最高位代表了符号位。

但实际的应用过程中并没有int24_t,只有int32_t,再举个栗子

// int32_t  numB = -1;其转换为hex则为0x8000 0001(1000 0000 0000 0000 0000 0000 0000 0001)

int32_t   numB = 0;其转换为hex则为0x0000 0000(0000 0000 0000 0000 0000 0000 0000 0000)

当numB赋值给numA时其numB发生了如下变化

numB变成了0x0080 0001也就是8388609,此时这个数突然发现变成了正数,与我们原来的-1完全不一样,因此需要转换一下

如果numB是负数,也就是当numB大于0x80 0000(8388608)时为负数,做出如下计算

该计算就是正常的流程:取反 -> 符号位及高位置0 -> 加一 -> 加负号

MATLAB:

if(numB >= 8388608)
    %取反
    numB  = bitcmp(numB);
    %23到32位置零
    for j = 23:32
        numB  = bitset(numB,j,0);
    end  
    numB = numB + 1;
    numB = -numB;
end    

C语言:

if(numB& 0x800000){
    numB= ~(unsigned long)numB;
    numB&= 0x7fffff;
    numB+= 1;
    numB= -numB;
}

最后正常图如下:

 

标签:24,int32,0000,符号,位有,numB,ADS1256
From: https://www.cnblogs.com/lesterbor/p/18001859

相关文章

  • 2024最新一期中国数据库流行榜公布:阿里云PolarDB登顶
    2月1日,数据库社区“墨天轮”公布了2024年最新一期中国数据库流行度排行榜,阿里云瑶池旗下的自研云原生数据库PolarDB夺冠,并刷新榜单总分纪录。墨天轮评价称,因云而生的PolarDB数据库以客户需求为导向,并在业界开创性地落地“三层解耦”架构、多主多写、HTAP、Serverless、集......
  • WC 2024 总结
    回顾T130分钟过,又用15分钟对拍。T2看了半个小时不会,于是去T3写了20分。此时2小时。不知道为什么我又想了两个小时的T3,没有得分。只剩一个小时了,我终于开始认真想T2了。枚举L,N^5。最后半个小时,我意识到自己又要输了,我不知道为什么自己没有力气冲了。反思别再......
  • 【IEEE出版|往届均已EI检索】第四届电子,电路和信息工程国际学术会议(ECIE 2024)
    大会时间:2024年5月24-26日|中国-杭州主办单位:浙江工业大学接受/拒稿通知:投稿后1周左右收录检索:IEEEXplore收录,EI,Scopus参会类型:全文投稿、口头报告、海报展示、仅参会会议官网:https://www.ais.cn/attendees/index/ZBJRJN参会方式:全文投稿、口头报告、海报展示、仅参会......
  • 强连通分量(SCC,Strongly Connected Components)学习笔记 & edited in 2024.01.31
    更新日志upd2024.01.31写好文章基本内容upd2024.01.31发表于洛谷upd2024.02.01同步发表于CSDNupd2024.02.01同步发表于博客园cnblogs强连通分量(SCC,StronglyConnectedComponents)定义强连通有向图(DAG)中若其中两点$x$,$y$能彼此到达(不一定是直接连边),称$x$和......
  • 寒假生活指导24
    #coding:utf8#指定源代码编码格式为UTF-8frompyspark.sqlimportSparkSession#导入SparkSession类,用于创建和管理Spark应用上下文frompyspark.sql.functionsimportconcat,expr,col#导入SparkSQL中的函数,这里并未使用但可能在后续操作中用于数据转换或计算f......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.02.01)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 代码随想录算法训练营第四天 |24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节
    142.环形链表II 已解答中等 相关标签相关企业 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,......
  • 【西湖论剑2024初赛】MISC3-easy_rawraw WriteUp
    easyraw!manypasswords!首先用volatility+mimikatz可以爆出windows账户密码das123admin321vol.py--plugins=./plugins-f./rawraw.raw--profile=Win7SP1x64mimikatz剪贴板中,有另一个密码DasrIa456sAdmIn987,用来解压mysecretfile.rarvol.py--plugins=./plugins-f......
  • 2024年哪款便签软件是手机电脑同步的?
    在繁忙的生活、工作和学习中,我们时常面临各种琐事和任务,需要随时记录、提醒,以保持高效的生活节奏。比如,突然想到的灵感、重要的工作计划、紧急的购物清单,都需要一个便利的便签·工具来随手记录。特别是在多终端使用的情境下,如何实现手机、电脑同步成为了我们选择便签软件的关键需......
  • 英语背单词 专四词汇 2024年02月 ChatGPT
    2024-02-02 2024-02-01IndexWordPronunciationPartsofSpeechExplanationTranslationinChinese1heel/hiːl/nounThebackpartofthefootbelowtheankle,typicallycorrespondingtothelocationofthebacktwo-thirdsoftheshoe.脚后跟2p......