专栏中心

EEPW首页 > 专栏 > NTC测温中 经典温度查表算法--二分查找法

NTC测温中 经典温度查表算法--二分查找法

发布人:电子禅石 时间:2021-08-02 来源:工程师 发布文章
  1. 说明: 

  2.  

  3. 二分查找法的优点:查找速度快 1024个长度的表最长只需10次查表就能得出结果 

  4. 在用NTC测试温度的方案中,NTC的温度表的长度一般是100-200 有些达到400-500的长度 

  5. 在这种情况下如果用逐个查表比较的方法来查温度 会导致查表的时间过长,影响程序的 

  6. 执行效率 这里推出一个优秀的算法来取代这种最笨的做法 

  7.  

  8. 应用实例如下: 

  9.  

  10. #define TempSize  100 //定义表长度 

  11. //温度值对应的AD值的表的定义 

  12. const int16 TabNtc_100K[TempSize]={0xf00,0xe00,oxd00,......}; 

  13.  

  14. int16 *pTmp ; //定义一个字长的指针 

  15.      

  16. pTmp = TabNtc_100K ; //指向要温度表的地址 

  17. CuTemp = FineTab(pTmp,TempSize,R_NTCAD); //查表得出温度 R_NTCAD为NTC分压得出的AD值 

  18.  

  19.  

  20. ********************************************/

    1. //*************************************  

    2. // 函数名称:FineTab  二分查找算法 ->查温度表  

    3. // 函数功能:查找数据在表中对应的位置 表中数据从大到小  

    4. // 入口参数:表地址、表长度、要查找的数据  

    5. // 出口参数:无  

    6. // 返 回 值:数据在表中的位置  

    7. //*************************************  

    8. uint8 FineTab(uint16 *a,uint8 TabLong,uint16 data)//表中数据从大到小  

    9. {  

    10.     uint8 st,ed,m ;  

    11.     uint8 i ;  

    12.   

    13.     st = 0 ;  

    14.     ed = TabLong-1 ;  

    15.     i = 0  ;  

    16.   

    17.     if(data >= a[st]) return st ;  

    18.     else if(data <= a[ed]) return ed ;  

    19.   

    20.     while(st < ed)  

    21.     {  

    22.         m = (st+ed)/2 ;  

    23.   

    24.         if(data == a[m] ) break ;  

    25.         if(data < a[m] && data > a[m+1]) break ;  

    26.           

    27.           

    28.         if(data > a[m])  ed = m ;                      

    29.         else st = m ;     

    30.           

    31.         if(i++ > TabLong) break ;  

    32.     }  

    33.   

    34.     if(st > ed ) return 0 ;   

    35.   

    36.     return m ;  

    37. }  

    38.   

    39.   

    40. //*************************************  

    41. // 函数名称:FineTab  二分查找算法 ->查温度表  

    42. // 函数功能:查找数据在表中对应的位置    表中数据从小到大  

    43. // 入口参数:表地址、表长度、要查找的数据  

    44. // 出口参数:无  

    45. // 返 回 值:数据在表中的位置  

    46. //***************************************  

    47.   

    48. uint8 FineTab(uint16 *a,uint8 TabLong,uint16 dat)//表中数据从小到大  

    49. {  

    50.         uint8 st,ed,m ;  

    51.         uint8 i ;  

    52.       

    53.         st = 0 ;  

    54.         ed = TabLong-1 ;  

    55.         i = 0  ;  

    56.       

    57.         if(dat >= a[ed]) return ed ;  

    58.         else if(dat <= a[st]) return st ;  

    59.       

    60.         while(st < ed)  

    61.         {  

    62.             m = (st+ed)/2 ;  

    63.       

    64.             if(dat == a[m] ) break ;  

    65.             if(dat < a[m+1] && dat > a[m]) break ;  

    66.               

    67.               

    68.             if(dat > a[m]) st = m ;  //ed = m ;                    

    69.             else ed = m ;//st = m ;   

    70.               

    71.             if(i++ > TabLong) break ;  

    72.         }  

    73.       

    74.         if(st > ed ) return 0 ;   

    75.       

    76.         return m ;  

    77.   

    78. }  


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: NTC

相关推荐

【PI】双通道门极驱动器SCALE-iFlex LT NTC助力可再生能源应用

TI烟雾检测器解决方案

Bourns推出POWrTherm™ NTC热敏电阻系列

Melexis为智能IVT霍尔和分流传感器增添外部NTC输入功能

使用四比较器的恒温控制器

温度传感器:TDK 推出用于测量激光二极管温度、可选配金丝键合的新型NTC 热敏电阻

片PTC-NTC应用.pdf

资源下载 2010-03-16

Vishay推出通过AEC-Q200认证的新款厚膜功率电阻器可选配NTC热敏电阻和PC-TIM

Vishay NTC浸入式热敏电阻为液冷汽车系统提供1.5秒快速响应时间

TDK推出用于导电粘接安装的新型贴片NTC热敏电阻

NTC PTC热敏电阻

NTC热敏电阻提供汽车与摩托车过热保护

基于NTC热敏电阻的LED闪光基板的温度检测

光电显示 2023-04-14

NTC热敏电阻故障表现及其对策 - ①裂缝

EDA/PCB 2023-05-17

电子技术实用知识

更多 培训课堂
更多 焦点
更多 视频

技术专区