-
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语言实现函数查表跳转程序
2020-07-29 05:42:58本文给出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];}
-
嵌入式C语言查表法在项目中的应用
2020-12-26 09:40:35如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。 #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;
} -
ntc 测温 单片机 C语言 查表 表格 温度系数表 计算公式
2021-05-22 16:01:35一般大家都会查表,其实不用查表也可以计算,看下面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... -
4X4矩阵键盘(查表法)C语言程序设计
2021-05-21 13:01:17j++) { 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 教学... -
C语言day07-15进制查表法
2021-05-19 12:23:19#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语言二分法差值查表程序
2013-03-28 11:45:10C语言二分法差值查表程序,使用Win-TC验证通过。 -
编写单片机的查表程序
2021-05-23 05:45:4951单片机有两条查表指令:MOVC A, @A + PCMOVC A, @A + DPTR前一条可以不用 DPTR,但是其中有个“偏移量”颇为难算,因为涉及到指令字节数的基本概念、查表等,令很多人头痛。做而论道针对这个问题,研究出一个自动... -
C语言查表法实现DA正弦波输出.doc
2021-05-20 18:14:10C语言查表法实现DA正弦波输出毕设又开始..终于把三角波程序换成正弦波了!正弦表!网上太难找..//------分隔线-----------//三角波?????int s;?????for(s=1;s<250;s+=step){???????delay();??????SPISend1(0x17) ... -
单片机C语言程序举例(二)
2021-05-24 04:15:57//秒减1 if(second==0) { //这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序 if(red) { red=0;yellow=1; second=5; P1=0xF3;//黄灯亮5秒 } else if(yellow && !turnred) { yellow=0;green=1;... -
【C语言】顺序表,数组
2021-05-24 05:37:18顺序表的搭建,就是一个本身的结构,利用的是数组,开辟的内存空间大小是固定的。没有链式结构那样的开辟空间的可控性。最基本的数据结构认知。然后我们来看看数据结构中的基本实现和思想:#include"seqList.h"#... -
EDA/PLD中的C语言实现函数查表跳转程序
2020-11-10 05:02:11C语言实现查表跳转程序.可以采用状态机如 switch(state) { case 1:state_fuc();break; case 2:state_fuc();break; ......... 也可以用if ...else if ......else ..... 除了用switch或if判断,还有汇编那种... -
C语言利用半曲线法查表实现arctan arcsin 反正切 反正弦计算
2020-03-18 16:22:53采用优化的单片机查表法计算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, ... -
哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。c语言课设
2022-01-02 12:51:24设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少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... -
使用C语言实现抛物插值
2021-08-10 15:04:16查阅机械设计手册,找到一个函数数表,编写程序实现数表的抛物线插值,注明运行时输入的参数。 查阅到的表如下 程序 #include<stdio.h> #include <stdlib.h> int main() { //将题目中所给数据储存到... -
[转载]C语言查表法实现DA正弦波输出
2021-05-23 04:36:03// 呼呼.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转自:... 阅读目录 ...查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是