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

📄 crc16.ls1

📁 c8051f310xmodembootloader.rar
💻 LS1
📖 第 1 页 / 共 4 页
字号:
                     232     ?PR?_cksum?CRC16     SEGMENT CODE 
                     233     ?XD?_cksum?CRC16     SEGMENT XDATA OVERLAYABLE 
                     234             EXTRN   CODE (?C?CLDPTR)
                     235             EXTRN   CODE (?C?LSTKXDATA)
                     236             EXTRN   CODE (?C?ILDIX)
                     237             EXTRN   CODE (?C?LSTXDATA)
                     238             EXTRN   CODE (?C?ULSHR)
                     239             PUBLIC  _cksum
                     240             PUBLIC  _cal_crc
                     241     
----                 242             RSEG  ?XD?_cksum?CRC16
0000                 243     ?_cksum?BYTE:
0000                 244          length?145:   DS   2
0002                 245             ORG  2
0002                 246             sum?146:   DS   4
0006                 247             ORG  6
0006                 248               i?147:   DS   2
0008                 249             ORG  8
0008                 250             ptr?148:   DS   2
                     251     
----                 252             RSEG  ?XD?_cal_crc?CRC16
0000                 253     ?_cal_crc?BYTE:
0000                 254             len?041:   DS   1
0001                 255             ORG  1
0001                 256               i?042:   DS   1
A51 MACRO ASSEMBLER  CRC16                                                                08/03/2009 16:57:29 PAGE     5

                     257     ; /******************************************************************************
                     258     ; ** 函数: cal_crc
                     259     ; ** 入参: unsigned char *ptr, unsigned char len
                     260     ; ** 返回: unsigned int crc
                     261     ; ** 作者: jerkoh
                     262     ; ** 说明:CRC16-CCITT x16+x12+x5+1    1021  初始crc=0; crc=0xffff
                     263     ;          CRC寄存器组初始化为全"0"(0x0000)。
                     264     ;                注意:CRC寄存器组初始化全为1时,最后CRC应取反    
                     265     ; ******************************************************************************/
                     266     ; #include "global.h"
                     267     ; 
                     268     ; 
                     269     ; unsigned int cal_crc(unsigned char *ptr, unsigned char len)
                     270     
----                 271             RSEG  ?PR?_cal_crc?CRC16
0000                 272     _cal_crc:
                     273             USING   0
                     274                             ; SOURCE LINE # 13
0000 900000   F      275             MOV     DPTR,#len?041
0003 ED              276             MOV     A,R5
0004 F0              277             MOVX    @DPTR,A
                     278     ;---- Variable 'ptr?040' assigned to Register 'R1/R2/R3' ----
                     279     ; {
                     280                             ; SOURCE LINE # 14
                     281     ;   unsigned char i;
                     282     ;   unsigned int crc=0xffff;
                     283                             ; SOURCE LINE # 16
                     284     ;---- Variable 'crc?043' assigned to Register 'R6/R7' ----
0005 74FF            285             MOV     A,#0FFH
0007 FF              286             MOV     R7,A
0008 FE              287             MOV     R6,A
0009                 288     ?C0001:
                     289     ; 
                     290     ;   while(len--!=0)
                     291                             ; SOURCE LINE # 18
0009 900000   F      292             MOV     DPTR,#len?041
000C E0              293             MOVX    A,@DPTR
000D FD              294             MOV     R5,A
000E 14              295             DEC     A
000F F0              296             MOVX    @DPTR,A
0010 ED              297             MOV     A,R5
0011 6049            298             JZ      ?C0002
                     299     ;    {
                     300                             ; SOURCE LINE # 19
                     301     ;     for(i=0x80;i!=0;i/=2)                       /*8字节*/
                     302                             ; SOURCE LINE # 20
0013 A3              303             INC     DPTR
0014 7480            304             MOV     A,#080H
0016 F0              305             MOVX    @DPTR,A
0017                 306     ?C0003:
0017 900000   F      307             MOV     DPTR,#i?042
001A E0              308             MOVX    A,@DPTR
001B 6036            309             JZ      ?C0004
                     310     ;         {
                     311                             ; SOURCE LINE # 21
                     312     ;           if((crc&0x8000)!=0)
                     313                             ; SOURCE LINE # 22
001D EE              314             MOV     A,R6
001E 30E70F          315             JNB     ACC.7,?C0006
                     316     ;                 {
                     317                             ; SOURCE LINE # 23
                     318     ;                  crc*=2;
                     319                             ; SOURCE LINE # 24
0021 EF              320             MOV     A,R7
0022 25E0            321             ADD     A,ACC
0024 FF              322             MOV     R7,A
A51 MACRO ASSEMBLER  CRC16                                                                08/03/2009 16:57:29 PAGE     6

0025 EE              323             MOV     A,R6
0026 33              324             RLC     A
                     325     ;                  crc^=0x1021;                           /*左移异或CRC*/
                     326                             ; SOURCE LINE # 25
0027 6410            327             XRL     A,#010H
0029 FE              328             MOV     R6,A
002A EF              329             MOV     A,R7
002B 6421            330             XRL     A,#021H
002D FF              331             MOV     R7,A
                     332     ;                 }
                     333                             ; SOURCE LINE # 26
002E 8007            334             SJMP    ?C0007
0030                 335     ?C0006:
                     336     ;               else
                     337     ;                 {
                     338                             ; SOURCE LINE # 28
                     339     ;                 crc*=2;
                     340                             ; SOURCE LINE # 29
0030 EF              341             MOV     A,R7
0031 25E0            342             ADD     A,ACC
0033 FF              343             MOV     R7,A
0034 EE              344             MOV     A,R6
0035 33              345             RLC     A
0036 FE              346             MOV     R6,A
                     347     ;                 }
                     348                             ; SOURCE LINE # 30
0037                 349     ?C0007:
                     350     ;               if((*ptr&i)!=0)  crc^=0x1021;  
                     351                             ; SOURCE LINE # 31
0037 120000   F      352             LCALL   ?C?CLDPTR
003A FD              353             MOV     R5,A
003B 900000   F      354             MOV     DPTR,#i?042
003E E0              355             MOVX    A,@DPTR
003F 5D              356             ANL     A,R5
0040 6008            357             JZ      ?C0005
0042 EE              358             MOV     A,R6
0043 6410            359             XRL     A,#010H
0045 FE              360             MOV     R6,A
0046 EF              361             MOV     A,R7
0047 6421            362             XRL     A,#021H
0049 FF              363             MOV     R7,A
                     364     ;         }
                     365                             ; SOURCE LINE # 32
004A                 366     ?C0005:
004A 900000   F      367             MOV     DPTR,#i?042
004D E0              368             MOVX    A,@DPTR
004E C3              369             CLR     C
004F 13              370             RRC     A
0050 F0              371             MOVX    @DPTR,A
0051 80C4            372             SJMP    ?C0003
0053                 373     ?C0004:
                     374     ;         ptr++;
                     375                             ; SOURCE LINE # 33
0053 7401            376             MOV     A,#01H
0055 29              377             ADD     A,R1
0056 F9              378             MOV     R1,A
0057 E4              379             CLR     A
0058 3A              380             ADDC    A,R2
0059 FA              381             MOV     R2,A
                     382     ;     
                     383     ;    }
                     384                             ; SOURCE LINE # 35
005A 80AD            385             SJMP    ?C0001
005C                 386     ?C0002:
                     387     ;    return(crc);
                     388                             ; SOURCE LINE # 36
A51 MACRO ASSEMBLER  CRC16                                                                08/03/2009 16:57:29 PAGE     7

                     389     ; }
                     390                             ; SOURCE LINE # 37
