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

📄 dir.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldd R5,z+39
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _ClearClus
;     /* 清空簇 */
;     
;     /* 设置FDT属性 */
;     temp.Attr=ATTR_DIRECTORY ;
	ldi R24,16
	std y+15,R24
;     temp.FileSize=0 ;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+32,R20
	std z+33,R21
	std z+34,R22
	std z+35,R23
;     
;     temp.NTRes=0 ;
	clr R2
	std y+16,R2
;     temp.CrtTimeTenth=time_getTime();
	xcall _fs_getTime
	std y+17,R16
;     temp.CrtTime=time_getTime();
	xcall _fs_getTime
	std y+19,R17
	std y+18,R16
;     temp.CrtDate=time_getDate();
	xcall _fs_getDate
	std y+21,R17
	std y+20,R16
;     temp.LstAccDate=time_getDate();
	xcall _fs_getDate
	std y+23,R17
	std y+22,R16
;     temp.WrtTime=time_getTime();
	xcall _fs_getTime
	std y+27,R17
	std y+26,R16
;     temp.WrtDate=time_getDate();
	xcall _fs_getDate
	std y+29,R17
	std y+28,R16
;     
;     temp.FstClusLO=(INT16U)(Temp1&0xffff);
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	std y+31,R3
	std y+30,R2
;     //temp.FstClusHI=Temp1/0x10000 ;
;     temp.FstClusHI=(INT16U)(Temp1>>16);
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	movw R2,R4
	std y+25,R3
	std y+24,R2
;     
;     Rt=AddFDT(Drive,ClusIndex,&temp);
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _AddFDT
	mov R10,R16
;     /* 增加目录项 */
;     if(Rt==RETURN_OK)
	tst R16
	breq X7
	xjmp L127
X7:
;     {
;         /* 建立'.'目录 */
;         temp.Name[0]='.' ;
	ldi R24,46
	std y+4,R24
;         temp.Name[1]=0x20 ;
	ldi R24,32
	std y+5,R24
;         temp.Name[2]=0x20 ;
	std y+6,R24
;         temp.Name[3]=0x20 ;
	std y+7,R24
;         temp.Name[4]=0x20 ;
	std y+8,R24
;         temp.Name[5]=0x20 ;
	std y+9,R24
;         temp.Name[6]=0x20 ;
	std y+10,R24
;         temp.Name[7]=0x20 ;
	std y+11,R24
;         temp.Name[8]=0x20 ;
	std y+12,R24
;         temp.Name[9]=0x20 ;
	std y+13,R24
;         temp.Name[10]=0x20 ;
	std y+14,R24
;         
;         AddFDT(Drive,Temp1,&temp);
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _AddFDT
;         
;         /* 建立'..'目录 */
;         temp.Name[1]='.' ;
	ldi R24,46
	std y+5,R24
;         
;         temp.FstClusLO=(INT16U)(ClusIndex&0xffff);
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	std y+31,R3
	std y+30,R2
;         //temp.FstClusHI=ClusIndex/0x10000 ;
; 	    temp.FstClusHI=(INT16U)(Temp1>>16);
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	movw R2,R4
	std y+25,R3
	std y+24,R2
; 	
;         Rt=AddFDT(Drive,Temp1,&temp);
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _AddFDT
	mov R10,R16
;     }
	xjmp L128
L127:
;     else 
;     {
;         FATDelClusChain(Drive,Temp1);
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _FATDelClusChain
;     }
L128:
;     return Rt ;
	mov R16,R10
L108:
	adiw R28,44
	xcall pop_gset4
	.dbline 0 ; func end
	ret
;     ClusIndex1 -> y+54
;           temp -> y+22
;        DirName -> y+10
;          Drive -> R12
;      ClusIndex -> y+6
;             Rt -> R10
;           Path -> R10,R11
	.even
_RemoveDir::
	xcall push_gset4
	movw R10,R16
	sbiw R28,58
; }
; 
; /*********************************************************************************************************
; ** 函数名称: RemoveDir
; ** 功能描述: 删除目录
; ** 输   入: Path:路径名
; ** 输   出: RETURN_OK:成功
; **           其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: strupr,DelFDT
; ** 作   者: 陈明计
; ** 日   期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U RemoveDir(char *Path)
; {
;     INT32U ClusIndex,ClusIndex1 ;
;     INT8U Drive,Rt ;
;     char DirName[12];
;     FDT temp ;
;     
;     strupr(Path);
	movw R16,R10
	xcall _strupr
;     /* 变为大写 */
;     ClusIndex=_GetFDTInfo(DirName,Path);
	movw R18,R10
	movw R16,R28
	subi R16,246  ; offset = 10
	sbci R17,255
	xcall __GetFDTInfo
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
;     if(ClusIndex==BAD_CLUS)
	ldi R20,247
	ldi R21,255
	ldi R22,255
	ldi R23,15
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L143
;     {
;         return PATH_NOT_FIND ;
	ldi R16,14
	xjmp L142
L143:
;     }
;     
;     Drive=GetDrive(Path);
	movw R16,R10
	xcall _GetDrive
	mov R12,R16
