看板 ASM 關於我們 聯絡資訊
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
WolfLord:有想搞CRC的人可以參考修改...CRC可以有不同種子不同算法 04/26 23:41
WolfLord:所以使用的人可以自己修改城自己想要的狀態 04/26 23:41
ksmrt0123:crc那有什麼種子? polynomial吧 04/27 01:58
ruemann:推 04/27 10:55
waynecone:感謝大大~拜讀中... 04/27 10:58
WolfLord:KS:起始除數 ,這就會造成明明是CRC,但是答案不一樣 :P 04/27 20:39
shawnwang:推~ 04/28 01:12
ksmrt0123:w大... 不要害新手啊~ 把polynomial講清楚才是啊~ 04/28 01:22
ksmrt0123:舉例來說好了, 今天要實作 CRC-16-DECT (無線電話用的) 04/28 02:09
ksmrt0123:其polynomial是 x^16+x^10+x^8+x^7+x^3+1, 程式怎麼改? 04/28 02:11
WolfLord:這個程式是高度卡諾圖化的,想改polynomial需要重劃卡諾 04/28 05:12
WolfLord:圖,然後修改TEST BIT的部份 :P 04/28 05:12
WolfLord:其實也不難,只是須要頭腦冷靜清楚的去化布林就是了 :P 04/28 05:15
ksmrt0123: :P 04/28 20:44
ruemann:一般用半查表算是比較折衷的做法.... 04/29 00:54
WolfLord:這是向MCU壓榨CODE SIZE的藝術啊~~(倒) 04/29 01:14