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

📄 main.lis

📁 AVR单片机制作U盘的源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0084           ;       mSpiExchange( cmd );  /* 写入命令码 */
 0084 042F              mov R16,R20
 0086 E0DF              xcall _mSpiExchange
 0088                   .dbline 156
 0088           ;       mSpiExchange( len );  /* 写入后续参数的长度 */
 0088 0A2D              mov R16,R10
 008A DEDF              xcall _mSpiExchange
 008C                   .dbline 157
 008C           ;       if ( len ) {  /* 有参数 */
 008C AA20              tst R10
 008E 69F0              breq L25
 0090                   .dbline 157
 0090                   .dbline 158
 0090 6627              clr R22
 0092 09C0              xjmp L30
 0094           L27:
 0094                   .dbline 158
 0094 80E0              ldi R24,<_sendBuff
 0096 90E0              ldi R25,>_sendBuff
 0098 E62F              mov R30,R22
 009A FF27              clr R31
 009C E80F              add R30,R24
 009E F91F              adc R31,R25
 00A0 0081              ldd R16,z+0
 00A2 D2DF              xcall _mSpiExchange
 00A4           L28:
 00A4                   .dbline 158
 00A4 6395              inc R22
 00A6           L30:
 00A6                   .dbline 158
 00A6           ;               for ( i = 0; i != len; i ++ ) mSpiExchange( sendBuff[ i ] );  /* 依次写入参数 */
 00A6 6A15              cp R22,R10
 00A8 A9F7              brne L27
 00AA                   .dbline 159
 00AA           ;       }
 00AA           L25:
 00AA                   .dbline 160
 00AA           ;       PB375_CS_SET;  /* 结束SPI片选 */
 00AA C09A              sbi 0x18,0
 00AC 2CC0              xjmp L32
 00AE           L31:
 00AE                   .dbline 161
 00AE           ;       while ( 1 ) {  /* 处理数据传输,直到操作完成才退出 */
 00AE                   .dbline 163
 00AE           ; 
 00AE           ;               PB375_CS_CLR;  /* 产生SPI片选 */
 00AE C098              cbi 0x18,0
 00B0                   .dbline 164
 00B0           ;               status = mSpiExchange( 0xFF );  /* 写入0xFF作为无效命令码(不应该写其它值),返回模块操作状态 */
 00B0 0FEF              ldi R16,255
 00B2 CADF              xcall _mSpiExchange
 00B4 402F              mov R20,R16
 00B6                   .dbline 165
 00B6           ;               if ( status == 0xFF ) {  /* 模块操作尚未完成,也就是INT#没有中断产生 */
 00B6 0F3F              cpi R16,255
 00B8 21F4              brne L34
 00BA                   .dbline 165
 00BA                   .dbline 166
 00BA           ;                       PB375_CS_SET;  /* 结束SPI片选 */
 00BA C09A              sbi 0x18,0
 00BC                   .dbline 167
 00BC           ;                       mDelaymS( 1 );
 00BC 01E0              ldi R16,1
 00BE AADF              xcall _mDelaymS
 00C0                   .dbline 168
 00C0           ;                       continue;  /* 继续等待模块完成操作 */
 00C0 22C0              xjmp L32
 00C2           L34:
 00C2                   .dbline 171
 00C2           ;               }
 00C2           ; 
 00C2           ;               if ( status == ERR_SUCCESS )  /* 操作成功 */ 
 00C2 4423              tst R20
 00C4 B9F4              brne L36
 00C6                   .dbline 172
 00C6           ;               {  
 00C6                   .dbline 173
 00C6           ;                       i = mSpiExchange( 0 );  /* 返回结果数据的长度,写入0没有意义,可以是任何值 */
 00C6 0027              clr R16
 00C8 BFDF              xcall _mSpiExchange
 00CA 602F              mov R22,R16
 00CC                   .dbline 174
 00CC           ;                       if ( i ) {  /* 有结果数据 */
 00CC 0023              tst R16
 00CE 81F0              breq L38
 00D0                   .dbline 174
 00D0                   .dbline 175
 00D0           ;                               j = 0;
 00D0 AA24              clr R10
 00D2           L40:
 00D2                   .dbline 176
 00D2           ;                               do {  /* 使用do+while结构是因为其效率高于for */
 00D2                   .dbline 177
 00D2           ;                                       recBuff[ j ] = mSpiExchange( 0 );  /* 接收结果数据并保存到参数结构中,写入0没有意义 */
 00D2 0027              clr R16
 00D4 B9DF              xcall _mSpiExchange
 00D6 80E0              ldi R24,<_recBuff
 00D8 90E0              ldi R25,>_recBuff
 00DA EA2D              mov R30,R10
 00DC FF27              clr R31
 00DE E80F              add R30,R24
 00E0 F91F              adc R31,R25
 00E2 0083              std z+0,R16
 00E4                   .dbline 178
 00E4           ;                                       j ++;
 00E4 A394              inc R10
 00E6                   .dbline 179
 00E6           L41:
 00E6                   .dbline 179
 00E6           ;                               } while ( -- i );
 00E6 862F              mov R24,R22
 00E8 8150              subi R24,1
 00EA 682F              mov R22,R24
 00EC 8823              tst R24
 00EE 89F7              brne L40
 00F0                   .dbline 180
 00F0           ;                       }
 00F0           L38:
 00F0                   .dbline 181
 00F0           ;                       PB375_CS_SET;  /* 结束SPI片选 */
 00F0 C09A              sbi 0x18,0
 00F2                   .dbline 182
 00F2           ;                       break;  /* 操作成功返回 */
 00F2 0AC0              xjmp L33
 00F4           L36:
 00F4                   .dbline 185
 00F4           ;               }
 00F4           ;               else   /* 操作失败 */ 
 00F4           ;               {  
 00F4                   .dbline 186
 00F4           ;                       PB375_CS_SET;  /* 结束SPI片选 */
 00F4 C09A              sbi 0x18,0
 00F6                   .dbline 187
 00F6 4238              cpi R20,130
 00F8 11F0              breq L45
 00FA 4531              cpi R20,21
 00FC 29F4              brne L33
 00FE           L45:
 00FE                   .dbline 187
 00FE           ;                       if ( status == ERR_DISK_DISCON || status == ERR_USB_CONNECT ) mDelaymS( 100 );  /* U盘刚刚连接或者断开,应该延时几十毫秒再操作 */
 00FE 04E6              ldi R16,100
 0100 89DF              xcall _mDelaymS
 0102                   .dbline 188
 0102           ;                       break;  /* 操作失败返回 */
 0102 02C0              xjmp L33
 0104           X0:
 0104                   .dbline 190
 0104 C09A              sbi 0x18,0
 0106                   .dbline 191
 0106           L32:
 0106                   .dbline 161
 0106 D3CF              xjmp L31
 0108           L33:
 0108                   .dbline 192
 0108           ;               }
 0108           ;               PB375_CS_SET;  /* 结束SPI片选 */
 0108           ;       }
 0108           ;       return( status );
 0108 042F              mov R16,R20
 010A                   .dbline -2
 010A           L24:
 010A 0E940000          xcall pop_gset3
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbsym r status 20 c
 0110                   .dbsym r i 22 c
 0110                   .dbsym r j 10 c
 0110                   .dbsym r len 10 c
 0110                   .dbsym r cmd 20 c
 0110                   .dbend
 0110                   .dbfunc e mStopIfError _mStopIfError fV
 0110           ;            led -> R20
 0110           ;         iError -> R20
                        .even
 0110           _mStopIfError::
 0110 0E940000          xcall push_gset1
 0114 402F              mov R20,R16
 0116                   .dbline -1
 0116                   .dbline 199
 0116           ; }
 0116           ; 
 0116           ; 
 0116           ; 
 0116           ; /* 检查操作状态,如果错误则显示错误代码并停机 */
 0116           ; void  mStopIfError( unsigned char iError )
 0116           ; {
 0116                   .dbline 201
 0116           ;       unsigned char   led;
 0116           ;       if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
 0116 4423              tst R20
 0118 09F4              brne L47
 011A                   .dbline 201
 011A 05C0              xjmp L46
 011C           L47:
 011C                   .dbline 202
 011C           ;       led=0;
 011C 4427              clr R20
 011E 02C0              xjmp L50
 0120           L49:
 0120                   .dbline 203
 0120                   .dbline 205
 0120 04E6              ldi R16,100
 0122 78DF              xcall _mDelaymS
 0124                   .dbline 207
 0124           L50:
 0124                   .dbline 203
 0124 FDCF              xjmp L49
 0126           X1:
 0126                   .dbline -2
 0126           L46:
 0126 0E940000          xcall pop_gset1
 012A                   .dbline 0 ; func end
 012A 0895              ret
 012C                   .dbsym r led 20 c
 012C                   .dbsym r iError 20 c
 012C                   .dbend
 012C                   .dbfunc e main _main fV
 012C           ;        oprCode -> R20
 012C           ;              i -> R20
                        .even
 012C           _main::
 012C                   .dbline -1
 012C                   .dbline 216
 012C           ;       while ( 1 ) {
 012C           ;               //LED_OUT = led&1;  /* LED闪烁 */
 012C           ;               mDelaymS( 100 );
 012C           ;               //led^=1;
 012C           ;       }
 012C           ; }
 012C           ; 
 012C           ; 
 012C           ; /*
 012C           ;   主程序
 012C           ; 
 012C           ; */
 012C           ; void main( ) 
 012C           ; {
 012C                   .dbline 220
 012C           ;       unsigned char   i;
 012C           ;       unsigned char   oprCode;  // opr code
 012C           ;       
 012C           ;       initPort();
 012C 69DF              xcall _initPort
 012E                   .dbline 221
 012E           ;       mDelaymS( 500 );  /* 延时500毫秒,PB375模块上电后需要500毫秒左右的复位时间 */
 012E 04EF              ldi R16,244
 0130 71DF              xcall _mDelaymS
 0132                   .dbline 222
 0132 4427              clr R20
 0134 09C0              xjmp L56
 0136           L53:
 0136                   .dbline 222
 0136           ;       for ( i = 0; i < 5; i ++ ) {
 0136                   .dbline 223
 0136           ;               mDelaymS( 100 );
 0136 04E6              ldi R16,100
 0138 6DDF              xcall _mDelaymS
 013A                   .dbline 224
 013A           ;               if ( ExecCommand( CMD_DiskReady, 0 ) == ERR_SUCCESS ) 
 013A 2227              clr R18
 013C 01E7              ldi R16,113
 013E 9DDF              xcall _ExecCommand
 0140 0023              tst R16
 0142 09F4              brne L57
 0144                   .dbline 225
 0144           ;                       break;  /* 查询磁盘是否准备好 */
 0144 03C0              xjmp L55
 0146           L57:
 0146                   .dbline 226
 0146           L54:
 0146                   .dbline 222
 0146 4395              inc R20
 0148           L56:
 0148                   .dbline 222
 0148 4530              cpi R20,5
 014A A8F3              brlo L53
 014C           L55:
 014C                   .dbline 229
 014C           ;       }
 014C           ; 
 014C           ;     //各种操作的代码
 014C           ;     oprCode = 5;
 014C 45E0              ldi R20,5
 014E                   .dbline 230
 014E           ;       switch(oprCode)
 014E 5527              clr R21
 0150 4130              cpi R20,1
 0152 E0E0              ldi R30,0
 0154 5E07              cpc R21,R30
 0156 A1F0              breq L62
 0158 4230              cpi R20,2
 015A E0E0              ldi R30,0
 015C 5E07              cpc R21,R30
 015E 01F1              breq L67
 0160 4330              cpi R20,3
 0162 E0E0              ldi R30,0
 0164 5E07              cpc R21,R30
 0166 09F4              brne X4
 0168 4CC0              xjmp L80
 016A           X4:
 016A 4530              cpi R20,5
 016C E0E0              ldi R30,0
 016E 5E07              cpc R21,R30
 0170 09F4              brne X5
 0172 62C0              xjmp L86
 0174           X5:
 0174 4630              cpi R20,6
 0176 E0E0              ldi R30,0
 0178 5E07              cpc R21,R30
 017A 09F4              brne X6
 017C 7DC0              xjmp L95
 017E           X6:
 017E 8AC0              xjmp L100
 0180           X2:
 0180                   .dbline 231
 0180           ;       {
 0180           L62:
 0180                   .dbline 233
 0180           ;        case 1:   //删除文件

⌨️ 快捷键说明

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