005C                 391     ?C0009:
005C 22              392             RET     
                     393     ; END OF _cal_crc
                     394     
                     395     ; 
                     396     ; 
                     397     ; /******************************************************************************
                     398     ; ** 函数: cksum()
                     399     ; ** 入参: rxdata
                     400     ; ** 返回: sum
                     401     ; ** 说明:
                     402     ; ******************************************************************************/
                     403     ;  UINT cksum(UCHAR xdata *check,UINT length) //计算校验和          
                     404     
----                 405             RSEG  ?PR?_cksum?CRC16
0000                 406     _cksum:
                     407             USING   0
                     408                             ; SOURCE LINE # 46
0000 900000   F      409             MOV     DPTR,#length?145
0003 EC              410             MOV     A,R4
0004 F0              411             MOVX    @DPTR,A
0005 A3              412             INC     DPTR
0006 ED              413             MOV     A,R5
0007 F0              414             MOVX    @DPTR,A
                     415     ;---- Variable 'check?144' assigned to Register 'R2/R3' ----
0008 AB07            416             MOV     R3,AR7
000A AA06            417             MOV     R2,AR6
                     418     ; {
                     419                             ; SOURCE LINE # 47
                     420     ;       LONG sum=0;
                     421                             ; SOURCE LINE # 48
000C A3              422             INC     DPTR
000D 120000   F      423             LCALL   ?C?LSTKXDATA
0010 00              424             DB      00H
0011 00              425             DB      00H
0012 00              426             DB      00H
0013 00              427             DB      00H
                     428     ;       UINT i;
                     429     ;       UINT xdata *ptr; 
                     430     ;     ptr=(UINT xdata *)check;
                     431                             ; SOURCE LINE # 51
0014 AF03            432             MOV     R7,AR3
0016 900000   F      433             MOV     DPTR,#ptr?148
0019 EA              434             MOV     A,R2
001A F0              435             MOVX    @DPTR,A
001B A3              436             INC     DPTR
001C EF              437             MOV     A,R7
001D F0              438             MOVX    @DPTR,A
                     439     ;       for (i=0;i<(length)/2;i++)
                     440                             ; SOURCE LINE # 52
001E E4              441             CLR     A
001F 900000   F      442             MOV     DPTR,#i?147
0022 F0              443             MOVX    @DPTR,A
0023 A3              444             INC     DPTR
0024 F0              445             MOVX    @DPTR,A
0025                 446     ?C0010:
0025 900000   F      447             MOV     DPTR,#length?145
0028 E0              448             MOVX    A,@DPTR
0029 C3              449             CLR     C
002A 13              450             RRC     A
002B FE              451             MOV     R6,A
002C A3              452             INC     DPTR
002D E0              453             MOVX    A,@DPTR
002E 13              454             RRC     A
A51 MACRO ASSEMBLER  CRC16                                                                08/03/2009 16:57:29 PAGE     8

002F FF              455             MOV     R7,A
0030 C3              456             CLR     C
0031 900000   F      457             MOV     DPTR,#i?147+01H
0034 E0              458             MOVX    A,@DPTR
0035 9F              459             SUBB    A,R7
0036 900000   F      460             MOV     DPTR,#i?147
0039 E0              461             MOVX    A,@DPTR
003A 9E              462             SUBB    A,R6
003B 504B            463             JNC     ?C0011
                     464     ;       {
                     465                             ; SOURCE LINE # 53
                     466     ;               sum+=*ptr++;
                     467                             ; SOURCE LINE # 54
003D 900000   F      468             MOV     DPTR,#sum?146
0040 E0              469             MOVX    A,@DPTR

⌨️ 快捷键说明

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