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

📄 at45db161d.lis

📁 使用atmel128对45db161读写程序加LM2009R大液晶显示
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0238 FB1D              adc R31,R11
 023A 0081              ldd R16,z+0
 023C 1181              ldd R17,z+1
 023E 4CDF              xcall _spi_write
 0240           L24:
 0240                   .dbline 158
 0240 4F5F              subi R20,255  ; offset = 1
 0242 5F4F              sbci R21,255
 0244           L26:
 0244                   .dbline 158
 0244 4617              cp R20,R22
 0246 5707              cpc R21,R23
 0248 80F3              brlo L23
 024A                   .dbline 161
 024A           ;               spi_write(data[i]);  //写数据
 024A           ;                                
 024A           ;       UNSELECT_CHIP;
 024A C49A              sbi 0x18,4
 024C                   .dbline 161
 024C                   .dbline -2
 024C           L22:
 024C 0E940000          xcall pop_gset3
 0250                   .dbline 0 ; func end
 0250 0895              ret
 0252                   .dbsym r i 20 i
 0252                   .dbsym r size 22 i
 0252                   .dbsym r data 10 pi
 0252                   .dbsym r addr 20 i
 0252                   .dbend
 0252                   .dbfunc e write_page_from_buffer _write_page_from_buffer fV
 0252           ;         buffer -> R22,R23
 0252           ;           page -> R20,R21
                        .even
 0252           _write_page_from_buffer::
 0252 0E940000          xcall push_gset2
 0256 B901              movw R22,R18
 0258 A801              movw R20,R16
 025A                   .dbline -1
 025A                   .dbline 166
 025A           ; }
 025A           ; //========================================================================
 025A           ; //将写缓冲区内容写入到主存储器中指定页
 025A           ; void write_page_from_buffer(uint page,uint buffer)
 025A           ; {
 025A                   .dbline 167
 025A           ;       SELECT_CHIP;
 025A 88B3              in R24,0x18
 025C 8F7E              andi R24,239
 025E 88BB              out 0x18,R24
 0260                   .dbline 167
 0260                   .dbline 169
 0260           ;       
 0260           ;       if(buffer == DF_WRITE_BUFFER) 
 0260 6130              cpi R22,1
 0262 E0E0              ldi R30,0
 0264 7E07              cpc R23,R30
 0266 21F4              brne L28
 0268                   .dbline 170
 0268           ;               spi_write(B2_TO_MM_PAGE_PROG_WITH_ERASE);  //0x86 
 0268 06E8              ldi R16,134
 026A 10E0              ldi R17,0
 026C 35DF              xcall _spi_write
 026E 03C0              xjmp L29
 0270           L28:
 0270                   .dbline 172
 0270           ;       else
 0270           ;               spi_write(B1_TO_MM_PAGE_PROG_WITH_ERASE);  //0x83
 0270 03E8              ldi R16,131
 0272 10E0              ldi R17,0
 0274 31DF              xcall _spi_write
 0276           L29:
 0276                   .dbline 173
 0276           ;       spi_write((uint)(page>>6));  //2个无关位,12位页地址 PA11~PA0 与10个无关位
 0276 26E0              ldi R18,6
 0278 30E0              ldi R19,0
 027A 8A01              movw R16,R20
 027C 0E940000          xcall lsr16
 0280 2BDF              xcall _spi_write
 0282                   .dbline 174
 0282           ;       spi_write((uint)(page<<2));
 0282 8A01              movw R16,R20
 0284 000F              lsl R16
 0286 111F              rol R17
 0288 000F              lsl R16
 028A 111F              rol R17
 028C 25DF              xcall _spi_write
 028E                   .dbline 175
 028E           ;       spi_write(0x00);  // don't cares
 028E 0027              clr R16
 0290 1127              clr R17
 0292 22DF              xcall _spi_write
 0294                   .dbline 177
 0294           ;       
 0294           ;       UNSELECT_CHIP;
 0294 C49A              sbi 0x18,4
 0296                   .dbline 177
 0296                   .dbline 179
 0296           ;       
 0296           ;       df_wait_busy();
 0296 26DF              xcall _df_wait_busy
 0298                   .dbline -2
 0298           L27:
 0298 0E940000          xcall pop_gset2
 029C                   .dbline 0 ; func end
 029C 0895              ret
 029E                   .dbsym r buffer 22 i
 029E                   .dbsym r page 20 i
 029E                   .dbend
 029E                   .dbfunc e df_write_close _df_write_close fV
                        .even
 029E           _df_write_close::
 029E                   .dbline -1
 029E                   .dbline 183
 029E           ; }
 029E           ; //========================================================================
 029E           ; void df_write_close(void)
 029E           ; {
 029E                   .dbline 184
 029E           ;       write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER); //缓冲区内容写入到主存储器
 029E 21E0              ldi R18,1
 02A0 30E0              ldi R19,0
 02A2 00910200          lds R16,_g_CurWritePage
 02A6 10910300          lds R17,_g_CurWritePage+1
 02AA D3DF              xcall _write_page_from_buffer
 02AC                   .dbline -2
 02AC           L30:
 02AC                   .dbline 0 ; func end
 02AC 0895              ret
 02AE                   .dbend
 02AE                   .dbfunc e df_read_close _df_read_close fV
                        .even
 02AE           _df_read_close::
 02AE                   .dbline -1
 02AE                   .dbline 188
 02AE           ; }
 02AE           ; //========================================================================
 02AE           ; void df_read_close(void)
 02AE           ; {
 02AE                   .dbline 189
 02AE           ;       ;//此处不做任何处理
 02AE                   .dbline -2
 02AE           L31:
 02AE                   .dbline 0 ; func end
 02AE 0895              ret
 02B0                   .dbend
 02B0                   .dbfunc e df_read _df_read fV
 02B0           ;           temp -> R10,R11
 02B0           ;           size -> R20,R21
 02B0           ;            buf -> R22,R23
                        .even
 02B0           _df_read::
 02B0 0E940000          xcall push_gset3
 02B4 A901              movw R20,R18
 02B6 B801              movw R22,R16
 02B8 2297              sbiw R28,2
 02BA                   .dbline -1
 02BA                   .dbline 193
 02BA           ; }
 02BA           ; //========================================================================
 02BA           ; void df_read(uint *buf,uint size)
 02BA           ; {
 02BA                   .dbline 196
 02BA           ;       uint temp;
 02BA           ;       
 02BA           ;       if((g_CurReadByte + size) > DF_PAGE_SIZE) //如果当前页未读取数据不够size字节
 02BA 20900400          lds R2,_g_CurReadByte
 02BE 30900500          lds R3,_g_CurReadByte+1
 02C2 240E              add R2,R20
 02C4 351E              adc R3,R21
 02C6 80E1              ldi R24,528
 02C8 92E0              ldi R25,2
 02CA 8215              cp R24,R2
 02CC 9305              cpc R25,R3
 02CE 70F5              brsh L33
 02D0                   .dbline 197
 02D0           ;       {
 02D0                   .dbline 199
 02D0           ;               //读当前页剩余数据
 02D0           ;               temp=DF_PAGE_SIZE - g_CurReadByte;
 02D0 20900400          lds R2,_g_CurReadByte
 02D4 30900500          lds R3,_g_CurReadByte+1
 02D8 5C01              movw R10,R24
 02DA A218              sub R10,R2
 02DC B308              sbc R11,R3
 02DE                   .dbline 200
 02DE           ;               read_buffer(g_CurReadByte,buf,temp);
 02DE B982              std y+1,R11
 02E0 A882              std y+0,R10
 02E2 9B01              movw R18,R22
 02E4 8101              movw R16,R2
 02E6 50D0              xcall _read_buffer
 02E8                   .dbline 203
 02E8           ;               
 02E8           ;               //装入下一页
 02E8           ;               load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
 02E8 2227              clr R18
 02EA 3327              clr R19
 02EC 80910600          lds R24,_g_CurReadPage
 02F0 90910700          lds R25,_g_CurReadPage+1
 02F4 0196              adiw R24,1
 02F6 90930700          sts _g_CurReadPage+1,R25
 02FA 80930600          sts _g_CurReadPage,R24
 02FE 8C01              movw R16,R24
 0300 C6DE              xcall _load_page_to_buffer
 0302                   .dbline 206
 0302           ;               
 0302           ;               //从下一页读剩余数据
 0302           ;               g_CurReadByte=size-temp;
 0302 1A01              movw R2,R20
 0304 2A18              sub R2,R10
 0306 3B08              sbc R3,R11
 0308 30920500          sts _g_CurReadByte+1,R3
 030C 20920400          sts _g_CurReadByte,R2
 0310                   .dbline 207
 0310           ;               read_buffer(0,buf+temp,g_CurReadByte);
 0310 3982              std y+1,R3
 0312 2882              std y+0,R2
 0314 02E0              ldi R16,2
 0316 10E0              ldi R17,0
 0318 9501              movw R18,R10
 031A 0E940000          xcall empy16s
 031E 9801              movw R18,R16
 0320 260F              add R18,R22
 0322 371F              adc R19,R23
 0324 0027              clr R16
 0326 1127              clr R17
 0328 2FD0              xcall _read_buffer
 032A                   .dbline 208
 032A           ;       }
 032A 2AC0              xjmp L34
 032C           L33:
 032C                   .dbline 210
 032C           ;       else                    //如果当前页数据有size字节
 032C           ;       {
 032C                   .dbline 211
 032C           ;               read_buffer(g_CurReadByte,buf,size);
 032C 5983              std y+1,R21
 032E 4883              std y+0,R20
 0330 9B01              movw R18,R22
 0332 00910400          lds R16,_g_CurReadByte
 0336 10910500          lds R17,_g_CurReadByte+1
 033A 26D0              xcall _read_buffer
 033C                   .dbline 212
 033C           ;               g_CurReadByte+=size;
 033C 20900400          lds R2,_g_CurReadByte
 0340 30900500          lds R3,_g_CurReadByte+1
 0344 240E              add R2,R20
 0346 351E              adc R3,R21
 0348 30920500          sts _g_CurReadByte+1,R3
 034C 20920400          sts _g_CurReadByte,R2
 0350                   .dbline 215
 0350           ;               
 0350           ;               //如果当前页数据已全部读完
 0350           ;               if(g_CurReadByte==DF_PAGE_SIZE)
 0350 C101              movw R24,R2
 0352 8031              cpi R24,16
 0354 E2E0              ldi R30,2
 0356 9E07              cpc R25,R30
 0358 99F4              brne L35
 035A                   .dbline 216
 035A           ;               {
 035A                   .dbline 217
 035A           ;                       load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
 035A 2227              clr R18
 035C 3327              clr R19
 035E 80910600          lds R24,_g_CurReadPage
 0362 90910700          lds R25,_g_CurReadPage+1
 0366 0196              adiw R24,1
 0368 90930700          sts _g_CurReadPage+1,R25
 036C 80930600          sts _g_CurReadPage,R24
 0370 8C01              movw R16,R24
 0372 8DDE              xcall _load_page_to_buffer
 0374                   .dbline 218
 0374           ;                       g_CurReadByte=0;                        
 0374 2224              clr R2
 0376 3324              clr R3
 0378 30920500          sts _g_CurReadByte+1,R3
 037C 20920400          sts _g_CurReadByte,R2

⌨️ 快捷键说明

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