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

📄 at45db161d.lis

📁 使用atmel128对45db161读写程序加LM2009R大液晶显示
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .even
 00E4           _df_wait_busy::
 00E4                   .dbline -1
 00E4                   .dbline 104
 00E4           ; }
 00E4           ; //=======================================================================
 00E4           ; //检测并等待器件忙状态,8引脚封闭器件没有 RDY/BUSY引脚 为些通过读状态寄存器来检测忙状态
 00E4           ; void df_wait_busy(void)
 00E4           ; {
 00E4                   .dbline 105
 00E4           ;       SELECT_CHIP;
 00E4 88B3              in R24,0x18
 00E6 8F7E              andi R24,239
 00E8 88BB              out 0x18,R24
 00EA                   .dbline 105
 00EA                   .dbline 106
 00EA           ;       spi_write(STATUS_REGISTER);
 00EA 07ED              ldi R16,215
 00EC 10E0              ldi R17,0
 00EE F4DF              xcall _spi_write
 00F0 06C0              xjmp L13
 00F2           L12:
 00F2                   .dbline 108
 00F2           ;       while(1)
 00F2           ;       {
 00F2                   .dbline 109
 00F2           ;               if(spi_write(0) & 0x80) //读取的最高位0时器件忙
 00F2 0027              clr R16
 00F4 1127              clr R17
 00F6 F0DF              xcall _spi_write
 00F8 07FF              sbrs R16,7
 00FA 01C0              rjmp L15
 00FC                   .dbline 110
 00FC           ;                       break;
 00FC 01C0              xjmp L14
 00FE           L15:
 00FE                   .dbline 111
 00FE           L13:
 00FE                   .dbline 107
 00FE F9CF              xjmp L12
 0100           L14:
 0100                   .dbline 112
 0100           ;       }
 0100           ;       UNSELECT_CHIP;
 0100 C49A              sbi 0x18,4
 0102                   .dbline 112
 0102                   .dbline -2
 0102           L11:
 0102                   .dbline 0 ; func end
 0102 0895              ret
 0104                   .dbend
 0104                   .dbfunc e df_write _df_write fV
 0104           ;           temp -> R10,R11
 0104           ;           size -> R20,R21
 0104           ;            buf -> R22,R23
                        .even
 0104           _df_write::
 0104 0E940000          xcall push_gset3
 0108 A901              movw R20,R18
 010A B801              movw R22,R16
 010C 2297              sbiw R28,2
 010E                   .dbline -1
 010E                   .dbline 116
 010E           ; }
 010E           ; //=======================================================================
 010E           ; void df_write(uint *buf,uint size)  //buf 源数据  size 写多少个字节
 010E           ; {
 010E                   .dbline 119
 010E           ;       uint temp;
 010E           ;       
 010E           ;       if((g_CurWriteByte + size) > DF_PAGE_SIZE) //如果当前页未写空间不够size字节
 010E 20900000          lds R2,_g_CurWriteByte
 0112 30900100          lds R3,_g_CurWriteByte+1
 0116 240E              add R2,R20
 0118 351E              adc R3,R21
 011A 80E1              ldi R24,528
 011C 92E0              ldi R25,2
 011E 8215              cp R24,R2
 0120 9305              cpc R25,R3
 0122 08F0              brlo X1
 0124 35C0              xjmp L18
 0126           X1:
 0126                   .dbline 120
 0126           ;       {
 0126                   .dbline 122
 0126           ;               //写当前页剩余空间的数据
 0126           ;               temp=DF_PAGE_SIZE - g_CurWriteByte;
 0126 20900000          lds R2,_g_CurWriteByte
 012A 30900100          lds R3,_g_CurWriteByte+1
 012E 5C01              movw R10,R24
 0130 A218              sub R10,R2
 0132 B308              sbc R11,R3
 0134                   .dbline 123
 0134           ;               write_buffer(g_CurWriteByte,buf,temp); //将数据写入写缓冲区
 0134 B982              std y+1,R11
 0136 A882              std y+0,R10
 0138 9B01              movw R18,R22
 013A 8101              movw R16,R2
 013C 5ED0              xcall _write_buffer
 013E                   .dbline 125
 013E           ;               //保存当前页
 013E           ;               write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);
 013E 21E0              ldi R18,1
 0140 30E0              ldi R19,0
 0142 00910200          lds R16,_g_CurWritePage
 0146 10910300          lds R17,_g_CurWritePage+1
 014A 83D0              xcall _write_page_from_buffer
 014C                   .dbline 126
 014C           ;               g_CurWritePage++;
 014C 80910200          lds R24,_g_CurWritePage
 0150 90910300          lds R25,_g_CurWritePage+1
 0154 0196              adiw R24,1
 0156 90930300          sts _g_CurWritePage+1,R25
 015A 80930200          sts _g_CurWritePage,R24
 015E                   .dbline 127
 015E           ;               load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER);
 015E 21E0              ldi R18,1
 0160 30E0              ldi R19,0
 0162 8C01              movw R16,R24
 0164 94DF              xcall _load_page_to_buffer
 0166                   .dbline 130
 0166           ;               
 0166           ;               //写入到下一页对应缓冲区
 0166           ;               g_CurWriteByte=size-temp;
 0166 1A01              movw R2,R20
 0168 2A18              sub R2,R10
 016A 3B08              sbc R3,R11
 016C 30920100          sts _g_CurWriteByte+1,R3
 0170 20920000          sts _g_CurWriteByte,R2
 0174                   .dbline 131
 0174           ;               write_buffer(0,buf+temp,g_CurWriteByte);
 0174 3982              std y+1,R3
 0176 2882              std y+0,R2
 0178 02E0              ldi R16,2
 017A 10E0              ldi R17,0
 017C 9501              movw R18,R10
 017E 0E940000          xcall empy16s
 0182 9801              movw R18,R16
 0184 260F              add R18,R22
 0186 371F              adc R19,R23
 0188 0027              clr R16
 018A 1127              clr R17
 018C 36D0              xcall _write_buffer
 018E                   .dbline 132
 018E           ;       }
 018E 31C0              xjmp L19
 0190           L18:
 0190                   .dbline 134
 0190           ;       else
 0190           ;       {
 0190                   .dbline 135
 0190           ;               write_buffer(g_CurWriteByte,buf,size);
 0190 5983              std y+1,R21
 0192 4883              std y+0,R20
 0194 9B01              movw R18,R22
 0196 00910000          lds R16,_g_CurWriteByte
 019A 10910100          lds R17,_g_CurWriteByte+1
 019E 2DD0              xcall _write_buffer
 01A0                   .dbline 136
 01A0           ;               g_CurWriteByte+=size;
 01A0 20900000          lds R2,_g_CurWriteByte
 01A4 30900100          lds R3,_g_CurWriteByte+1
 01A8 240E              add R2,R20
 01AA 351E              adc R3,R21
 01AC 30920100          sts _g_CurWriteByte+1,R3
 01B0 20920000          sts _g_CurWriteByte,R2
 01B4                   .dbline 139
 01B4           ;               
 01B4           ;               //缓冲已满,写入到主存储区
 01B4           ;               if(g_CurWriteByte==DF_PAGE_SIZE)
 01B4 C101              movw R24,R2
 01B6 8031              cpi R24,16
 01B8 E2E0              ldi R30,2
 01BA 9E07              cpc R25,R30
 01BC D1F4              brne L20
 01BE                   .dbline 140
 01BE           ;               {
 01BE                   .dbline 141
 01BE           ;                       g_CurWriteByte=0;
 01BE 2224              clr R2
 01C0 3324              clr R3
 01C2 30920100          sts _g_CurWriteByte+1,R3
 01C6 20920000          sts _g_CurWriteByte,R2
 01CA                   .dbline 142
 01CA           ;                       write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);
 01CA 21E0              ldi R18,1
 01CC 30E0              ldi R19,0
 01CE 00910200          lds R16,_g_CurWritePage
 01D2 10910300          lds R17,_g_CurWritePage+1
 01D6 3DD0              xcall _write_page_from_buffer
 01D8                   .dbline 143
 01D8           ;                       g_CurWritePage++;
 01D8 80910200          lds R24,_g_CurWritePage
 01DC 90910300          lds R25,_g_CurWritePage+1
 01E0 0196              adiw R24,1
 01E2 90930300          sts _g_CurWritePage+1,R25
 01E6 80930200          sts _g_CurWritePage,R24
 01EA                   .dbline 144
 01EA           ;                       load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER);                    
 01EA 21E0              ldi R18,1
 01EC 30E0              ldi R19,0
 01EE 8C01              movw R16,R24
 01F0 4EDF              xcall _load_page_to_buffer
 01F2                   .dbline 145
 01F2           ;               }
 01F2           L20:
 01F2                   .dbline 146
 01F2           L19:
 01F2                   .dbline -2
 01F2           L17:
 01F2 2296              adiw R28,2
 01F4 0E940000          xcall pop_gset3
 01F8                   .dbline 0 ; func end
 01F8 0895              ret
 01FA                   .dbsym r temp 10 i
 01FA                   .dbsym r size 20 i
 01FA                   .dbsym r buf 22 pi
 01FA                   .dbend
 01FA                   .dbfunc e write_buffer _write_buffer fV
 01FA           ;              i -> R20,R21
 01FA           ;           size -> R22,R23
 01FA           ;           data -> R10,R11
 01FA           ;           addr -> R20,R21
                        .even
 01FA           _write_buffer::
 01FA 0E940000          xcall push_gset3
 01FE 5901              movw R10,R18
 0200 A801              movw R20,R16
 0202 6E81              ldd R22,y+6
 0204 7F81              ldd R23,y+7
 0206                   .dbline -1
 0206                   .dbline 151
 0206           ;       }       
 0206           ; }
 0206           ; //========================================================================
 0206           ; //将数据写入写缓冲区2  命令 0x87
 0206           ; void write_buffer(uint addr,uint *data,uint size)
 0206           ; {
 0206                   .dbline 153
 0206           ;       uint i;
 0206           ;       SELECT_CHIP;
 0206 88B3              in R24,0x18
 0208 8F7E              andi R24,239
 020A 88BB              out 0x18,R24
 020C                   .dbline 153
 020C                   .dbline 154
 020C           ;       spi_write(BUFFER_2_WRITE);
 020C 07E8              ldi R16,135
 020E 10E0              ldi R17,0
 0210 63DF              xcall _spi_write
 0212                   .dbline 155
 0212           ;       spi_write(0x00);       //写入缓冲区地址15位无关位              
 0212 0027              clr R16
 0214 1127              clr R17
 0216 60DF              xcall _spi_write
 0218                   .dbline 156
 0218           ;       spi_write((uint)(addr>>8));   //写入缓冲区地址
 0218 8A01              movw R16,R20
 021A 012F              mov R16,R17
 021C 1127              clr R17
 021E 5CDF              xcall _spi_write
 0220                   .dbline 157
 0220           ;       spi_write((uint)addr); //写入缓冲区地址  总共写了三个字节地址 24位 15位无关位 
 0220 8A01              movw R16,R20
 0222 5ADF              xcall _spi_write
 0224                   .dbline 158
 0224           ;       for(i=0;i<size;i++)      
 0224 4427              clr R20
 0226 5527              clr R21
 0228 0DC0              xjmp L26
 022A           L23:
 022A                   .dbline 159
 022A 02E0              ldi R16,2
 022C 10E0              ldi R17,0
 022E 9A01              movw R18,R20
 0230 0E940000          xcall empy16s
 0234 F801              movw R30,R16
 0236 EA0D              add R30,R10

⌨️ 快捷键说明

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