精华内容
下载资源
问答
  • 单片机中用C语言查表和移位问题
    2021-05-24 02:00:08

    第一个是查表法

    比方说我有三个数据

    char code table={0x01,0x02,0x03}分别对应0xa,0xb,0xc,请问如何用C语言实现查表找到对应的值呢?请给位大虾写出具体的语法实现,要简洁明了。

    第二个问题是:比方说我有一数据 char data=0xa2 ;我要串行发送出去,那么我采用从高位发送,然后左移8次分别发出,请问如何实现?若是采用data<<1这样的语法,每次左移出去的高位去哪了呢?在CY位?那么任何单片机都有CY寄存器?况且都是左移,data<<1,什么时候高位就会移入CY,什么时候就是丢弃不要呢?

    第一个问题:

    比如用查表法将结果保存到变量i中,查表变量为x,则i = table[x],记住C语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02是table[1],以此类推。

    再说第二个问题:

    比如说从P1.0口发送出去,则可以写为

    sbit OUT = P1^0;//定义OUT为P1.0口,这样今后好写程序

    char i;

    for(i = 0;i < 8;i++)

    {

    OUT = data & 0x80;//因为高位在前,将它写成二进制就明白了

    data <<= 1;

    }

    上面的程序就能搞定了;

    应该是所有的单片机都有CY位(不知道浮点DSP有没有);

    C语言中左移和右移之后低位或高位自动补零,CY位也保持为零(视编译器而定,这个得看编译器手册),有些编译器提供了循环移位的函数;

    更多相关内容
  • CRC8的C语言查表程序

    2021-05-20 04:45:42
    查表法:(生成多项式X^8+X^6+X^4+X^3+X^2+X^1)const uchar crctable[] = {0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,35,125...

    查表法:(生成多项式X^8+X^6+X^4+X^3+X^2+X^1)

    const uchar crctable[] = {

    0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,

    157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,

    35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,

    190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,

    70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,

    219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,

    101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,

    248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,

    140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,

    17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,

    175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,

    50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,

    202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,

    87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,

    233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,

    116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};

    UCHAR CRC8(UCHAR IN,UCHAR CRC)

    {

    IN^= crc;

    crc = crctable[IN];

    RETURN  crc ;

    }

    VOID MAIN (VOID)

    {

    CRC=0;

    FOR(I=0;I<100;I++)

    CRC=CRC8(TABLE[I],CRC);

    }

    算法:

    UCHAR CRC8(UCHAR IN,UCHAR CRC)

    {

    uchar i,crc;

    for (i=0;i<8;i )

    {

    if ((IN&1)^(crc&0x80)==0) {crc<<=1;} /* 做(1),(2); (1)=0,则CRC向高位移1位. */

    else

    {

    crc=crc^0x18; /* (1)=1,则异或18 */

    crc<<=1;

    crc|=1; /* 置CRC.0为1 */

    }

    IN>>=1;

    }

    }

    备注:在数据传输中CRC或传过来的数据,可能低字节在前,高字节在后,这就造成查表法表中被查数据不同。

    展开全文
  • 本文给出C语言实现函数查表跳转程序,感兴趣的朋友可以看看。
  • C语言查表法问题

    千次阅读 2021-05-20 04:44:36
    在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法。假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好的办法么?...

    在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法。

    假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好的办法么?

    例如,数组为范围  [0,1) [1,2) [2,4) [4,8) [8,16) [16,32) [32,64) [64,128)

    索引    0     1     2     3     4       5       6       7

    给定一个数37,那么由于在[32,64)范围内,故应返回索引6.通过以下程序可生成一张索引表:

    #include

    #define MIN_MASK 5

    #define MAX_MASK 12

    #define MIN_VALUE (1<

    #define MAX_VALUE (1<

    #define DIF_VAL (1<

    #define ONELINE_MASK 4

    #define ONELINE (1<

    int main(void)

    {

    FILE* fp=fopen("data.txt","w");

    fprintf(fp,"static char index_table[]={\n\t");

    int idx=0,idv=1,lnc=1,i;

    for(i=0;i

    {

    if(i>=idv)

    {

    idx++;idv<<=1;

    }

    if(lnc>ONELINE)

    {

    fprintf(fp,"\n\t");

    lnc=1;

    }

    fprintf(fp,"%d, ",idx);

    }

    fprintf(fp,"\n};");

    fclose(fp);

    return 0;

    }

    生成如下查找表

    static char index_table[]={

    0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,

    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    };

    ~

    则可通过size_to_index完成从size到index的转换int size_to_index(unsigned int

    size)

    { return index_table[size >> MIN_MASK];}

    展开全文
  • 如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。 #include #include //这里的行可以自由写,这样就不受限制...
  • C编写的查表程序

    2013-07-26 14:41:06
    C语言编写的查表程序,用于采样或空间换时间参考。
  • C语言查表法CRC32

    2021-06-15 14:34:50
    #include <stdio.h> const unsigned int table[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2...

    #include <stdio.h>

    const unsigned int  table[] = {   
        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,   
        0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,   
        0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,   
        0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,   
        0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,   
        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,   
        0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,   
        0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,   
        0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,   
        0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,   
        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,   
        0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,   
        0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,   
        0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,   
        0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,   
        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,   
        0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,   
        0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,   
        0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,   
        0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,   
        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,   
        0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,   
        0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,   
        0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,   
        0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,   
        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,   
        0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,   
        0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,   
        0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,   
        0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,   
        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,   
        0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,   
    };

    unsigned int  getCRC(unsigned char* buf, int nLength)
    {
        if (nLength < 1)
            return 0xffffffff;

        unsigned int crc = 0xFFFFFFFF;

        for (int  i = 0; i != nLength; ++i)
        {
            crc = table[(crc ^ buf[i]) & 0xff] ^ (crc >> 8);  
        }

        crc = crc ^ 0xffffffff;

        return crc;  
    }

     

    int main(void)
    {
        unsigned int crc;
        crc = getCRC("1234567890",10);
        printf("crc32 = %x\n",crc);

        return 0;
    }

     

    http://www.ip33.com/crc.html

     

    展开全文
  • 一般大家都会查表,其实不用查表也可以计算,看下面2个公式就直接搞定了://g_shunt_dat.tmp_val[1]=(float)((1/(log(g_shunt_dat.r_val[1]/10000.0)/3950.0+1/(25.0+273.15))-273.15)*10+0.5);//10kg_shunt_dat.tmp...
  • j++) { if(keycode== key_code[j]) //查表得键值 { key=j; return(key); } } } } else P1=0xff; return (16); } /********************************************************** 判键是否按下子函数 **************...
  • c语言--查表

    千次阅读 2021-05-26 21:25:21
    } 这个程序,我们一个一个查询数组中的值,看是否有过重复,在Findvalue中,for循环一直是从0开始,一个一个查询,这样时间复杂度很高,我们想,有没有一种方法使得只查询一次就好,不需要每次都从0开始,所以我们...
  • 单片机 查表程序设计实验

    千次阅读 2021-05-23 05:45:12
    查表程序设计实验2.4 查表程序设计实验2.4.1 实验目的学习查表程序的设计方法,熟悉 51 的指令系统。2.4.2 实验设备PC 机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或“TD-PITE 教学...
  • #include void printfBinary(int value);void printfBunary2(int value);void printOct(int value); // 8进制void printHex(int value); // 16进制void printHex2(int value); // 16进制void printOct2(int value);...
  • C语言二分法差值查表程序,使用Win-TC验证通过。
  • 编写单片机的查表程序

    千次阅读 2021-05-23 05:45:49
    51单片机有两条查表指令:MOVC A, @A + PCMOVC A, @A + DPTR前一条可以不用 DPTR,但是其中有个“偏移量”颇为难算,因为涉及到指令字节数的基本概念、查表等,令很多人头痛。做而论道针对这个问题,研究出一个自动...
  • C语言查表法实现DA正弦波输出毕设又开始..终于把三角波程序换成正弦波了!正弦表!网上太难找..//------分隔线-----------//三角波?????int s;?????for(s=1;s<250;s+=step){???????delay();??????SPISend1(0x17) ...
  • //秒减1 if(second==0) { //这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序 if(red) { red=0;yellow=1; second=5; P1=0xF3;//黄灯亮5秒 } else if(yellow && !turnred) { yellow=0;green=1;...
  • 顺序表的搭建,就是一个本身的结构,利用的是数组,开辟的内存空间大小是固定的。没有链式结构那样的开辟空间的可控性。最基本的数据结构认知。然后我们来看看数据结构中的基本实现和思想:#include"seqList.h"#...
  • C语言实现查表跳转程序.可以采用状态机如 switch(state) { case 1:state_fuc();break; case 2:state_fuc();break; ......... 也可以用if ...else if ......else ..... 除了用switch或if判断,还有汇编那种...
  • 采用优化的单片机查表法计算atan角度的方法,重点解决了几个问题: (1)且用asin曲线计算代替难以描述的atan曲线,快速开方函数 (2)全部采用整形运算,加快了运算速度,返回的角度范围是0~360.00,包含4个象限...
  • 温度计C语言程序.doc

    2021-05-21 02:41:21
    温度计C语言程序/**///MCU头文件#include #include 延时:nop//数据结构定义#define U8unsigned char 8字节 无符号字符型 2 8 256#define U16unsigned int 16字节 整型 2 16 65535#define VU8volatile unsigned ...
  • CRC16查表法的C语言实现

    千次阅读 2020-08-10 18:49:24
    下面是查表法的C语言实现: 校验码算法程序实现样例(C语言): // Test.cpp : Defines the entry point for the console application. #include "stdafx.h" static unsigned char auchCRCHi[]={ 0x00, 0xC1, 0x81, ...
  • 设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2)生成的哈希...
  • 单片机查表C语言

    千次阅读 2020-11-18 22:56:02
    查表程序设计 实现Y=X平方代码如下 #include<reg51.h> #include <stdlib.h> unsigned char code sqr[10]={0x00,0x01,0x04,0x09,0x10,0x19,0x24,0x31,0x40,0x51}; #define uchar unsigned char void main...
  • 查阅机械设计手册,找到一个函数数表,编写程序实现数表的抛物线插值,注明运行时输入的参数。 查阅到的表如下 程序 #include<stdio.h> #include <stdlib.h> int main() { //将题目中所给数据储存到...
  • // 呼呼.cpp : Defines the entry point for the consoleapplication.//#include "stdafx.h"#include #define pi 3.1415926int _tmain(int argc, _TCHAR* argv[]){FILE *fp=fopen("D:\t.txt","a+");...
  • 嵌入式C语言查表法的项目应用

    千次阅读 2016-07-01 11:14:21
    思考一个这样的算法是不可取的,很费时间,也很费脑力,于是,今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个
  • 七大查找算法(附C语言代码实现)

    万次阅读 多人点赞 2017-08-24 20:31:03
    转自:... 阅读目录 ...查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,427
精华内容 2,170
关键字:

c语言查表程序