file.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,612 行 · 第 1/5 页
LIS
1,612 行
.module file.c
.area text(rom, con, rel)
; i -> R20
.even
0000 _FileInit::
0000 0E940000 xcall push_gset1
0004 ; /****************************************Copyright (c)**************************************************
0004 ; ** 广州周立功单片机发展有限公司
0004 ; ** 研 究 所
0004 ; ** 产品一部
0004 ; **
0004 ; ** http://www.zlgmcu.com
0004 ; **
0004 ; **--------------文件信息--------------------------------------------------------------------------------
0004 ; **文 件 名: file.c
0004 ; **创 建 人: 陈明计
0004 ; **最后修改日期: 2004年4月1日
0004 ; **描 述: 文件系统的文件基本操作程序
0004 ; **------------------------------------------------------------------------------------------------------
0004 ; ********************************************************************************************************/
0004 ; #define IN_FILE
0004 ;
0004 ; #include "SYS_Config.h"
0004 ; #include "SD_Drive.h"
0004 ; #include "fat.h"
0004 ; #include "time.h"
0004 ;
0004 ;
0004 ; extern INT32U _GetFDTInfo(char *FDTName,char *DirFileName);
0004 ; extern void strupr(INT8U *Path);
0004 ;
0004 ; static MY_FILE FileInfo[MAX_OPEN_FILES];/* 打开文件信息表 */
0004 ;
0004 ;
0004 ; /*********************************************************************************************************
0004 ; ** 函数名称: FileInit
0004 ; ** 功能描述: 初始化文件指针系统
0004 ; ** 输 入: 无
0004 ; ** 输 出: 无
0004 ; ** 全局变量: 无
0004 ; ** 调用模块: 无
0004 ; ** 作 者: 陈明计
0004 ; ** 日 期: 2003年6月5日
0004 ; **-------------------------------------------------------------------------------------------------------
0004 ; ** 修 改 人:
0004 ; ** 日 期:
0004 ; **------------------------------------------------------------------------------------------------------
0004 ; ********************************************************************************************************/
0004 ; void FileInit(void)
0004 ; {
0004 ; HANDLE i ;
0004 ;
0004 ; for(i=0;i<MAX_OPEN_FILES;i++)
0004 4427 clr R20
0006 0BC0 xjmp L5
0008 L2:
0008 01E2 ldi R16,33
000A 142F mov R17,R20
000C 0102 muls R16,R17
000E F001 movw R30,R0
0010 80E0 ldi R24,<_FileInfo
0012 90E0 ldi R25,>_FileInfo
0014 E80F add R30,R24
0016 F91F adc R31,R25
0018 2224 clr R2
001A 2082 std z+0,R2
001C L3:
001C 4395 inc R20
001E L5:
001E 4330 cpi R20,3
0020 9CF3 brlt L2
0022 L1:
0022 0E940000 xcall pop_gset1
0026 .dbline 0 ; func end
0026 0895 ret
0028 ; Rt -> R10
0028 ; fp -> R12,R13
0028 ; FileName -> R18,R19
0028 ; DirClus -> y+8
0028 ; Drive -> R16
.even
0028 _FindOpenFile::
0028 3A93 st -y,r19
002A 2A93 st -y,r18
002C 0E940000 xcall push_gset4
0030 2C85 ldd R18,y+12
0032 3D85 ldd R19,y+13
0034 ; {
0034 ; FileInfo[i].Flags=0 ;
0034 ; }
0034 ; }
0034 ;
0034 ; /*********************************************************************************************************
0034 ; ** 函数名称: FindOpenFile
0034 ; ** 功能描述: 查找已打开的指定文件的文件句柄,内部使用
0034 ; ** 输 入: Drive:文件所在的逻辑盘号
0034 ; ** DirClus:文件所在目录的开始簇号
0034 ; ** FileName:内部文件名
0034 ; ** 输 出: 文件句柄,Not_Open_FILE为没有打开
0034 ; ** 全局变量: FileInfo
0034 ; ** 调用模块: _GetFDTInfo,GetDrive,FindFDTInfo,
0034 ; ** 作 者: 陈明计
0034 ; ** 日 期: 2003年6月5日
0034 ; **-------------------------------------------------------------------------------------------------------
0034 ; ** 修 改 人:
0034 ; ** 日 期:
0034 ; **------------------------------------------------------------------------------------------------------
0034 ; ********************************************************************************************************/
0034 ; HANDLE FindOpenFile(INT8U Drive,INT32U DirClus,char FileName[11])
0034 ; {
0034 ; HANDLE Rt ;
0034 ; MY_FILE *fp ;
0034 ;
0034 ; fp=FileInfo ;
0034 80E0 ldi R24,<_FileInfo
0036 90E0 ldi R25,>_FileInfo
0038 6C01 movw R12,R24
003A ; for(Rt=0;Rt<MAX_OPEN_FILES;Rt++)
003A AA24 clr R10
003C 67C0 xjmp L10
003E L7:
003E ; {
003E ; if(fp->Flags!=0)
003E F601 movw R30,R12
0040 2080 ldd R2,z+0
0042 2220 tst R2
0044 09F4 brne X0
0046 5EC0 xjmp L11
0048 X0:
0048 ; if(fp->Drive==Drive)
0048 2484 ldd R2,z+12
004A 2016 cp R2,R16
004C 09F0 breq X1
004E 5AC0 xjmp L13
0050 X1:
0050 ; if(fp->DirClus==DirClus)
0050 FE01 movw R30,R28
0052 2084 ldd R2,z+8
0054 3184 ldd R3,z+9
0056 4284 ldd R4,z+10
0058 5384 ldd R5,z+11
005A F601 movw R30,R12
005C 6584 ldd R6,z+13
005E 7684 ldd R7,z+14
0060 8784 ldd R8,z+15
0062 9088 ldd R9,z+16
0064 6214 cp R6,R2
0066 7304 cpc R7,R3
0068 8404 cpc R8,R4
006A 9504 cpc R9,R5
006C 09F0 breq X2
006E 4AC0 xjmp L15
0070 X2:
0070 ; if(fp->Name[0]==FileName[0])
0070 F901 movw R30,R18
0072 2080 ldd R2,z+0
0074 F601 movw R30,R12
0076 3180 ldd R3,z+1
0078 3214 cp R3,R2
007A 09F0 breq X3
007C 43C0 xjmp L17
007E X3:
007E ; if(fp->Name[1]==FileName[1])
007E F901 movw R30,R18
0080 2180 ldd R2,z+1
0082 F601 movw R30,R12
0084 3280 ldd R3,z+2
0086 3214 cp R3,R2
0088 09F0 breq X4
008A 3CC0 xjmp L19
008C X4:
008C ; if(fp->Name[2]==FileName[2])
008C F901 movw R30,R18
008E 2280 ldd R2,z+2
0090 F601 movw R30,R12
0092 3380 ldd R3,z+3
0094 3214 cp R3,R2
0096 09F0 breq X5
0098 35C0 xjmp L21
009A X5:
009A ; if(fp->Name[3]==FileName[3])
009A F901 movw R30,R18
009C 2380 ldd R2,z+3
009E F601 movw R30,R12
00A0 3480 ldd R3,z+4
00A2 3214 cp R3,R2
00A4 09F0 breq X6
00A6 2EC0 xjmp L23
00A8 X6:
00A8 ; if(fp->Name[4]==FileName[4])
00A8 F901 movw R30,R18
00AA 2480 ldd R2,z+4
00AC F601 movw R30,R12
00AE 3580 ldd R3,z+5
00B0 3214 cp R3,R2
00B2 09F0 breq X7
00B4 27C0 xjmp L25
00B6 X7:
00B6 ; if(fp->Name[5]==FileName[5])
00B6 F901 movw R30,R18
00B8 2580 ldd R2,z+5
00BA F601 movw R30,R12
00BC 3680 ldd R3,z+6
00BE 3214 cp R3,R2
00C0 09F0 breq X8
00C2 20C0 xjmp L27
00C4 X8:
00C4 ; if(fp->Name[6]==FileName[6])
00C4 F901 movw R30,R18
00C6 2680 ldd R2,z+6
00C8 F601 movw R30,R12
00CA 3780 ldd R3,z+7
00CC 3214 cp R3,R2
00CE 09F0 breq X9
00D0 19C0 xjmp L29
00D2 X9:
00D2 ; if(fp->Name[7]==FileName[7])
00D2 F901 movw R30,R18
00D4 2780 ldd R2,z+7
00D6 F601 movw R30,R12
00D8 3084 ldd R3,z+8
00DA 3214 cp R3,R2
00DC 99F4 brne L31
00DE ; if(fp->Name[8]==FileName[8])
00DE F901 movw R30,R18
00E0 2084 ldd R2,z+8
00E2 F601 movw R30,R12
00E4 3184 ldd R3,z+9
00E6 3214 cp R3,R2
00E8 69F4 brne L33
00EA ; if(fp->Name[9]==FileName[9])
00EA F901 movw R30,R18
00EC 2184 ldd R2,z+9
00EE F601 movw R30,R12
00F0 3284 ldd R3,z+10
00F2 3214 cp R3,R2
00F4 39F4 brne L35
00F6 ; if(fp->Name[10]==FileName[10])
00F6 F901 movw R30,R18
00F8 2284 ldd R2,z+10
00FA F601 movw R30,R12
00FC 3384 ldd R3,z+11
00FE 3214 cp R3,R2
0100 09F4 brne L37
0102 ; {
0102 ; break ;
0102 08C0 xjmp L9
0104 L37:
0104 L35:
0104 L33:
0104 L31:
0104 L29:
0104 L27:
0104 L25:
0104 L23:
0104 L21:
0104 L19:
0104 L17:
0104 L15:
0104 L13:
0104 L11:
0104 C601 movw R24,R12
0106 8196 adiw R24,33
0108 6C01 movw R12,R24
010A L8:
010A A394 inc R10
010C L10:
010C 8A2D mov R24,R10
010E 8330 cpi R24,3
0110 0CF4 brge X10
0112 95CF xjmp L7
0114 X10:
0114 L9:
0114 ; }
0114 ; fp++;
0114 ; }
0114 ; if(Rt>=MAX_OPEN_FILES)
0114 8A2D mov R24,R10
0116 8330 cpi R24,3
0118 14F0 brlt L39
011A ; {
011A ; Rt=Not_Open_FILE ;
011A 8FEF ldi R24,255
011C A82E mov R10,R24
011E ; }
011E L39:
011E ; return Rt ;
011E 0A2D mov R16,R10
0120 L6:
0120 0E940000 xcall pop_gset4
0124 2296 adiw R28,2
0126 .dbline 0 ; func end
0126 0895 ret
0128 ; ClusIndex1 -> y+54
0128 ; temp -> y+22
0128 ; Drive -> R12
0128 ; DirName -> y+10
0128 ; ClusIndex -> y+6
0128 ; Rt -> R10
0128 ; DirFileName -> R12,R13
.even
0128 _RemoveFile::
0128 0E940000 xcall push_gset4
012C 6801 movw R12,R16
012E EA97 sbiw R28,58
0130 ; }
0130 ;
0130 ; /*********************************************************************************************************
0130 ; ** 函数名称: RemoveFile
0130 ; ** 功能描述: 删除文件
0130 ; ** 输 入: DirFileName:用户使用的文件名
0130 ; ** 输 出: RETURN_OK:成功
0130 ; ** 其它参考fat.h中关于返回值的说明
0130 ; ** 全局变量: 无
0130 ; ** 调用模块: strupr,_GetFDTInfo,GetDrive,FindFDTInfo,FATDelClusChain,DelFDT
0130 ; ** 作 者: 陈明计
0130 ; ** 日 期: 2003年6月5日
0130 ; **-------------------------------------------------------------------------------------------------------
0130 ; ** 修 改 人: 陈明计
0130 ; ** 日 期: 2004年4月10日
0130 ; **------------------------------------------------------------------------------------------------------
0130 ; ********************************************************************************************************/
0130 ; INT8U RemoveFile(char *DirFileName)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?