作者WolfLord (呆呆小狼)
看板ASM
标题[赠码] ASM CRC16 For Keil C51
时间Tue Apr 26 23:31:26 2011
C宣告:
extern unsigned char data CRCH;
extern unsigned char data CRCL;
#define resetCRC16() {CRCH=0;CRCL=0;}
extern char caCRC16(char c);
ASM:
NAME CRC16_ASM51
CDCRC16_ASM51 SEGMENT CODE
DACRC16_ASM51 SEGMENT DATA
PUBLIC caCRC16
PUBLIC CRCH
PUBLIC CRCL
;-----------------------------------
RSEG DACRC16_ASM51
CRCH: DS 1
CRCL: DS 1
;-----------------------------------
RSEG CDCRC16_ASM51
caCRC16:
_caCRC16:
MOV A,R7
PUSH ACC
XRL A,CRCL
MOV CRCL,CRCH
MOV CRCH,A
MOV C,P
JNC CRCF0
XRL CRCL,#001H
CRCF0:
RRC A
JNC CRCF1
XRL CRCL,#040H
CRCF1:
MOV C,ACC.7
XRL A,CRCH
RRC A
MOV CRCH,A
JNC CRCF2
XRL CRCL,#080H
CRCF2:
POP ACC
RET
;-----------------------------------
;-----------------------------------
END
使用说明:
先RESET掉CRC16的两个答案REGISTER
然後把要算的东西统统逐字用caCRC()丢进去,然後从 CRCH跟CRCL两个暂
存变数取得CRC。
着作权宣告:
Wolflord 保留着作权,但无偿开放给PTT ASM 板板友自由修改、使用。
免责声明:
本程式码无偿开放给不特定对象使用,程式作者不担保任何因使用本程式
码导致的任何瑕疵或损失。
--
作别人不愿作的事,是好人!。 作别人不敢作的事,是坏人!。
作别人不能作的事,是天才!。 作别人不会作的事,是…脑残!!
WolfLord
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.218.248
1F:→ WolfLord:有想搞CRC的人可以参考修改...CRC可以有不同种子不同算法 04/26 23:41
2F:→ WolfLord:所以使用的人可以自己修改城自己想要的状态 04/26 23:41
3F:→ ksmrt0123:crc那有什麽种子? polynomial吧 04/27 01:58
4F:推 ruemann:推 04/27 10:55
5F:推 waynecone:感谢大大~拜读中... 04/27 10:58
6F:→ WolfLord:KS:起始除数 ,这就会造成明明是CRC,但是答案不一样 :P 04/27 20:39
7F:推 shawnwang:推~ 04/28 01:12
8F:→ ksmrt0123:w大... 不要害新手啊~ 把polynomial讲清楚才是啊~ 04/28 01:22
9F:→ ksmrt0123:举例来说好了, 今天要实作 CRC-16-DECT (无线电话用的) 04/28 02:09
10F:→ ksmrt0123:其polynomial是 x^16+x^10+x^8+x^7+x^3+1, 程式怎麽改? 04/28 02:11
11F:→ WolfLord:这个程式是高度卡诺图化的,想改polynomial需要重划卡诺 04/28 05:12
12F:→ WolfLord:图,然後修改TEST BIT的部份 :P 04/28 05:12
13F:→ WolfLord:其实也不难,只是须要头脑冷静清楚的去化布林就是了 :P 04/28 05:15
14F:→ ksmrt0123: :P 04/28 20:44
15F:推 ruemann:一般用半查表算是比较折衷的做法.... 04/29 00:54
16F:→ WolfLord:这是向MCU压榨CODE SIZE的艺术啊~~(倒) 04/29 01:14