? ? ? ?大部分的应广单片机只支持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*/
|