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

📄 common.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01D6           ;       crc1 = UpdateFCS_16(crc1, 10);                                          // update crc
 01D6 2AE0              ldi R18,10
 01D8 8A01              movw R16,R20
 01DA 0E940000          xcall _UpdateFCS_16
 01DE                   .dbline 398
 01DE           ;       crc1 = UpdateFCS_16(crc1, (u8)(len & 0xff));            // update crc
 01DE 2889              ldd R18,y+16
 01E0 3989              ldd R19,y+17
 01E2 3070              andi R19,0
 01E4 0E940000          xcall _UpdateFCS_16
 01E8                   .dbline 399
 01E8           ;       crc1 = UpdateFCS_16(crc1, (u8)(len >> 8));                      // update crc
 01E8 2889              ldd R18,y+16
 01EA 3989              ldd R19,y+17
 01EC 232F              mov R18,R19
 01EE 3327              clr R19
 01F0 0E940000          xcall _UpdateFCS_16
 01F4 A801              movw R20,R16
 01F6                   .dbline 400
 01F6           ;       i = Addr;                                                                                       // eeprom address to read from
 01F6 EC84              ldd R14,y+12
 01F8 FD84              ldd R15,y+13
 01FA                   .dbline 401
 01FA           ;       for (j = len; j; j--)                                                           //
 01FA C888              ldd R12,y+16
 01FC D988              ldd R13,y+17
 01FE 0FC0              xjmp L39
 0200           L36:
 0200                   .dbline 402
 0200                   .dbline 403
 0200 1701              movw R2,R14
 0202 C101              movw R24,R2
 0204 0196              adiw R24,1
 0206 7C01              movw R14,R24
 0208 8101              movw R16,R2
 020A 6ADF              xcall _EPROMRead
 020C 602F              mov R22,R16
 020E                   .dbline 404
 020E 262F              mov R18,R22
 0210 8A01              movw R16,R20
 0212 0E940000          xcall _UpdateFCS_16
 0216 A801              movw R20,R16
 0218                   .dbline 405
 0218           L37:
 0218                   .dbline 401
 0218 C601              movw R24,R12
 021A 0197              sbiw R24,1
 021C 6C01              movw R12,R24
 021E           L39:
 021E                   .dbline 401
 021E CC20              tst R12
 0220 79F7              brne L36
 0222 DD20              tst R13
 0224 69F7              brne L36
 0226           X5:
 0226                   .dbline 406
 0226           ;       {                                                                                                       //
 0226           ;               c = EPROMRead(i++);                                                             // read byte from eeprom
 0226           ;               crc1 = UpdateFCS_16(crc1, c);                                   // update crc
 0226           ;       }                                                                                                       //
 0226           ;       crc1 = ~crc1;                                                                           // finalize the crc
 0226 4095              com R20
 0228 5095              com R21
 022A                   .dbline 407
 022A           ;       crc2 = (u16)EPROMRead(i++);                                                     // read LS-Byte of crc
 022A 1701              movw R2,R14
 022C C101              movw R24,R2
 022E 0196              adiw R24,1
 0230 7C01              movw R14,R24
 0232 8101              movw R16,R2
 0234 55DF              xcall _EPROMRead
 0236 A02E              mov R10,R16
 0238 BB24              clr R11
 023A                   .dbline 408
 023A           ;       crc2 |= ((u16)EPROMRead(i)) << 8;                                       // read MS-Byte of crc
 023A 8701              movw R16,R14
 023C 51DF              xcall _EPROMRead
 023E 202E              mov R2,R16
 0240 3324              clr R3
 0242 322C              mov R3,R2
 0244 2224              clr R2
 0246 A228              or R10,R2
 0248 B328              or R11,R3
 024A                   .dbline 409
 024A           ;       if (crc1 != crc2)                                                                       //
 024A 4A15              cp R20,R10
 024C 5B05              cpc R21,R11
 024E F9F0              breq L45
 0250                   .dbline 410
 0250           ;       {                                                                                                       //
 0250                   .dbline 411
 0250           ;               memset(dest, 0, len);                                                   //
 0250 0888              ldd R0,y+16
 0252 1988              ldd R1,y+17
 0254 1982              std y+1,R1
 0256 0882              std y+0,R0
 0258 2227              clr R18
 025A 3327              clr R19
 025C 0E85              ldd R16,y+14
 025E 1F85              ldd R17,y+15
 0260 0E940000          xcall _memset
 0264                   .dbline 412
 0264           ;               return false;                                                                   // data is invalid
 0264 0027              clr R16
 0266 1AC0              xjmp L33
 0268           X6:
 0268                   .dbline 416
 0268           L42:
 0268                   .dbline 416
 0268 2C84              ldd R2,y+12
 026A 3D84              ldd R3,y+13
 026C C101              movw R24,R2
 026E 0196              adiw R24,1
 0270 9D87              std y+13,R25
 0272 8C87              std y+12,R24
 0274 8101              movw R16,R2
 0276 34DF              xcall _EPROMRead
 0278 202E              mov R2,R16
 027A EE85              ldd R30,y+14
 027C FF85              ldd R31,y+15
 027E 2192              st Z+,R2
 0280 FF87              std y+15,R31
 0282 EE87              std y+14,R30
 0284           L43:
 0284                   .dbline 416
 0284 8889              ldd R24,y+16
 0286 9989              ldd R25,y+17
 0288 0197              sbiw R24,1
 028A 998B              std y+17,R25
 028C 888B              std y+16,R24
 028E           L45:
 028E                   .dbline 416
 028E           ;       }                                                                                                       //
 028E           ; 
 028E           ;       // go get the data from the eeprom
 028E           ;       for (; len; len--) *dest++ = EPROMRead(Addr++);         // read byte from eeprom
 028E 0888              ldd R0,y+16
 0290 1988              ldd R1,y+17
 0292 0020              tst R0
 0294 49F7              brne L42
 0296 1120              tst R1
 0298 39F7              brne L42
 029A           X7:
 029A                   .dbline 418
 029A           ;                                                                                                               //
 029A           ;       return true;                                                                            // data is valid
 029A 01E0              ldi R16,1
 029C                   .dbline -2
 029C           L33:
 029C 2296              adiw R28,2
 029E 0E940000          xcall pop_gset5
 02A2 2496              adiw R28,4
 02A4                   .dbline 0 ; func end
 02A4 0895              ret
 02A6                   .dbsym r crc2 10 s
 02A6                   .dbsym r i 14 s
 02A6                   .dbsym r c 22 c
 02A6                   .dbsym r j 12 s
 02A6                   .dbsym r crc1 20 s
 02A6                   .dbsym l len 16 s
 02A6                   .dbsym l dest 14 pc
 02A6                   .dbsym l Addr 12 s
 02A6                   .dbend
 02A6                   .dbfunc e Set_UnitID _Set_UnitID fV
 02A6           ;         UnitID -> y+2
 02A6           ;              i -> R22,R23
 02A6           ;              s -> R20,R21
                        .even
 02A6           _Set_UnitID::
 02A6 0E940000          xcall push_gset2
 02AA A801              movw R20,R16
 02AC A297              sbiw R28,34
 02AE                   .dbline -1
 02AE                   .dbline 429
 02AE           ; }
 02AE           ; 
 02AE           ; #endif
 02AE           ; 
 02AE           ; // *********************************************************************************
 02AE           ; // set/get the unit id
 02AE           ; 
 02AE           ; #ifdef CPU_ATmega128
 02AE           ; 
 02AE           ; void Set_UnitID(char *s)
 02AE           ; {
 02AE                   .dbline 434
 02AE           ;       int i;
 02AE           ; 
 02AE           ;       char    UnitID[Unit_ID_Len];
 02AE           ; 
 02AE           ;       if (!s)                                                                                                                 //
 02AE 4030              cpi R20,0
 02B0 4507              cpc R20,R21
 02B2 51F4              brne L47
 02B4           X8:
 02B4                   .dbline 435
 02B4           ;       {                                                                                                                               //
 02B4                   .dbline 436
 02B4           ;               EPROMWrite_Data((u16)&Unit_ID, 0, Unit_ID_Len);                         //
 02B4 80E2              ldi R24,32
 02B6 90E0              ldi R25,0
 02B8 9983              std y+1,R25
 02BA 8883              std y+0,R24
 02BC 2227              clr R18
 02BE 3327              clr R19
 02C0 00E0              ldi R16,<_Unit_ID
 02C2 10E0              ldi R17,>_Unit_ID
 02C4 18DF              xcall _EPROMWrite_Data
 02C6                   .dbline 437
 02C6           ;               return;                                                                                                         //
 02C6 27C0              xjmp L46
 02C8           L47:
 02C8                   .dbline 440
 02C8           ;       }                                                                                                                               //
 02C8           ; 
 02C8           ;       memset(UnitID, 0, Unit_ID_Len);                                                                 //
 02C8 80E2              ldi R24,32
 02CA 90E0              ldi R25,0
 02CC 9983              std y+1,R25
 02CE 8883              std y+0,R24
 02D0 2227              clr R18
 02D2 3327              clr R19
 02D4 8E01              movw R16,R28
 02D6 0E5F              subi R16,254  ; offset = 2
 02D8 1F4F              sbci R17,255
 02DA 0E940000          xcall _memset
 02DE                   .dbline 441
 02DE           ;       i = strlen(s);                                                                                                  //
 02DE 8A01              movw R16,R20
 02E0 0E940000          xcall _strlen
 02E4 B801              movw R22,R16
 02E6                   .dbline 442
 02E6           ;       if (i >= Unit_ID_Len) i = Unit_ID_Len - 1;                                              //
 02E6 0032              cpi R16,32
 02E8 E0E0              ldi R30,0
 02EA 1E07              cpc R17,R30
 02EC 14F0              brlt L49
 02EE                   .dbline 442
 02EE 6FE1              ldi R22,31
 02F0 70E0              ldi R23,0
 02F2           L49:
 02F2                   .dbline 443
 02F2           ;       strncpy(UnitID, s, i);                                                                                  //
 02F2 7983              std y+1,R23
 02F4 6883              std y+0,R22
 02F6 9A01              movw R18,R20
 02F8 8E01              movw R16,R28
 02FA 0E5F              subi R16,254  ; offset = 2
 02FC 1F4F              sbci R17,255
 02FE 0E940000          xcall _strncpy
 0302                   .dbline 444
 0302           ;       EPROMWrite_Data((u16)&Unit_ID, (u8*)UnitID, Unit_ID_Len);               // write it to eeprom
 0302 80E2              ldi R24,32
 0304 90E0              ldi R25,0
 0306 9983              std y+1,R25
 0308 8883              std y+0,R24
 030A 9E01              movw R18,R28
 030C 2E5F              subi R18,254  ; offset = 2
 030E 3F4F              sbci R19,255
 0310 00E0              ldi R16,<_

⌨️ 快捷键说明

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