[贈碼] ASM CRC16 For Keil C51

看板ASM作者 (呆呆小狼)時間13年前 (2011/04/26 23:31), 編輯推噓4(4012)
留言16則, 5人參與, 最新討論串1/1
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

04/26 23:41, , 1F
有想搞CRC的人可以參考修改...CRC可以有不同種子不同算法
04/26 23:41, 1F

04/26 23:41, , 2F
所以使用的人可以自己修改城自己想要的狀態
04/26 23:41, 2F

04/27 01:58, , 3F
crc那有什麼種子? polynomial吧
04/27 01:58, 3F

04/27 10:55, , 4F
04/27 10:55, 4F

04/27 10:58, , 5F
感謝大大~拜讀中...
04/27 10:58, 5F

04/27 20:39, , 6F
KS:起始除數 ,這就會造成明明是CRC,但是答案不一樣 :P
04/27 20:39, 6F

04/28 01:12, , 7F
推~
04/28 01:12, 7F

04/28 01:22, , 8F
w大... 不要害新手啊~ 把polynomial講清楚才是啊~
04/28 01:22, 8F

04/28 02:09, , 9F
舉例來說好了, 今天要實作 CRC-16-DECT (無線電話用的)
04/28 02:09, 9F

04/28 02:11, , 10F
其polynomial是 x^16+x^10+x^8+x^7+x^3+1, 程式怎麼改?
04/28 02:11, 10F

04/28 05:12, , 11F
這個程式是高度卡諾圖化的,想改polynomial需要重劃卡諾
04/28 05:12, 11F

04/28 05:12, , 12F
圖,然後修改TEST BIT的部份 :P
04/28 05:12, 12F

04/28 05:15, , 13F
其實也不難,只是須要頭腦冷靜清楚的去化布林就是了 :P
04/28 05:15, 13F

04/28 20:44, , 14F
:P
04/28 20:44, 14F

04/29 00:54, , 15F
一般用半查表算是比較折衷的做法....
04/29 00:54, 15F

04/29 01:14, , 16F
這是向MCU壓榨CODE SIZE的藝術啊~~(倒)
04/29 01:14, 16F
文章代碼(AID): #1DjkLI-G (ASM)