📄 main.lis
字号:
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 + -