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

📄 assembly.lis

📁 一个AVR单片机BOOTLOADER的例子
💻 LIS
字号:
                                .text
                
 0037           SPMCR = 0x37
 0000           
 0000           ; void write_page (unsigned int adr, unsigned char function);
 0000           _write_page::
 0000 47B7              in r20,SPMCR
 0002 40FD                      sbrc r20,0
 0004 FDCF                      rjmp _write_page 
 0006 F12F                      MOV R31,R17        
 0008 E02F              MOV R30,R16         ;move adress to z pointer (R31=ZH R30=ZL)
 000A 27BF              OUT SPMCR,R18       ;argument 2 decides function
 000C E895              SPM                 ;perform pagewrite
 000E FFFF                      .dw $ffff
 0010 0000                      NOP
 0012 0895              RET
 0014           
 0014           ; void fill_temp_buffer (unsigned int data, unsigned int adr);
 0014           _fill_temp_buffer::
 0014 F32F              MOV R31,R19        
 0016 E22F              MOV R30,R18         ;move adress to z pointer (R31=ZH R30=ZL)
 0018 112E              MOV R1,R17
 001A 002E              MOV R0,R16          ;move data to reg 0 and 1      
 001C 21E0              LDI R18,0x01
 001E 27BF              OUT SPMCR,R18
 0020 E895              SPM            ;Store program memory
 0022 0895              RET      
 0024           
 0024           ;unsigned int read_program_memory (unsigned int adr ,unsigned char cmd);
 0024           _read_program_memory::
 0024 41E1              ldi  r20,0x11
 0026 47BF                      out      SPMCR,r20
 0028 E895                      SPM
 002A FFFF                      .dw $ffff
 002C 0000                      nop                                     ;重新使能RWW扇区
 002E F12F              MOV R31,R17         ;R31=ZH R30=ZL
 0030 E02F              MOV R30,R16         ;move adress to z pointer
 0032 20FD              SBRC R18,0          ;read lockbits? (second argument=0x09)
 0034 27BF              OUT SPMCR,R18       ;if so, place second argument in SPMEN register
 0036 C895              LPM                 ;read LSB
 0038 002D              MOV R16,R0         
 003A E395              INC R30
 003C C895              LPM
 003E 102D              MOV R17,R0          ;read MSB (ignored when reading lockbits)
 0040 0895              RET
 0042           
 0042           ;void write_lock_bits (unsigned char val);
 0042           _write_lock_bits::
 0042 47B7              in r20,SPMCR
 0044 40FD                      sbrc r20,0
 0046 FDCF                      rjmp _write_lock_bits         
 0048 002E              MOV R0,R16   
 004A 19E0              LDI R17,0x09     
 004C 17BF              OUT SPMCR,R17
 004E E895              SPM                ;write lockbits
 0050 FFFF                      .dw $ffff
 0052 0000                      NOP
 0054 0895              RET

⌨️ 快捷键说明

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