;     
;     /* 获取FDT其信息 */
;     Rt=FindFDTInfo(&temp,Drive,ClusIndex,DirName);
	movw R24,R28
	adiw R24,10
	std y+5,R25
	std y+4,R24
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	mov R18,R12
	movw R16,R28
	subi R16,234  ; offset = 22
	sbci R17,255
	xcall _FindFDTInfo
	mov R10,R16
;     if(Rt==RETURN_OK)
	tst R16
	breq X8
	xjmp L145
X8:
;     {
;         /* 是否是目录 */
;         if((temp.Attr&ATTR_DIRECTORY)!=0)
	ldd R2,y+33
	sbrs R2,4
	rjmp L147
;         {
;             /* 是 */
;             ClusIndex1=temp.FstClusLO+((INT32U)(temp.FstClusHI)<<16);
	ldd R2,y+42
	ldd R3,y+43
	clr R4
	clr R5
	movw R4,R2
	clr R2
	clr R3
	ldd R6,y+48
	ldd R7,y+49
	clr R8
	clr R9
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+54,R6
	std z+55,R7
	std z+56,R8
	std z+57,R9
;             /* 是否是空目录 */
;             Rt=DirIsEmpty(Drive,ClusIndex1);
	movw R30,R28
	ldd R2,z+54
	ldd R3,z+55
	ldd R4,z+56
	ldd R5,z+57
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _DirIsEmpty
	mov R10,R16
;             if(Rt==DIR_EMPTY)
	cpi R16,12
	brne L148
;             {
;                 /* 是,删除 */
;                 FATDelClusChain(Drive,ClusIndex1);
	movw R30,R28
	ldd R2,z+54
	ldd R3,z+55
	ldd R4,z+56
	ldd R5,z+57
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _FATDelClusChain
;                 Rt=DelFDT(Drive,ClusIndex,DirName);
	movw R24,R28
	adiw R24,10
	std y+3,R25
	std y+2,R24
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	std y+0,R4
	std y+1,R5
	movw R18,R2
	mov R16,R12
	xcall _DelFDT
	mov R10,R16
;             }
;         }
	xjmp L148
L147:
;         else 
;         {
;             return PATH_NOT_FIND ;
	ldi R16,14
	xjmp L142
L148:
;         }
;     }
L145:
;     return Rt ;
	mov R16,R10
L142:
	adiw R28,58
	xcall pop_gset4
	.dbline 0 ; func end
	ret
;          Drive -> R12
;           Disk -> R12,R13
;      ClusIndex -> y+0
;             Rt -> R10
;           Path -> R12,R13
	.even
_ChangeDir::
	xcall push_gset4
	movw R12,R16
	sbiw R28,4
; }
; 
; /*********************************************************************************************************
; ** 函数名称: ChangeDir
; ** 功能描述: 改变当前目录
; ** 输   入: Path:路径名
; ** 输   出: RETURN_OK:成功
; **           其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetDirClusIndex,GetDiskInfo
; ** 作   者: 陈明计
; ** 日   期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人:
; ** 日   期:
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U ChangeDir(char *Path)
; {
;     INT32U ClusIndex ;
;     INT8U Rt,Drive ;
;     Disk_Info *Disk ;
;     
;     Rt=PATH_NOT_FIND ;
	ldi R24,14
	mov R10,R24
;     ClusIndex=GetDirClusIndex(Path);
	movw R16,R12
	xcall _GetDirClusIndex
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
;     if(ClusIndex!=BAD_CLUS)
	ldi R20,247
	ldi R21,255
	ldi R22,255
	ldi R23,15
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq L155
;     {
;         Drive=GetDrive(Path);
	movw R16,R12
	xcall _GetDrive
;         Disk=GetDiskInfo(Drive);
	xcall _GetDiskInfo
	movw R12,R16
;         Rt=NOT_FIND_DISK ;
	clr R10
	inc R10
;         if(Disk!=NULL)
	cpi R16,0
	cpc R16,R17
	breq L157
X9:
;         {
;             Rt=RETURN_OK ;
	clr R10
;             Disk->PathClusIndex=ClusIndex ;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R12
	std z+36,R2
	std z+37,R3
	std z+38,R4
	std z+39,R5
;         }
L157:
;     }
L155:
;     return Rt ;
	mov R16,R10
L154:
	adiw R28,4
	xcall pop_gset4
	.dbline 0 ; func end
	ret
;             cp -> R20,R21
;            Str -> R16,R17
	.even
_strupr::
	xcall push_gset1
; }
; 
; 
; char *strupr(char *Str)
; {
;     char *cp;
;     cp = Str;
	movw R20,R16
	xjmp L161
L160:
;     
;     while (*cp != 0)
;     {
;         if (*cp >= 'a' && *cp <= 'z' )
	movw R30,R20
	ldd R2,z+0
	clr R3
	mov R24,R2
	cpi R24,97
	brlo L163
	ldi R24,122
	cp R24,R2
	brlo L163
;         {
;             *cp -=  'a' - 'A';
	ldd R24,z+0
	subi R24,32
	std z+0,R24
;         }
L163:
	subi R20,255  ; offset = 1
	sbci R21,255
L161:
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L160
;         cp++;
;     }
;     return Str;
L159:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_CurrentDrive:
	.blkb 1
	.area data(ram, con, rel)
L51:
	.blkb 2
	.area idata
	.byte 46,0
	.area data(ram, con, rel)

⌨️ 快捷键说明

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