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

📄 common.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00DE                   .dbline 0 ; func end
 00DE 0895              ret
 00E0                   .dbsym r savedSREG 20 c
 00E0                   .dbsym r Data 18 c
 00E0                   .dbsym r Addr 16 s
 00E0                   .dbend
 00E0                   .dbfunc e EPROMRead _EPROMRead fc
 00E0           ;           Addr -> R16,R17
                        .even
 00E0           _EPROMRead::
 00E0                   .dbline -1
 00E0                   .dbline 351
 00E0           ; }
 00E0           ; 
 00E0           ; u8 EPROMRead(u16 Addr)
 00E0           ; {
 00E0                   .dbline 352
 00E0           L18:
 00E0                   .dbline 352
 00E0           L19:
 00E0                   .dbline 352
 00E0           L21:
 00E0                   .dbline 352
 00E0           ;       for (; bit_is_set(EECR, EEWE); );                       // wait for previous write to finish
 00E0 E199              sbic 0x1c,1
 00E2 FECF              rjmp L18
 00E4                   .dbline 353
 00E4           ;       EEAR = Addr;                                                            // set address
 00E4 1FBB              out 0x1f,R17
 00E6 0EBB              out 0x1e,R16
 00E8                   .dbline 354
 00E8           ;       sbi(EECR, EERE);                                                        // set "read enable" bit
 00E8 E09A              sbi 0x1c,0
 00EA                   .dbline 355
 00EA           ;       EEAR = 0;                                                                       //
 00EA 2224              clr R2
 00EC 3324              clr R3
 00EE 3FBA              out 0x1f,R3
 00F0 2EBA              out 0x1e,R2
 00F2                   .dbline 356
 00F2           ;       return (u8)EEDR;                                                        // return the EEPROM byte
 00F2 0DB3              in R16,0x1d
 00F4                   .dbline -2
 00F4           L17:
 00F4                   .dbline 0 ; func end
 00F4 0895              ret
 00F6                   .dbsym r Addr 16 s
 00F6                   .dbend
 00F6                   .dbfunc e EPROMWrite_Data _EPROMWrite_Data fV
 00F6           ;              c -> R20
 00F6           ;            crc -> R22,R23
 00F6           ;            len -> R10,R11
 00F6           ;            src -> R12,R13
 00F6           ;           Addr -> R14,R15
                        .even
 00F6           _EPROMWrite_Data::
 00F6 0E940000          xcall push_gset5
 00FA 6901              movw R12,R18
 00FC 7801              movw R14,R16
 00FE AA84              ldd R10,y+10
 0100 BB84              ldd R11,y+11
 0102                   .dbline -1
 0102                   .dbline 360
 0102           ; }
 0102           ; 
 0102           ; void EPROMWrite_Data(u16 Addr, u8 *src, u16 len)
 0102           ; {
 0102                   .dbline 364
 0102           ;       u8      c;
 0102           ;       u16     crc;
 0102           ; 
 0102           ;       if (!src)                                                                                       //
 0102 CC20              tst R12
 0104 E1F4              brne L23
 0106 DD20              tst R13
 0108 D1F4              brne L23
 010A           X1:
 010A                   .dbline 365
 010A           ;       {                                                                                                       // fill with '0'
 010A                   .dbline 366
 010A 0AC0              xjmp L28
 010C           L25:
 010C                   .dbline 366
 010C 2227              clr R18
 010E 1701              movw R2,R14
 0110 C101              movw R24,R2
 0112 0196              adiw R24,1
 0114 7C01              movw R14,R24
 0116 8101              movw R16,R2
 0118 D0DF              xcall _EPROMWrite
 011A           L26:
 011A                   .dbline 366
 011A C501              movw R24,R10
 011C 0197              sbiw R24,1
 011E 5C01              movw R10,R24
 0120           L28:
 0120                   .dbline 366
 0120           ;               for (; len; len--) EPROMWrite(Addr++, 0);               // data
 0120 AA20              tst R10
 0122 A1F7              brne L25
 0124 BB20              tst R11
 0126 91F7              brne L25
 0128           X2:
 0128                   .dbline 367
 0128           ;               EPROMWrite(Addr++, 0xff);                                               // crc LS-Byte
 0128 2FEF              ldi R18,255
 012A 1701              movw R2,R14
 012C C101              movw R24,R2
 012E 0196              adiw R24,1
 0130 7C01              movw R14,R24
 0132 8101              movw R16,R2
 0134 C2DF              xcall _EPROMWrite
 0136                   .dbline 368
 0136           ;               EPROMWrite(Addr, 0xff);                                                 // crc MS-Byte
 0136 2FEF              ldi R18,255
 0138 8701              movw R16,R14
 013A BFDF              xcall _EPROMWrite
 013C                   .dbline 369
 013C           ;               return;                                                                                 //
 013C 3AC0              xjmp L22
 013E           L23:
 013E                   .dbline 372
 013E           ;       }
 013E           ; 
 013E           ;       crc = 0xffff;                                                                           // init crc
 013E 6FEF              ldi R22,65535
 0140 7FEF              ldi R23,255
 0142                   .dbline 373
 0142           ;       crc = UpdateFCS_16(crc, 10);                                            // update crc
 0142 2AE0              ldi R18,10
 0144 8B01              movw R16,R22
 0146 0E940000          xcall _UpdateFCS_16
 014A                   .dbline 374
 014A           ;       crc = UpdateFCS_16(crc, (u8)(len & 0xff));                      // update crc
 014A 2A2D              mov R18,R10
 014C 3070              andi R19,0
 014E 0E940000          xcall _UpdateFCS_16
 0152                   .dbline 375
 0152           ;       crc = UpdateFCS_16(crc, (u8)(len >> 8));                        // update crc
 0152 9501              movw R18,R10
 0154 232F              mov R18,R19
 0156 3327              clr R19
 0158 0E940000          xcall _UpdateFCS_16
 015C B801              movw R22,R16
 015E                   .dbline 376
 015E           ;       for (; len; len--)                                                                      //
 015E 12C0              xjmp L32
 0160           L29:
 0160                   .dbline 377
 0160                   .dbline 378
 0160 F601              movw R30,R12
 0162 4191              ld R20,Z+
 0164 6F01              movw R12,R30
 0166                   .dbline 379
 0166 242F              mov R18,R20
 0168 8B01              movw R16,R22
 016A 0E940000          xcall _UpdateFCS_16
 016E B801              movw R22,R16
 0170                   .dbline 380
 0170 242F              mov R18,R20
 0172 1701              movw R2,R14
 0174 C101              movw R24,R2
 0176 0196              adiw R24,1
 0178 7C01              movw R14,R24
 017A 8101              movw R16,R2
 017C 9EDF              xcall _EPROMWrite
 017E                   .dbline 381
 017E           L30:
 017E                   .dbline 376
 017E C501              movw R24,R10
 0180 0197              sbiw R24,1
 0182 5C01              movw R10,R24
 0184           L32:
 0184                   .dbline 376
 0184 AA20              tst R10
 0186 61F7              brne L29
 0188 BB20              tst R11
 018A 51F7              brne L29
 018C           X3:
 018C                   .dbline 382
 018C           ;       {                                                                                                       //
 018C           ;               c = *src++;                                                                             // get byte
 018C           ;               crc = UpdateFCS_16(crc, c);                                             // update crc
 018C           ;               EPROMWrite(Addr++, c);                                                  // save it into the eeprom
 018C           ;       }                                                                                                       //
 018C           ;       crc = ~crc;                                                                                     // finalize the crc
 018C 6095              com R22
 018E 7095              com R23
 0190                   .dbline 383
 0190           ;       EPROMWrite(Addr++, (u8)(crc & 0xff));                           // save LS-Byte of crc
 0190 262F              mov R18,R22
 0192 3070              andi R19,0
 0194 1701              movw R2,R14
 0196 C101              movw R24,R2
 0198 0196              adiw R24,1
 019A 7C01              movw R14,R24
 019C 8101              movw R16,R2
 019E 8DDF              xcall _EPROMWrite
 01A0                   .dbline 384
 01A0           ;       EPROMWrite(Addr++, (u8)(crc >> 8));                                     // save MS-Byte of crc
 01A0 9B01              movw R18,R22
 01A2 232F              mov R18,R19
 01A4 3327              clr R19
 01A6 1701              movw R2,R14
 01A8 C101              movw R24,R2
 01AA 0196              adiw R24,1
 01AC 7C01              movw R14,R24
 01AE 8101              movw R16,R2
 01B0 84DF              xcall _EPROMWrite
 01B2                   .dbline -2
 01B2           L22:
 01B2 0E940000          xcall pop_gset5
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r c 20 c
 01B8                   .dbsym r crc 22 s
 01B8                   .dbsym r len 10 s
 01B8                   .dbsym r src 12 pc
 01B8                   .dbsym r Addr 14 s
 01B8                   .dbend
 01B8                   .dbfunc e EPROMRead_Data _EPROMRead_Data fc
 01B8           ;           crc2 -> R10,R11
 01B8           ;              i -> R14,R15
 01B8           ;              c -> R22
 01B8           ;              j -> R12,R13
 01B8           ;           crc1 -> R20,R21
 01B8           ;            len -> y+16
 01B8           ;           dest -> y+14
 01B8           ;           Addr -> y+12
                        .even
 01B8           _EPROMRead_Data::
 01B8 0E940000          xcall push_arg4
 01BC 0E940000          xcall push_gset5
 01C0 2297              sbiw R28,2
 01C2                   .dbline -1
 01C2                   .dbline 388
 01C2           ; }
 01C2           ; 
 01C2           ; bool EPROMRead_Data(u16 Addr, u8 *dest, u16 len)
 01C2           ; {
 01C2                   .dbline 393
 01C2           ;       u8      c;
 01C2           ;       u16     i, j;
 01C2           ;       u16     crc1, crc2;
 01C2           ; 
 01C2           ;       if (!dest) return false;
 01C2 0E84              ldd R0,y+14
 01C4 1F84              ldd R1,y+15
 01C6 0020              tst R0
 01C8 21F4              brne L34
 01CA 1120              tst R1
 01CC 11F4              brne L34
 01CE           X4:
 01CE                   .dbline 393
 01CE 0027              clr R16
 01D0 65C0              xjmp L33
 01D2           L34:
 01D2                   .dbline 396
 01D2           ; 
 01D2           ;       // first check the data is valid
 01D2           ;       crc1 = 0xffff;                                                                          // init crc
 01D2 4FEF              ldi R20,65535
 01D4 5FEF              ldi R21,255
 01D6                   .dbline 397

⌨️ 快捷键说明

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