📄 avrmain.lst
字号:
(0190) PB375_CS_SET; /* 结束SPI片选 */
00F2 9AC0 SBI 0x18,0
00F3 CFD3 RJMP 0x00C7
(0191) }
(0192) return( status );
00F4 2F04 MOV R16,R20
00F5 940E01C8 CALL pop_gset3
00F7 9508 RET
_mStopIfError:
led --> R20
iError --> R20
00F8 940E01D3 CALL push_gset1
00FA 2F40 MOV R20,R16
(0193) }
(0194)
(0195)
(0196)
(0197) /* 检查操作状态,如果错误则显示错误代码并停机 */
(0198) void mStopIfError( unsigned char iError )
(0199) {
(0200) unsigned char led;
(0201) if ( iError == ERR_SUCCESS ) return; /* 操作成功 */
00FB 2344 TST R20
00FC F409 BNE 0x00FE
00FD C005 RJMP 0x0103
(0202) led=0;
00FE 2744 CLR R20
00FF C002 RJMP 0x0102
(0203) while ( 1 ) {
(0204) //LED_OUT = led&1; /* LED闪烁 */
(0205) mDelaymS( 100 );
0100 E604 LDI R16,0x64
0101 DF78 RCALL _mDelaymS
0102 CFFD RJMP 0x0100
0103 940E01D6 CALL pop_gset1
0105 9508 RET
(0206) //led^=1;
(0207) }
(0208) }
(0209)
(0210)
(0211) /*
(0212) 主程序
(0213)
(0214) */
(0215) void main( )
(0216) {
(0217) unsigned char i;
(0218) unsigned char oprCode; // opr code
(0219)
(0220) initPort();
_main:
oprCode --> R20
i --> R20
0106 DF69 RCALL _initPort
(0221) mDelaymS( 500 ); /* 延时500毫秒,PB375模块上电后需要500毫秒左右的复位时间 */
0107 EF04 LDI R16,0xF4
0108 DF71 RCALL _mDelaymS
(0222) for ( i = 0; i < 5; i ++ ) {
0109 2744 CLR R20
010A C009 RJMP 0x0114
(0223) mDelaymS( 100 );
010B E604 LDI R16,0x64
010C DF6D RCALL _mDelaymS
(0224) if ( ExecCommand( CMD_DiskReady, 0 ) == ERR_SUCCESS )
010D 2722 CLR R18
010E E701 LDI R16,0x71
010F DF9D RCALL _ExecCommand
0110 2300 TST R16
0111 F409 BNE 0x0113
(0225) break; /* 查询磁盘是否准备好 */
0112 C003 RJMP 0x0116
0113 9543 INC R20
0114 3045 CPI R20,5
0115 F3A8 BCS 0x010B
(0226) }
(0227)
(0228) //各种操作的代码
(0229) oprCode = 5;
0116 E045 LDI R20,5
(0230) switch(oprCode)
0117 2755 CLR R21
0118 3041 CPI R20,1
0119 E0E0 LDI R30,0
011A 075E CPC R21,R30
011B F0A1 BEQ 0x0130
011C 3042 CPI R20,2
011D E0E0 LDI R30,0
011E 075E CPC R21,R30
011F F101 BEQ 0x0140
0120 3043 CPI R20,3
0121 E0E0 LDI R30,0
0122 075E CPC R21,R30
0123 F409 BNE 0x0125
0124 C04C RJMP 0x0171
0125 3045 CPI R20,5
0126 E0E0 LDI R30,0
0127 075E CPC R21,R30
0128 F409 BNE 0x012A
0129 C062 RJMP 0x018C
012A 3046 CPI R20,6
012B E0E0 LDI R30,0
012C 075E CPC R21,R30
012D F409 BNE 0x012F
012E C07D RJMP 0x01AC
012F C08A RJMP 0x01BA
(0231) {
(0232) case 1: //删除文件
(0233) sendBuff[0] = 92;
0130 E58C LDI R24,0x5C
0131 9380012A STS sendBuff,R24
(0234) strcpy(sendBuff+1,"1.DAT");
0133 EA24 LDI R18,0xA4
0134 E030 LDI R19,0
0135 E20B LDI R16,0x2B
0136 E011 LDI R17,1
0137 940E01BC CALL _strcpy
(0235) if ( ExecCommand( CMD_FileErase, 7 ) == ERR_SUCCESS )
0139 E027 LDI R18,7
013A E606 LDI R16,0x66
013B DF71 RCALL _ExecCommand
013C 2300 TST R16
013D F009 BEQ 0x013F
013E C07B RJMP 0x01BA
(0236) {
(0237) //操作成功
(0238) }
(0239) else
(0240) {
(0241) //操作失败
(0242) }
(0243) break;
013F C07A RJMP 0x01BA
(0244) case 2://写入数据到文件
(0245) sendBuff[0] = 92;
0140 E58C LDI R24,0x5C
0141 9380012A STS sendBuff,R24
(0246) strcpy(sendBuff+1,"1.DAT");
0143 EA24 LDI R18,0xA4
0144 E030 LDI R19,0
0145 E20B LDI R16,0x2B
0146 E011 LDI R17,1
0147 940E01BC CALL _strcpy
(0247) if ( ExecCommand( CMD_FileOpen, 7 ) == ERR_SUCCESS )
0149 E027 LDI R18,7
014A E604 LDI R16,0x64
014B DF61 RCALL _ExecCommand
014C 2300 TST R16
014D F009 BEQ 0x014F
014E C06B RJMP 0x01BA
(0248) {
(0249) //加一个字节定位
(0250) sendBuff[0] = 0;
014F 2422 CLR R2
0150 9220012A STS sendBuff,R2
(0251) sendBuff[1] = 0;
0152 9220012B STS sendBuff+1,R2
(0252) sendBuff[2] = 0;
0154 9220012C STS sendBuff+2,R2
(0253) sendBuff[3] = 0;
0156 9220012D STS sendBuff+3,R2
(0254)
(0255) if ( ExecCommand( CMD_ByteLocate, 4 ) == ERR_SUCCESS )
0158 E024 LDI R18,4
0159 E70A LDI R16,0x7A
015A DF52 RCALL _ExecCommand
015B 2300 TST R16
015C F009 BEQ 0x015E
015D C05C RJMP 0x01BA
(0256) {
(0257) sendBuff[0] = 19;//写入文件字节大小
015E E183 LDI R24,0x13
015F 9380012A STS sendBuff,R24
(0258) strcpy(sendBuff+1,"111111111111111111111111111111111111");
0161 E72F LDI R18,0x7F
0162 E030 LDI R19,0
0163 E20B LDI R16,0x2B
0164 E011 LDI R17,1
0165 940E01BC CALL _strcpy
(0259) if ( ExecCommand( CMD_ByteWrite, 20 ) == ERR_SUCCESS )
0167 E124 LDI R18,0x14
0168 E70C LDI R16,0x7C
0169 DF43 RCALL _ExecCommand
016A 2300 TST R16
016B F009 BEQ 0x016D
016C C04D RJMP 0x01BA
(0260) ExecCommand( CMD_FileClose, 1 );
016D E021 LDI R18,1
016E E607 LDI R16,0x67
016F DF3D RCALL _ExecCommand
(0261) }
(0262)
(0263) }
(0264) else
(0265) {
(0266) //操作失败
(0267) }
(0268) break;
0170 C049 RJMP 0x01BA
(0269) case 3://读取文件
(0270) sendBuff[0] = 92;
0171 E58C LDI R24,0x5C
0172 9380012A STS sendBuff,R24
(0271) strcpy(sendBuff+1,"1.DAT");
0174 EA24 LDI R18,0xA4
0175 E030 LDI R19,0
0176 E20B LDI R16,0x2B
0177 E011 LDI R17,1
0178 940E01BC CALL _strcpy
(0272) if ( ExecCommand( CMD_FileOpen, 11 ) == ERR_SUCCESS )
017A E02B LDI R18,0xB
017B E604 LDI R16,0x64
017C DF30 RCALL _ExecCommand
017D 2300 TST R16
017E F009 BEQ 0x0180
017F C03A RJMP 0x01BA
(0273) {
(0274) sendBuff[0] = 11;//读取的字节数量
0180 E08B LDI R24,0xB
0181 9380012A STS sendBuff,R24
(0275) if (ExecCommand( CMD_ByteRead, 1 ) == ERR_SUCCESS )
0183 E021 LDI R18,1
0184 E70B LDI R16,0x7B
0185 DF27 RCALL _ExecCommand
0186 2300 TST R16
0187 F591 BNE 0x01BA
(0276) ExecCommand( CMD_FileClose, 1 );//读取数据保持在recBuf[]
0188 E021 LDI R18,1
0189 E607 LDI R16,0x67
018A DF22 RCALL _ExecCommand
(0277)
(0278) }
(0279) else
(0280) {
(0281) //操作失败
(0282) }
(0283) break;
018B C02E RJMP 0x01BA
(0284) case 5://创建文件
(0285) sendBuff[0] = 92;
018C E58C LDI R24,0x5C
018D 9380012A STS sendBuff,R24
(0286) strcpy(sendBuff+1,"12345.DAT");
018F E725 LDI R18,0x75
0190 E030 LDI R19,0
0191 E20B LDI R16,0x2B
0192 E011 LDI R17,1
0193 940E01BC CALL _strcpy
(0287) if ( ExecCommand( CMD_FileCreate, 11 ) == ERR_SUCCESS )
0195 E02B LDI R18,0xB
0196 E605 LDI R16,0x65
0197 DF15 RCALL _ExecCommand
0198 2300 TST R16
0199 F501 BNE 0x01BA
(0288) {
(0289) sendBuff[0] = 19;//写入文件字节大小
019A E183 LDI R24,0x13
019B 9380012A STS sendBuff,R24
(0290) strcpy(sendBuff+1,"shenzhen diwuyuansu ");
019D E620 LDI R18,0x60
019E E030 LDI R19,0
019F E20B LDI R16,0x2B
01A0 E011 LDI R17,1
01A1 940E01BC CALL _strcpy
(0291) if ( ExecCommand( CMD_ByteWrite, 20 ) == ERR_SUCCESS )
01A3 E124 LDI R18,0x14
01A4 E70C LDI R16,0x7C
01A5 DF07 RCALL _ExecCommand
01A6 2300 TST R16
01A7 F491 BNE 0x01BA
(0292) ExecCommand( CMD_FileClose, 1 ); //操作成功
01A8 E021 LDI R18,1
01A9 E607 LDI R16,0x67
01AA DF02 RCALL _ExecCommand
(0293) }
(0294) else
(0295) {
(0296) //操作失败
(0297) }
(0298) break;
01AB C00E RJMP 0x01BA
(0299) case 6://写入文件
(0300) sendBuff[0] = 92;
01AC E58C LDI R24,0x5C
01AD 9380012A STS sendBuff,R24
(0301) strcpy(sendBuff+1,"1.DAT");
01AF EA24 LDI R18,0xA4
01B0 E030 LDI R19,0
01B1 E20B LDI R16,0x2B
01B2 E011 LDI R17,1
01B3 940E01BC CALL _strcpy
(0302) if ( ExecCommand( CMD_FileErase, 7 ) == ERR_SUCCESS )
01B5 E027 LDI R18,7
01B6 E606 LDI R16,0x66
01B7 DEF5 RCALL _ExecCommand
01B8 2300 TST R16
01B9 F401 BNE 0x01BA
(0303) {
(0304) //操作成功
(0305) }
(0306) else
(0307) {
(0308) //操作失败
(0309) }
(0310) break;
(0311) default :break;
(0312) }
(0313) while ( 1 )
FILE: <library>
01BA CFFF RJMP 0x01BA
01BB 9508 RET
_strcpy:
01BC 2FA0 MOV R26,R16
01BD 2FB1 MOV R27,R17
01BE 2FE2 MOV R30,R18
01BF 2FF3 MOV R31,R19
01C0 9001 LD R0,Z+
01C1 920D ST R0,X+
01C2 2000 TST R0
01C3 F7E1 BNE 0x01C0
01C4 9508 RET
pop_gset2:
01C5 E0E2 LDI R30,2
01C6 940C01D7 JMP pop
pop_gset3:
01C8 E0E4 LDI R30,4
01C9 940C01D7 JMP pop
push_gset5:
01CB 92FA ST R15,-Y
01CC 92EA ST R14,-Y
push_gset4:
01CD 92DA ST R13,-Y
01CE 92CA ST R12,-Y
push_gset3:
01CF 92BA ST R11,-Y
01D0 92AA ST R10,-Y
push_gset2:
01D1 937A ST R23,-Y
01D2 936A ST R22,-Y
push_gset1:
01D3 935A ST R21,-Y
01D4 934A ST R20,-Y
01D5 9508 RET
pop_gset1:
01D6 E0E1 LDI R30,1
pop:
01D7 9149 LD R20,Y+
01D8 9159 LD R21,Y+
01D9 FDE0 SBRC R30,0
01DA 9508 RET
01DB 9169 LD R22,Y+
01DC 9179 LD R23,Y+
01DD FDE1 SBRC R30,1
01DE 9508 RET
01DF 90A9 LD R10,Y+
01E0 90B9 LD R11,Y+
01E1 FDE2 SBRC R30,2
01E2 9508 RET
01E3 90C9 LD R12,Y+
01E4 90D9 LD R13,Y+
01E5 FDE3 SBRC R30,3
01E6 9508 RET
01E7 90E9 LD R14,Y+
01E8 90F9 LD R15,Y+
01E9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -