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

📄 mmc.lst

📁 使用单片机 读写SD卡 带FAT16功能 PIC18f452
💻 LST
📖 第 1 页 / 共 5 页
字号:
0BA6:  MOVLB  1
0BA8:  MOVF   x54,W
0BAA:  MULLW  3D
0BAC:  MOVF   FF3,W
0BAE:  CLRF   x5D
0BB0:  MOVWF  x5C
0BB2:  MOVLW  29
0BB4:  ADDWF  x5C,W
0BB6:  MOVWF  01
0BB8:  MOVLW  00
0BBA:  ADDWFC x5D,W
0BBC:  MOVWF  03
0BBE:  MOVF   01,W
0BC0:  ADDLW  22
0BC2:  MOVWF  FE9
0BC4:  MOVLW  00
0BC6:  ADDWFC 03,W
0BC8:  MOVWF  FEA
0BCA:  MOVFF  15B,FEC
0BCE:  MOVF   FED,F
0BD0:  MOVFF  15A,FEF
.................... 		address=((int32)file[fnbr].this_cluster_ptr-(int32)2)*(int32)cluster_size_bytes+ 
.................... 		data_area_address; 
0BD4:  MOVF   x54,W
0BD6:  MULLW  3D
0BD8:  MOVF   FF3,W
0BDA:  CLRF   x5D
0BDC:  MOVWF  x5C
0BDE:  MOVLW  27
0BE0:  ADDWF  x5C,W
0BE2:  MOVWF  01
0BE4:  MOVLW  00
0BE6:  ADDWFC x5D,W
0BE8:  MOVWF  03
0BEA:  MOVF   01,W
0BEC:  ADDLW  22
0BEE:  MOVWF  FE9
0BF0:  MOVLW  00
0BF2:  ADDWFC 03,W
0BF4:  MOVWF  FEA
0BF6:  MOVFF  FEC,03
0BFA:  MOVF   FED,F
0BFC:  MOVFF  FEF,15E
0C00:  MOVFF  03,15F
0C04:  CLRF   x60
0C06:  CLRF   x61
0C08:  MOVLW  02
0C0A:  SUBWF  x5E,W
0C0C:  MOVWF  x62
0C0E:  MOVLW  00
0C10:  SUBWFB 03,W
0C12:  MOVWF  x63
0C14:  MOVLW  00
0C16:  SUBWFB x60,W
0C18:  MOVWF  x64
0C1A:  MOVLW  00
0C1C:  SUBWFB x61,W
0C1E:  MOVWF  x65
0C20:  MOVFF  06,00
0C24:  MOVFF  07,01
0C28:  CLRF   02
0C2A:  CLRF   03
0C2C:  MOVFF  03,169
0C30:  MOVFF  02,168
0C34:  MOVFF  07,167
0C38:  MOVFF  06,166
0C3C:  MOVFF  FEA,16B
0C40:  MOVFF  FE9,16A
0C44:  MOVWF  x6F
0C46:  MOVFF  164,16E
0C4A:  MOVFF  163,16D
0C4E:  MOVFF  162,16C
0C52:  MOVFF  03,173
0C56:  MOVFF  02,172
0C5A:  MOVFF  07,171
0C5E:  MOVFF  06,170
0C62:  MOVLB  0
0C64:  CALL   03E8
0C68:  MOVFF  16B,FEA
0C6C:  MOVFF  16A,FE9
0C70:  MOVF   14,W
0C72:  MOVLB  1
0C74:  ADDWF  00,W
0C76:  MOVWF  x56
0C78:  MOVF   15,W
0C7A:  ADDWFC 01,W
0C7C:  MOVWF  x57
0C7E:  MOVF   16,W
0C80:  ADDWFC 02,W
0C82:  MOVWF  x58
0C84:  MOVF   17,W
0C86:  ADDWFC 03,W
0C88:  MOVWF  x59
....................  
.................... 	} 
....................  
.................... 	// printf("clust addr call fnbr=%u blk_size=%lu",fnbr,file[fnbr].rec_size); 
....................  
.................... 	if(set_BLOCKLEN(file[fnbr].rec_size)==false) return(37); /// reset to original rec_size 
0C8A:  MOVF   x54,W
0C8C:  MULLW  3D
0C8E:  MOVF   FF3,W
0C90:  CLRF   x5D
0C92:  MOVWF  x5C
0C94:  MOVLW  3B
0C96:  ADDWF  x5C,W
0C98:  MOVWF  01
0C9A:  MOVLW  00
0C9C:  ADDWFC x5D,W
0C9E:  MOVWF  03
0CA0:  MOVF   01,W
0CA2:  ADDLW  22
0CA4:  MOVWF  FE9
0CA6:  MOVLW  00
0CA8:  ADDWFC 03,W
0CAA:  MOVWF  FEA
0CAC:  MOVFF  FEC,15F
0CB0:  MOVF   FED,F
0CB2:  MOVFF  FEF,15E
0CB6:  CLRF   x63
0CB8:  CLRF   x62
0CBA:  MOVFF  15F,161
0CBE:  MOVFF  15E,160
0CC2:  MOVLB  0
0CC4:  CALL   02A6
0CC8:  MOVF   01,F
0CCA:  BNZ   0CD8
0CCC:  MOVLW  25
0CCE:  MOVWF  00
0CD0:  CLRF   01
0CD2:  CLRF   02
0CD4:  CLRF   03
0CD6:  BRA    0CE8
....................  
.................... 	#IF MMC_CLUSTER_TRACE // if true prints to serial port 
.................... 		printf("\n\r cluster addr>> next_cluster_ptr*= %lu this_cluster*=%lu \r\n",file[fnbr].next_cluster_ptr,file[fnbr].this_cluster_ptr); 
.................... 	#ENDIF return(address); 
0CD8:  MOVFF  156,00
0CDC:  MOVFF  157,01
0CE0:  MOVFF  158,02
0CE4:  MOVFF  159,03
.................... } 
0CE8:  RETLW  00
....................  
....................  
.................... /////////////////////////////////////////////////////////////////////////////////// 
.................... ///////////////////////// OPEN FILE /////////////////////////////////////////// 
.................... /////////////////////////////////////////////////////////////////////////////////// 
.................... #separate 
.................... int open_file(int fnbr,char *fname,int16 rec_length){ 
.................... 	int32 dir_addr_ptr; 
.................... 	int16 bytes_read; 
.................... 	int i,ptr1,ptr2,lnf_tiles,j; 
.................... 	char file_name[12]; 
.................... 	int attribute,directory,archive; 
.................... 	char tmp; 
.................... 	char buff[32]; //// buffer for 32 byte tiles 
....................  
.................... 	int level; /// level in the directory structure 0 is top 
.................... 	/////// directory is searched and if file is found 
....................  
.................... 	////// 
.................... 	////// init_MMC(tries) must be called first 
.................... 	////// uses globals root_dir_address 
....................  
.................... 	//start by searching the root directory for folder or file 
....................  
.................... 	/// assign an inital next_cluster_ptr in the root directory 
.................... 	file[fnbr].next_cluster_ptr=0; 
*
0D88:  MOVLB  1
0D8A:  MOVF   x0F,W
0D8C:  MULLW  3D
0D8E:  MOVF   FF3,W
0D90:  CLRF   x51
0D92:  MOVWF  x50
0D94:  MOVLW  29
0D96:  ADDWF  x50,W
0D98:  MOVWF  01
0D9A:  MOVLW  00
0D9C:  ADDWFC x51,W
0D9E:  MOVWF  03
0DA0:  MOVF   01,W
0DA2:  ADDLW  22
0DA4:  MOVWF  FE9
0DA6:  MOVLW  00
0DA8:  ADDWFC 03,W
0DAA:  MOVWF  FEA
0DAC:  CLRF   FEC
0DAE:  MOVF   FED,F
0DB0:  CLRF   FEF
.................... 	file[fnbr].this_cluster_ptr=0; 
0DB2:  MOVF   x0F,W
0DB4:  MULLW  3D
0DB6:  MOVF   FF3,W
0DB8:  CLRF   x51
0DBA:  MOVWF  x50
0DBC:  MOVLW  27
0DBE:  ADDWF  x50,W
0DC0:  MOVWF  01
0DC2:  MOVLW  00
0DC4:  ADDWFC x51,W
0DC6:  MOVWF  03
0DC8:  MOVF   01,W
0DCA:  ADDLW  22
0DCC:  MOVWF  FE9
0DCE:  MOVLW  00
0DD0:  ADDWFC 03,W
0DD2:  MOVWF  FEA
0DD4:  CLRF   FEC
0DD6:  MOVF   FED,F
0DD8:  CLRF   FEF
....................  
.................... 	dir_addr_ptr=root_dir_address; 
0DDA:  MOVFF  13,117
0DDE:  MOVFF  12,116
0DE2:  MOVFF  11,115
0DE6:  MOVFF  10,114
.................... 	file_name[11]=0; 
0DEA:  CLRF   x2A
.................... 	level=0; 
0DEC:  CLRF   x4F
.................... 	ptr1=0; 
0DEE:  CLRF   x1B
.................... 	ptr2=0; 
0DF0:  CLRF   x1C
.................... 	bytes_read=0; //// byte read so far in this cluster 
0DF2:  CLRF   x19
0DF4:  CLRF   x18
....................  
.................... 	read_directory: 
.................... 	/// extract the directory levels(folders) 
.................... 	while ((fname[ptr2]!='/') && (fname[ptr2]!='\\') && (fname[ptr2]!='\0') && (fname[ptr2]!='.') ){ 
0DF6:  CLRF   03
0DF8:  MOVF   x1C,W
0DFA:  ADDWF  x10,W
0DFC:  MOVWF  FE9
0DFE:  MOVF   x11,W
0E00:  ADDWFC 03,W
0E02:  MOVWF  FEA
0E04:  MOVF   FEF,W
0E06:  SUBLW  2F
0E08:  BZ    0E56
0E0A:  CLRF   03
0E0C:  MOVF   x1C,W
0E0E:  ADDWF  x10,W
0E10:  MOVWF  FE9
0E12:  MOVF   x11,W
0E14:  ADDWFC 03,W
0E16:  MOVWF  FEA
0E18:  MOVF   FEF,W
0E1A:  SUBLW  5C
0E1C:  BZ    0E56
0E1E:  CLRF   03
0E20:  MOVF   x1C,W
0E22:  ADDWF  x10,W
0E24:  MOVWF  FE9
0E26:  MOVF   x11,W
0E28:  ADDWFC 03,W
0E2A:  MOVWF  FEA
0E2C:  MOVF   FEF,F
0E2E:  BZ    0E56
0E30:  CLRF   03
0E32:  MOVF   x1C,W
0E34:  ADDWF  x10,W
0E36:  MOVWF  FE9
0E38:  MOVF   x11,W
0E3A:  ADDWFC 03,W
0E3C:  MOVWF  FEA
0E3E:  MOVF   FEF,W
0E40:  SUBLW  2E
0E42:  BZ    0E56
.................... 		// a dos directory (folder) name can not exceed 8 chars 
.................... 		if ((ptr2-ptr1)>7) return (20); 
0E44:  MOVF   x1B,W
0E46:  SUBWF  x1C,W
0E48:  SUBLW  07
0E4A:  BC    0E52
0E4C:  MOVLW  14
0E4E:  MOVWF  01
0E50:  BRA    13BE
.................... 		ptr2++; 
0E52:  INCF   x1C,F
.................... 	} 
.................... 	#IF MMC_OPEN_TRACE 
0E54:  BRA    0DF6
.................... 		printf("\n\r fopen ptr1=%u ptr2=%u ",ptr1,ptr2); 
.................... 	#ENDIF 
....................  
.................... 	if (ptr2==0){ ptr2=1;ptr1=1;goto read_directory;} /// skip a leading '/' or '\' 
0E56:  MOVF   x1C,F
0E58:  BNZ   0E62
0E5A:  MOVLW  01
0E5C:  MOVWF  x1C
0E5E:  MOVWF  x1B
0E60:  BRA    0DF6
.................... 	if ((ptr2-ptr1)==0) return (21); 
0E62:  MOVF   x1B,W
0E64:  SUBWF  x1C,W
0E66:  BNZ   0E6E
0E68:  MOVLW  15
0E6A:  MOVWF  01
0E6C:  BRA    13BE
....................  
.................... 	// ptr1 is the chars processed so far 
.................... 	// ptr2 is the position of '/' or '\' or '.' or '\0' 
.................... 	// prepare the file or directory name fomat is cccccccceee 
.................... 	// c is a valid letter or blank eee is extension or blank 
.................... 	// a directory name is 'cccccccc ' a file 'cccccccceee' always 11 chars 
.................... 	for(i=0;i<11;i++)file_name[i]=32;//blank 
0E6E:  CLRF   x1A
0E70:  MOVF   x1A,W
0E72:  SUBLW  0A
0E74:  BNC   0E8C
0E76:  CLRF   03
0E78:  MOVF   x1A,W
0E7A:  ADDLW  1F
0E7C:  MOVWF  FE9
0E7E:  MOVLW  01
0E80:  ADDWFC 03,W
0E82:  MOVWF  FEA
0E84:  MOVLW  20
0E86:  MOVWF  FEF
0E88:  INCF   x1A,F
0E8A:  BRA    0E70
.................... 	file_name[11]=0; 
0E8C:  CLRF   x2A
.................... 	i=0; 
0E8E:  CLRF   x1A
.................... 	while(ptr1<ptr2){ 
0E90:  MOVF   x1C,W
0E92:  SUBWF  x1B,W
0E94:  BC    0ED6
.................... 		// extract the name 
....................  
.................... 		tmp=fname[ptr1]; 
0E96:  CLRF   03
0E98:  MOVF   x1B,W
0E9A:  ADDWF  x10,W
0E9C:  MOVWF  FE9
0E9E:  MOVF   x11,W
0EA0:  ADDWFC 03,W
0EA2:  MOVWF  FEA
0EA4:  MOVFF  FEF,12E
.................... 		tmp=TOUPPER(tmp); 
0EA8:  MOVF   x2E,W
0EAA:  SUBLW  60
0EAC:  BC    0EBA
0EAE:  MOVF   x2E,W
0EB0:  SUBLW  7A
0EB2:  BNC   0EBA
0EB4:  MOVF   x2E,W
0EB6:  ANDLW  DF
0EB8:  BRA    0EBC
0EBA:  MOVF   x2E,W
0EBC:  MOVWF  x2E
.................... 		file_name[i]=tmp; 
0EBE:  CLRF   03
0EC0:  MOVF   x1A,W
0EC2:  ADDLW  1F
0EC4:  MOVWF  FE9
0EC6:  MOVLW  01
0EC8:  ADDWFC 03,W
0ECA:  MOVWF  FEA
0ECC:  MOVFF  12E,FEF
.................... 		ptr1++;i++; 
0ED0:  INCF   x1B,F
0ED2:  INCF   x1A,F
.................... 	} 
0ED4:  BRA    0E90
.................... 	if(fname[ptr2]=='.'){ 
0ED6:  CLRF   03
0ED8:  MOVF   x1C,W
0EDA:  ADDWF  x10,W
0EDC:  MOVWF  FE9
0EDE:  MOVF   x11,W
0EE0:  ADDWFC 03,W
0EE2:  MOVWF  FEA
0EE4:  MOVF   FEF,W
0EE6:  SUBLW  2E
0EE8:  BNZ   0F42
.................... 		// extract the extension 
.................... 		i=8; 
0EEA:  MOVLW  08
0EEC:  MOVWF  x1A
.................... 		while((fname[ptr1]!='\0') && (i<12)){ 
0EEE:  CLRF   03
0EF0:  MOVF   x1B,W
0EF2:  ADDWF  x10,W
0EF4:  MOVWF  FE9
0EF6:  MOVF   x11,W
0EF8:  ADDWFC 03,W
0EFA:  MOVWF  FEA
0EFC:  MOVF   FEF,F
0EFE:  BZ    0F42
0F00:  MOVF   x1A,W
0F02:  SUBLW  0B
0F04:  BNC   0F42
.................... 			ptr1++; 
0F06:  INCF   x1B,F
.................... 			tmp=fname[ptr1]; 
0F08:  CLRF   03
0F0A:  MOVF   x1B,W
0F0C:  ADDWF  x10,W
0F0E:  MOVWF  FE9
0F10:  MOVF   x11,W
0F12:  ADDWFC 03,W
0F14:  MOVWF  FEA
0F16:  MOVFF  FEF,12E
.................... 			file_name[i]=TOUPPER(tmp); 
0F1A:  CLRF   03
0F1C:  MOVF   x1A,W
0F1E:  ADDLW  1F
0F20:  MOVWF  FE9
0F22:  MOVLW  01
0F24:  ADDWFC 03,W
0F26:  MOVW

⌨️ 快捷键说明

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