📄 assembly.lis
字号:
.text
0068 SPMCR = 0x68
0000
0000 ; void write_page (unsigned int adr, unsigned char function);
0000 ; bits 8:15 adr addresses the page...(must setup RAMPZ beforehand!!!)
0000 _write_page::
0000 21D0 XCALL __WAIT_SPMEN__
0002 F12F MOV R31,R17
0004 E02F MOV R30,R16 ;move address to z pointer (R31=ZH R30=ZL)
0006 20936800 STS SPMCR,R18 ;argument 2 decides function
000A E895 SPM ;perform pagewrite
000C 0895 RET
000E
000E ; void fill_temp_buffer (unsigned int data, unsigned int adr);
000E ; bits 7:1 in adr addresses the word in the page... (2=first word, 4=second word etc..)
000E _fill_temp_buffer::
000E
000E 1AD0 XCALL __WAIT_SPMEN__
0010 F32F MOV R31,R19
0012 E22F MOV R30,R18 ;move adress to z pointer (R31=ZH R30=ZL)
0014 112E MOV R1,R17
0016 002E MOV R0,R16 ;move data to reg 0 and 1
0018 31E0 LDI R19,0x01
001A 30936800 STS SPMCR,R19
001E E895 SPM ;Store program memory
0020 0895 RET
0022
0022 ;unsigned int read_program_memory (unsigned int adr ,unsigned char cmd);
0022 _read_program_memory::
0022 F12F MOV R31,R17 ;R31=ZH R30=ZL
0024 E02F MOV R30,R16 ;move adress to z pointer
0026 20FD SBRC R18,0 ;read lockbits? (second argument=0x09)
0028 20936800 STS SPMCR,R18 ;if so, place second argument in SPMEN register
002C D895 ELPM ;read LSB
002E 002D MOV R16,R0
0030 E395 INC R30
0032 D895 ELPM
0034 102D MOV R17,R0 ;read MSB (ignored when reading lockbits)
0036 0895 RET
0038
0038 _enableRWW::
0038 05D0 XCALL __WAIT_SPMEN__
003A B1E1 LDI R27,0x11
003C B0936800 STS SPMCR,R27
0040 E895 SPM
0042 0895 RET
0044
0044 __WAIT_SPMEN__:
0044 B0916800 LDS R27,SPMCR ; load SPMCR to R27
0048 B0FD SBRC R27,0 ; check SPMEN flag
004A FCCF RJMP __WAIT_SPMEN__ ; wait for SPMEN flag cleared
004C 0895 RET
004E
004E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -