⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//============================================================================
//函数名称:unsigned int cal_crc(unsigned char *ptr, unsigned char len);
//功能:CRC校验
//入口参数:1.校验数据的地址2.校验数据的个数
//出口参数:校验码
//日期:2003/05/20
//=============================================================================
.DEFINE	P_WatchDog_Clear	0x7012
.IRAM 
.VAR 	Shift;   
.VAR 	crc;         			//存储C_CRC校验码
.CODE
.PUBLIC _cal_crc;
_cal_crc:
  push bp to [sp];
  push r1,r2 to [sp]; 		//压栈保护
  r1=0x0001;
  [P_WatchDog_Clear]=r1;
  r1 = 0x0000;
  [crc] = r1;        		//变量清零
   
  pop r1,r2 from [sp]   
  bp = sp + 1
  r1 = [bp + 3];    		//校验数据的地址
  r2 = [bp + 4];     		//校验数据的个数
  bp = r1;
crcOutLoop:
  bp = [r1++]        		//校验数据的地址加一
  r3 = 0x0080;       
  [Shift] = r3;      		//为位移服务 
crcInLoop:
  r3 = [crc];
  r3 &= 0x8000;
  jz crc1;
  
  r4 = [crc];
  r4 = r4 lsl 1;      		//左移
  r3 = 0x1021;
  r4 ^=  r3;
  [crc] = r4;
  jmp crc2;
  
crc1: 
  r4 = [crc];
  r4 = r4 lsl 1;     		//左移 
  [crc] = r4         		//保存C_CRC检验码
  
crc2:   
  r4 = [Shift];    
  r4 &= bp;          		
  jz crc3;
  
  r3 = [crc];
  r4 = 0x1021;
  r3 ^= r4 ;         		//异或 0x1021
  [crc] = r3;        		//保存C_CRC检验码
 crc3:    
  r4 = [Shift];
  r4 = r4 lsr 1;     		//右移
  jz crc4;
  [Shift] = r4;   
  jmp crcInLoop;  
crc4:
   r2 -= 1;
   jz exit;
   jmp crcOutLoop;
exit:
  r1 = [crc]
  pop bp,bp from [sp]
  retf;
  
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -