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

📄 avrmain.lst

📁 AVR单片机制作U盘的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 + -