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 + -
显示快捷键?