📄 assembly.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 + -