大部分的应广单片机只支持8bit数据查表,那16bit的数怎么查表呢?哈哈,拆分成高低直接分别存储就可以了.先做好表格,排好序,并且做了一个线性搜索.搜索到区间值就跳出循环,并记录当前位置.
不多说,上代码:
include "extern.h"
/*表格按照由小到大排列*/
void HByteTable(void)
{
A += 1;
_Pcadd
{
ret 0x10;
ret 0x11;
ret 0x12;
ret 0x13;
ret 0x14;
}
}
/*低8bit*/
void LByteTable(void)
{
A += 1;
_Pcadd
{
ret 0x01;
ret 0x02;
ret 0x03;
ret 0x04;
ret 0x05;
}
}
byte ucTabNum = 0;
word usTableDat;
/*目标值,可以修改进行测试,看目标位置是否正确*/
word usTarDat=0x1102;
//word usTarDat=0x1304;
//word usTarDat=0x1004;
/*目标位置*/
byte ucTarNum=0;
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/8, IHRC=16MHz, VDD=3.3V;
while (1)
{
/*必须在表格范围内进行搜索*/
while(ucTabNum<5)
{
A = ucTabNum;//将数据给累加器A,A的值需要小于表中的个数
LByteTable();//查表
usTableDat$0 = A;//将累加器A的值在赋给需要的变量
A = ucTabNum;
HByteTable();
usTableDat$1 = A;
/*位置更新*/
ucTabNum++;
/*搜索数据位置,比较大小,一旦发现标准值大于等于目标值,就锁定目标,返回表格位置区间*/
if(usTableDat>=usTarDat)
{
/*搜索到就跳出循环,当表格大的时候,为了缩短搜索时间,
有兴趣可以进行二分法查找*/
break;
}
}
/*返回的目标位置*/
ucTarNum=ucTabNum;
nop;
}
}
/*edit by Q:85547259 zhongvv*/