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

📄 mmc.lst

📁 使用单片机 读写SD卡 带FAT16功能 PIC18f452
💻 LST
📖 第 1 页 / 共 5 页
字号:
....................  
.................... 		} 
.................... 	} 
.................... 	else printf("\n\r read_BLOCK failed"); 
....................  
.................... } 
....................  
....................  
.................... #separate 
.................... int32 cluster_addr(int fnbr,int mode){ 
.................... 	int32 address; 
.................... 	char buff[2]; //// buffer for 2 byte ptrs 
.................... 	///// returns the physical address in the data area of the data pointed to by either the 
.................... 	///// root cluster or the next cluster in the chain 
.................... 	///// 
.................... 	///// if ROOT_CLUSTER is called then this routine returns the address of the first cluster 
.................... 	///// and assigns this_cluster_ptr and next_cluster_ptr 
.................... 	///// 
.................... 	///// if NEXT_CLUSTER is called then this routine returns the address of the next cluster 
.................... 	///// using the existing next_cluster ptr number 
.................... 	///// and moves the existing next_cluster ptr number into this_cluster 
.................... 	///// and assigns the new next cluster ptr number (FFFF) if at the end of chain 
.................... 	///// if NEXT_CLUSTER is called and the next_cluster_ptr number is FFFF 
.................... 	///// an address of FFFFFFFF is returned 
....................  
.................... 	///// uses the globals cluster_size_bytes,data_area_address 
.................... 	//// file struct has the base=root cluster ptr, current=this cluster ptr ,next =cluster chain ptr 
....................  
.................... 	//// !!!! a call with NEXT_cluster must have a valid next_cluster_ptr value 
.................... 	//// !!!! a call to THIS CLUSTER must have a valid this_cluster_ptr 
....................  
.................... 	//// !!!! Fopen logic considers the cluster prt in the directory tile 
.................... 	//// to be a next=next_cluster_ptr so NEXT_CLUSTER is used to calc the physical address 
.................... 	//// of the first root cluster this also assigns the current=this_cluster_ptr 
.................... 	/// and fetches the next cluster prt 
.................... 	//// 
.................... 	#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 
.................... 	if (mode==NEXT_CLUSTER){ 
0878:  MOVLB  1
087A:  DECFSZ x55,W
087C:  BRA    0A9E
.................... 		///access the next cluster in the chain 
.................... 		/// requires a valid this_cluster_ptr number and a valid next_cluster_ptr number 
....................  
.................... 		if(file[fnbr].next_cluster_ptr==0xFFFF){ 
087E:  MOVF   x54,W
0880:  MULLW  3D
0882:  MOVF   FF3,W
0884:  CLRF   x5D
0886:  MOVWF  x5C
0888:  MOVLW  29
088A:  ADDWF  x5C,W
088C:  MOVWF  01
088E:  MOVLW  00
0890:  ADDWFC x5D,W
0892:  MOVWF  03
0894:  MOVF   01,W
0896:  ADDLW  22
0898:  MOVWF  FE9
089A:  MOVLW  00
089C:  ADDWFC 03,W
089E:  MOVWF  FEA
08A0:  MOVFF  FEC,15F
08A4:  MOVF   FED,F
08A6:  MOVFF  FEF,15E
08AA:  INCFSZ x5E,W
08AC:  BRA    08BE
08AE:  INCFSZ x5F,W
08B0:  BRA    08BE
.................... 			#IF MMC_CLUSTER_TRACE // if true prints to serial port 
.................... 				printf("last cluster"); 
.................... 			#ENDIF 
.................... 			address=0XFFFFFFFF; 
08B2:  MOVLW  FF
08B4:  MOVWF  x59
08B6:  MOVWF  x58
08B8:  MOVWF  x57
08BA:  MOVWF  x56
.................... 		} 
.................... 		else{ 
08BC:  BRA    0A9E
.................... 			if(set_BLOCKLEN((int32)2)==false) return(35); /// set up to read 2 bytes 
08BE:  CLRF   x63
08C0:  CLRF   x62
08C2:  CLRF   x61
08C4:  MOVLW  02
08C6:  MOVWF  x60
08C8:  MOVLB  0
08CA:  RCALL  02A6
08CC:  MOVF   01,F
08CE:  BNZ   08DC
08D0:  MOVLW  23
08D2:  MOVWF  00
08D4:  CLRF   01
08D6:  CLRF   02
08D8:  CLRF   03
08DA:  BRA    0CE8
.................... 			if(read_BLOCK(fat1_address+(file[fnbr].next_cluster_ptr)*2,buff)==false) return(33); 
08DC:  MOVLB  1
08DE:  MOVF   x54,W
08E0:  MULLW  3D
08E2:  MOVF   FF3,W
08E4:  CLRF   x5D
08E6:  MOVWF  x5C
08E8:  MOVLW  29
08EA:  ADDWF  x5C,W
08EC:  MOVWF  01
08EE:  MOVLW  00
08F0:  ADDWFC x5D,W
08F2:  MOVWF  03
08F4:  MOVF   01,W
08F6:  ADDLW  22
08F8:  MOVWF  FE9
08FA:  MOVLW  00
08FC:  ADDWFC 03,W
08FE:  MOVWF  FEA
0900:  MOVFF  FEC,15F
0904:  MOVF   FED,F
0906:  MOVFF  FEF,15E
090A:  BCF    FD8.0
090C:  RLCF   x5E,W
090E:  MOVWF  02
0910:  RLCF   x5F,W
0912:  MOVWF  03
0914:  MOVF   02,W
0916:  ADDWF  08,W
0918:  MOVWF  x60
091A:  MOVF   03,W
091C:  ADDWFC 09,W
091E:  MOVWF  x61
0920:  MOVLW  00
0922:  ADDWFC 0A,W
0924:  MOVWF  x62
0926:  MOVLW  00
0928:  ADDWFC 0B,W
092A:  MOVWF  x63
092C:  MOVWF  x67
092E:  MOVFF  162,166
0932:  MOVFF  161,165
0936:  MOVFF  160,164
093A:  MOVLW  01
093C:  MOVWF  x69
093E:  MOVLW  5A
0940:  MOVWF  x68
0942:  MOVLB  0
0944:  RCALL  02FC
0946:  MOVF   01,F
0948:  BNZ   0956
094A:  MOVLW  21
094C:  MOVWF  00
094E:  CLRF   01
0950:  CLRF   02
0952:  CLRF   03
0954:  BRA    0CE8
.................... 			file[fnbr].this_cluster_ptr=file[fnbr].next_cluster_ptr; // update current with prev next in chain 
0956:  MOVLB  1
0958:  MOVF   x54,W
095A:  MULLW  3D
095C:  MOVF   FF3,W
095E:  CLRF   x5D
0960:  MOVWF  x5C
0962:  MOVLW  27
0964:  ADDWF  x5C,W
0966:  MOVWF  01
0968:  MOVLW  00
096A:  ADDWFC x5D,W
096C:  MOVWF  03
096E:  MOVF   01,W
0970:  ADDLW  22
0972:  MOVWF  01
0974:  MOVLW  00
0976:  ADDWFC 03,F
0978:  MOVFF  01,15E
097C:  MOVFF  03,15F
0980:  MOVF   x54,W
0982:  MULLW  3D
0984:  MOVF   FF3,W
0986:  CLRF   x61
0988:  MOVWF  x60
098A:  MOVLW  29
098C:  ADDWF  x60,W
098E:  MOVWF  01
0990:  MOVLW  00
0992:  ADDWFC x61,W
0994:  MOVWF  03
0996:  MOVF   01,W
0998:  ADDLW  22
099A:  MOVWF  FE9
099C:  MOVLW  00
099E:  ADDWFC 03,W
09A0:  MOVWF  FEA
09A2:  MOVFF  FEC,03
09A6:  MOVF   FED,F
09A8:  MOVFF  FEF,162
09AC:  MOVFF  15F,FEA
09B0:  MOVFF  15E,FE9
09B4:  MOVFF  03,FEC
09B8:  MOVF   FED,F
09BA:  MOVFF  162,FEF
.................... 			file[fnbr].next_cluster_ptr=make16(buff[1],buff[0]); /// update next in chain 
09BE:  MOVF   x54,W
09C0:  MULLW  3D
09C2:  MOVF   FF3,W
09C4:  CLRF   x5D
09C6:  MOVWF  x5C
09C8:  MOVLW  29
09CA:  ADDWF  x5C,W
09CC:  MOVWF  01
09CE:  MOVLW  00
09D0:  ADDWFC x5D,W
09D2:  MOVWF  03
09D4:  MOVF   01,W
09D6:  ADDLW  22
09D8:  MOVWF  FE9
09DA:  MOVLW  00
09DC:  ADDWFC 03,W
09DE:  MOVWF  FEA
09E0:  MOVFF  15B,FEC
09E4:  MOVF   FED,F
09E6:  MOVFF  15A,FEF
....................  
.................... 			address=((int32)file[fnbr].this_cluster_ptr-(int32)2)*(int32)cluster_size_bytes+ 
.................... 			data_area_address; 
09EA:  MOVF   x54,W
09EC:  MULLW  3D
09EE:  MOVF   FF3,W
09F0:  CLRF   x5D
09F2:  MOVWF  x5C
09F4:  MOVLW  27
09F6:  ADDWF  x5C,W
09F8:  MOVWF  01
09FA:  MOVLW  00
09FC:  ADDWFC x5D,W
09FE:  MOVWF  03
0A00:  MOVF   01,W
0A02:  ADDLW  22
0A04:  MOVWF  FE9
0A06:  MOVLW  00
0A08:  ADDWFC 03,W
0A0A:  MOVWF  FEA
0A0C:  MOVFF  FEC,03
0A10:  MOVF   FED,F
0A12:  MOVFF  FEF,15E
0A16:  MOVFF  03,15F
0A1A:  CLRF   x60
0A1C:  CLRF   x61
0A1E:  MOVLW  02
0A20:  SUBWF  x5E,W
0A22:  MOVWF  x62
0A24:  MOVLW  00
0A26:  SUBWFB 03,W
0A28:  MOVWF  x63
0A2A:  MOVLW  00
0A2C:  SUBWFB x60,W
0A2E:  MOVWF  x64
0A30:  MOVLW  00
0A32:  SUBWFB x61,W
0A34:  MOVWF  x65
0A36:  MOVFF  06,00
0A3A:  MOVFF  07,01
0A3E:  CLRF   02
0A40:  CLRF   03
0A42:  MOVFF  03,169
0A46:  MOVFF  02,168
0A4A:  MOVFF  07,167
0A4E:  MOVFF  06,166
0A52:  MOVFF  FEA,16B
0A56:  MOVFF  FE9,16A
0A5A:  MOVWF  x6F
0A5C:  MOVFF  164,16E
0A60:  MOVFF  163,16D
0A64:  MOVFF  162,16C
0A68:  MOVFF  03,173
0A6C:  MOVFF  02,172
0A70:  MOVFF  07,171
0A74:  MOVFF  06,170
0A78:  MOVLB  0
0A7A:  RCALL  03E8
0A7C:  MOVFF  16B,FEA
0A80:  MOVFF  16A,FE9
0A84:  MOVF   14,W
0A86:  MOVLB  1
0A88:  ADDWF  00,W
0A8A:  MOVWF  x56
0A8C:  MOVF   15,W
0A8E:  ADDWFC 01,W
0A90:  MOVWF  x57
0A92:  MOVF   16,W
0A94:  ADDWFC 02,W
0A96:  MOVWF  x58
0A98:  MOVF   17,W
0A9A:  ADDWFC 03,W
0A9C:  MOVWF  x59
....................  
.................... 		} 
.................... 	} 
.................... 	if (mode==ROOT_CLUSTER){ 
0A9E:  MOVF   x55,F
0AA0:  BTFSS  FD8.2
0AA2:  BRA    0C8A
.................... 		//// root_cluster_ptr was assigned from the file tile in fopen 
.................... 		file[fnbr].this_cluster_ptr=file[fnbr].root_cluster_ptr; 
0AA4:  MOVF   x54,W
0AA6:  MULLW  3D
0AA8:  MOVF   FF3,W
0AAA:  CLRF   x5D
0AAC:  MOVWF  x5C
0AAE:  MOVLW  27
0AB0:  ADDWF  x5C,W
0AB2:  MOVWF  01
0AB4:  MOVLW  00
0AB6:  ADDWFC x5D,W
0AB8:  MOVWF  03
0ABA:  MOVF   01,W
0ABC:  ADDLW  22
0ABE:  MOVWF  01
0AC0:  MOVLW  00
0AC2:  ADDWFC 03,F
0AC4:  MOVFF  01,15E
0AC8:  MOVFF  03,15F
0ACC:  MOVF   x54,W
0ACE:  MULLW  3D
0AD0:  MOVF   FF3,W
0AD2:  CLRF   x61
0AD4:  MOVWF  x60
0AD6:  MOVLW  25
0AD8:  ADDWF  x60,W
0ADA:  MOVWF  01
0ADC:  MOVLW  00
0ADE:  ADDWFC x61,W
0AE0:  MOVWF  03
0AE2:  MOVF   01,W
0AE4:  ADDLW  22
0AE6:  MOVWF  FE9
0AE8:  MOVLW  00
0AEA:  ADDWFC 03,W
0AEC:  MOVWF  FEA
0AEE:  MOVFF  FEC,03
0AF2:  MOVF   FED,F
0AF4:  MOVFF  FEF,162
0AF8:  MOVFF  15F,FEA
0AFC:  MOVFF  15E,FE9
0B00:  MOVFF  03,FEC
0B04:  MOVF   FED,F
0B06:  MOVFF  162,FEF
.................... 		if(set_BLOCKLEN((int32)2)==false) return(35); /// set up to read 2 bytes 
0B0A:  CLRF   x63
0B0C:  CLRF   x62
0B0E:  CLRF   x61
0B10:  MOVLW  02
0B12:  MOVWF  x60
0B14:  MOVLB  0
0B16:  CALL   02A6
0B1A:  MOVF   01,F
0B1C:  BNZ   0B2A
0B1E:  MOVLW  23
0B20:  MOVWF  00
0B22:  CLRF   01
0B24:  CLRF   02
0B26:  CLRF   03
0B28:  BRA    0CE8
.................... 		if(read_BLOCK(fat1_address+(file[fnbr].this_cluster_ptr)*2,buff)==false) return(33); 
0B2A:  MOVLB  1
0B2C:  MOVF   x54,W
0B2E:  MULLW  3D
0B30:  MOVF   FF3,W
0B32:  CLRF   x5D
0B34:  MOVWF  x5C
0B36:  MOVLW  27
0B38:  ADDWF  x5C,W
0B3A:  MOVWF  01
0B3C:  MOVLW  00
0B3E:  ADDWFC x5D,W
0B40:  MOVWF  03
0B42:  MOVF   01,W
0B44:  ADDLW  22
0B46:  MOVWF  FE9
0B48:  MOVLW  00
0B4A:  ADDWFC 03,W
0B4C:  MOVWF  FEA
0B4E:  MOVFF  FEC,15F
0B52:  MOVF   FED,F
0B54:  MOVFF  FEF,15E
0B58:  BCF    FD8.0
0B5A:  RLCF   x5E,W
0B5C:  MOVWF  02
0B5E:  RLCF   x5F,W
0B60:  MOVWF  03
0B62:  MOVF   02,W
0B64:  ADDWF  08,W
0B66:  MOVWF  x60
0B68:  MOVF   03,W
0B6A:  ADDWFC 09,W
0B6C:  MOVWF  x61
0B6E:  MOVLW  00
0B70:  ADDWFC 0A,W
0B72:  MOVWF  x62
0B74:  MOVLW  00
0B76:  ADDWFC 0B,W
0B78:  MOVWF  x63
0B7A:  MOVWF  x67
0B7C:  MOVFF  162,166
0B80:  MOVFF  161,165
0B84:  MOVFF  160,164
0B88:  MOVLW  01
0B8A:  MOVWF  x69
0B8C:  MOVLW  5A
0B8E:  MOVWF  x68
0B90:  MOVLB  0
0B92:  CALL   02FC
0B96:  MOVF   01,F
0B98:  BNZ   0BA6
0B9A:  MOVLW  21
0B9C:  MOVWF  00
0B9E:  CLRF   01
0BA0:  CLRF   02
0BA2:  CLRF   03
0BA4:  BRA    0CE8
.................... 		file[fnbr].next_cluster_ptr=make16(buff[1],buff[0]); /// update next in chain 

⌨️ 快捷键说明

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