资源描述:
《avr汇编百例 - 码制转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、;范例58.EQUDPOINT=$100;DATABLOCKfrom$100to$22bCRCST:LDIR16,2;最末2字节在发送方已清为零(或仍为$0D$0A)MOVR11,R16;在接收方则为对方计算出的CRC校验码(余式)LDIR16,$2CMOVR12,R16;(r11r12)内装入$22C,块长为$12CCRCST1:LDIR26,HIGH(DPOINT)LDIR27,LOW(DPOINT);数据指针CRC0:CLRR14CLRR15LDIR17,$80;16152LDIR18,$05;P(X)=X+X+
2、X+1=$18005CRC1:LDIR16,8MOVR13,R16;8位/字节LDR16,X+CRC2:LSLR16ROLR15ROLR14BRCCCRC3EORR14,R17EORR15,R18;移出位为1时,将寄存器r14r15内容异或立即数$8005CRC3:DECR13;位数减1BRNECRC2DECR12;字节数减1BRNECRC1DECR11BRNECRC1ST-X,R15ST-X,R14;除得余数放在数据块尾部(或将原始数据恢复)!RET;范例58A;DS18B20读出温度数据CRC检测子程序,生成多项式
3、为P(X)=X8+X4+X3+1CRCSTA:LDIXL,$70;温度数据指针CLRXHLDIR16,9;温度数据,上、下限......CRC校验码等共9字节CLRR15;异或除法工作单元LDIR18,$8CCRC1A:LDR14,X+LDIR17,8CRC2A:LSRR14RORR15;位序列右移BRCCCRC3AEORR15,R18;移出位为1时,位序列异或立即数$8CCRC3A:DECR17BRNECRC2A;右移次数减1DECR16BRNECRC1A;块长减1RET;(R15)=0接收正确!;范例59DEMCR
4、C:LDIR27,1;CRC演示程序(校验码16位)CLRR26;数据块首地址为$100DEMLP:STX+,R26;CPIR26,$2A;在$100-$229中充入数据BRNEDEMLPCPIR27,2BRNEDEMLP;$100--$229中充入$00--$FF和$00-$29CLRR16STX+,R16STX,R16;$22A,$22B两单元请除,将计算出余式(即CRC校验码)放在其中RCALLCRCST;在发送方计算出CRC校验码RETEST:RCALLCRCST;在接收方做CRC检测(余式在r14r15)OR
5、R15,R14;r14r15恢复为$0000(或恢复出原数据为正确接收)BRNEERCRCHCRC:RJMPHCRCERCRC:;.;出错处理,要求对方重发;.RJMPRETEST;重新CRC检测.DSEG.ORG$100DPOINT:.BYTE$12C;$00$01$02$03$04$05$06$07$08$09$0a$0b$0c$0d$0e$0f;$10$11$12$13$14$15$16$17$18$19$1a$1b$1c$1d$1e$1f;$20$21$22$23$24$25$26$27$28$29$2a$2b
6、$2c$2d$2e$2f;$30$31$32$33$34$35$36$37$38$39$3a$3b$3c$3d$3e$3f;$40$41$42$43$44$45$46$47$48$49$4a$4b$4c$4d$4e$4f;$50$51$52$53$54$55$56$57$58$59$5a$5b$5c$5d$5e$5f;$60$61$62$63$64$65$66$67$68$69$6a$6b$6c$6d$6e$6f;$70$71$72$73$74$75$76$77$78$79$7a$7b$7c$7d$7e$7f;$80$
7、81$82$83$84$85$86$87$88$89$8a$8b$8c$8d$8e$8f;$90$91$92$93$94$95$96$97$98$99$9a$9b$9c$9d$9e$9f;$a0$a1$a2$a3$a4$a5$a6$a7$a8$a9$aa$ab$ac$ad$ae$af;$b0$b1$b2$b3$b4$b5$b6$b7$b8$b9$ba$bb$bc$bd$be$bf;$c0$c1$c2$c3$c4$c5$c6$c7$c8$c9$ca$cb$cc$cd$ce$cf;$d0$d1$d2$d3$d4$d5$d6
8、$d7$d8$d9$da$db$dc$dd$de$df;$e0$e1$e2$e3$e4$e5$e6$e7$e8$e9$ea$eb$ec$ed$ee$ef;$f0$f1$f2$f3$f4$f5$f6$f7$f8$f9$fa$fb$fc$fd$fe$ff;$00$01$02$03$04$05$06$07$08$09$0a$0b$0c$