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

📄 fdt.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 5 页
字号:
	tst R16
	breq L143
;         {
;             break ;
	xjmp L142
L143:
;         }
;         
;         if(TempFDT.Name[0]==EMPTY_FDT)
	ldd R2,y+8
	tst R2
	brne L145
;         {
;             temp=NOT_FIND_FDT ;
	ldi R24,7
	mov R10,R24
;             break ;
	xjmp L142
L145:
;         }
;         if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
	ldd R2,y+19
	sbrc R2,3
	rjmp L147
;         if(FileName[0]==TempFDT.Name[0])
	ldd R2,y+8
	movw R30,R12
	ldd R3,z+0
	cp R3,R2
	breq X37
	xjmp L150
X37:
;         if(FileName[1]==TempFDT.Name[1])
	ldd R2,y+9
	ldd R3,z+1
	cp R3,R2
	breq X38
	xjmp L152
X38:
;         if(FileName[2]==TempFDT.Name[2])
	ldd R2,y+10
	movw R30,R12
	ldd R3,z+2
	cp R3,R2
	breq X39
	xjmp L155
X39:
;         if(FileName[3]==TempFDT.Name[3])
	ldd R2,y+11
	movw R30,R12
	ldd R3,z+3
	cp R3,R2
	breq X40
	xjmp L158
X40:
;         if(FileName[4]==TempFDT.Name[4])
	ldd R2,y+12
	movw R30,R12
	ldd R3,z+4
	cp R3,R2
	breq X41
	xjmp L161
X41:
;         if(FileName[5]==TempFDT.Name[5])
	ldd R2,y+13
	movw R30,R12
	ldd R3,z+5
	cp R3,R2
	breq X42
	xjmp L164
X42:
;         if(FileName[6]==TempFDT.Name[6])
	ldd R2,y+14
	movw R30,R12
	ldd R3,z+6
	cp R3,R2
	breq X43
	xjmp L167
X43:
;         if(FileName[7]==TempFDT.Name[7])
	ldd R2,y+15
	movw R30,R12
	ldd R3,z+7
	cp R3,R2
	breq X44
	xjmp L170
X44:
;         if(FileName[8]==TempFDT.Name[8])
	ldd R2,y+16
	movw R30,R12
	ldd R3,z+8
	cp R3,R2
	brne L173
;         if(FileName[9]==TempFDT.Name[9])
	ldd R2,y+17
	movw R30,R12
	ldd R3,z+9
	cp R3,R2
	brne L176
;         if(FileName[10]==TempFDT.Name[10])
	ldd R2,y+18
	movw R30,R12
	ldd R3,z+10
	cp R3,R2
	brne L179
;         {
;             TempFDT.Name[0]=DEL_FDT ;
	ldi R24,229
	std y+8,R24
;             temp=SetFDTInfo(Drive,ClusIndex,i,&TempFDT);
	movw R24,R28
	adiw R24,8
	std y+7,R25
	std y+6,R24
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	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,R14
	xcall _SetFDTInfo
	mov R10,R16
;             break ;
	xjmp L142
L179:
L176:
L173:
L170:
L167:
L164:
L161:
L158:
L155:
L152:
L150:
L147:
	ldi R20,1
	ldi R21,0
	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
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+40,R2
	std z+41,R3
	std z+42,R4
	std z+43,R5
L141:
	xjmp L140
L142:
;         }
;         i++;
;     }
;     if(FileName[0]==ESC_FDT)
	movw R30,R12
	ldd R24,z+0
	cpi R24,5
	brne L182
;     {
;         FileName[0]=DEL_FDT ;
	ldi R24,229
	std z+0,R24
;     }
L182:
;     return temp ;
	mov R16,R10
L137:
	adiw R28,44
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
;              i -> y+40
;           temp -> R10
;        TempFDT -> y+8
;        FDTData -> R12,R13
;      ClusIndex -> y+54
;          Drive -> R14
	.even
_ChangeFDT::
	st -y,r19
	st -y,r18
	xcall push_gset5
	mov R14,R16
	sbiw R28,44
	ldd R12,y+58
	ldd R13,y+59
; }
; 
; /*********************************************************************************************************
; ** 函数名称: ChangeFDT
; ** 功能描述: 改变指定目录指定文件(目录)的属性
; **
; ** 输 入: Rt:存储返回信息的指针
; **        Drive:驱动器号
; **        ClusIndex:目录首簇号
; **        FileName:文件(目录)名
; ** 输 出: RETURN_OK:成功
; **        其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修改人:
; ** 日 期:
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U ChangeFDT(INT8U Drive,INT32U ClusIndex,FDT *FDTData)
; {
;     INT32U i ;
;     INT8U temp ;
;     FDT TempFDT ;
;     
;     i=0 ;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+40,R20
	std z+41,R21
	std z+42,R22
	std z+43,R23
;     if(FDTData->Name[0]==DEL_FDT)
	movw R30,R12
	ldd R24,z+0
	cpi R24,229
	breq X45
	xjmp L188
X45:
;     {
;         FDTData->Name[0]=ESC_FDT ;
	ldi R24,5
	std z+0,R24
;     }
	xjmp L188
L187:
;     while(1)
;     {
;         temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	movw R30,R28
	ldd R2,z+54
	ldd R3,z+55
	ldd R4,z+56
	ldd R5,z+57
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	mov R18,R14
	movw R16,R28
	subi R16,248  ; offset = 8
	sbci R17,255
	xcall _GetFDTInfo
	mov R10,R16
;         if(temp!=RETURN_OK)
	tst R16
	breq L190
;         {
;             break ;
	xjmp L189
L190:
;         }
;         
;         if(TempFDT.Name[0]==EMPTY_FDT)
	ldd R2,y+8
	tst R2
	brne L192
;         {
;             temp=NOT_FIND_FDT ;
	ldi R24,7
	mov R10,R24
;             break ;
	xjmp L189
L192:
;         }
;         if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
	ldd R2,y+19
	sbrc R2,3
	rjmp L194
;         if(FDTData->Name[0]==TempFDT.Name[0])
	ldd R2,y+8
	movw R30,R12
	ldd R3,z+0
	cp R3,R2
	breq X46
	xjmp L197
X46:
;         if(FDTData->Name[1]==TempFDT.Name[1])
	ldd R2,y+9
	ldd R3,z+1
	cp R3,R2
	breq X47
	xjmp L199
X47:
;         if(FDTData->Name[2]==TempFDT.Name[2])
	ldd R2,y+10
	movw R30,R12
	ldd R3,z+2
	cp R3,R2
	breq X48
	xjmp L202
X48:
;         if(FDTData->Name[3]==TempFDT.Name[3])
	ldd R2,y+11
	movw R30,R12
	ldd R3,z+3
	cp R3,R2
	breq X49
	xjmp L205
X49:
;         if(FDTData->Name[4]==TempFDT.Name[4])
	ldd R2,y+12
	movw R30,R12
	ldd R3,z+4
	cp R3,R2
	breq X50
	xjmp L208
X50:
;         if(FDTData->Name[5]==TempFDT.Name[5])
	ldd R2,y+13
	movw R30,R12
	ldd R3,z+5
	cp R3,R2
	breq X51
	xjmp L211
X51:
;         if(FDTData->Name[6]==TempFDT.Name[6])
	ldd R2,y+14
	movw R30,R12
	ldd R3,z+6
	cp R3,R2
	breq X52
	xjmp L214
X52:
;         if(FDTData->Name[7]==TempFDT.Name[7])
	ldd R2,y+15
	movw R30,R12
	ldd R3,z+7
	cp R3,R2
	breq X53
	xjmp L217
X53:
;         if(FDTData->Name[8]==TempFDT.Name[8])
	ldd R2,y+16
	movw R30,R12
	ldd R3,z+8
	cp R3,R2
	brne L220
;         if(FDTData->Name[9]==TempFDT.Name[9])
	ldd R2,y+17
	movw R30,R12
	ldd R3,z+9
	cp R3,R2
	brne L223
;         if(FDTData->Name[10]==TempFDT.Name[10])
	ldd R2,y+18
	movw R30,R12
	ldd R3,z+10
	cp R3,R2
	brne L226
;         {
;             temp=SetFDTInfo(Drive,ClusIndex,i,FDTData);
	std y+7,R13
	std y+6,R12
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	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,R14
	xcall _SetFDTInfo
	mov R10,R16
;             break ;
	xjmp L189
L226:
L223:
L220:
L217:
L214:
L211:
L208:
L205:
L202:
L199:
L197:
L194:
	ldi R20,1
	ldi R21,0
	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
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+40,R2
	std z+41,R3
	std z+42,R4
	std z+43,R5
L188:
	xjmp L187
L189:
;         }
;         i++;
;     }
;     if(FDTData->Name[0]==ESC_FDT)
	movw R30,R12
	ldd R24,z+0
	cpi R24,5
	brne L229
;     {
;         FDTData->Name[0]=DEL_FDT ;
	ldi R24,229
	std z+0,R24
;     }
L229:
;     return temp ;
	mov R16,R10
L184:
	adiw R28,44
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
;           Disk -> R12,R13
;              i -> y+40
;           temp -> R12
;        TempFDT -> y+8
;      ClusIndex -> y+52
;          Drive -> R10
	.even
_DirIsEmpty::
	st -y,r19
	st -y,r18
	xcall push_gset4
	mov R10,R16
	sbiw R28,44
; }
; 
; /*********************************************************************************************************
; ** 函数名称: DirIsEmpty
; ** 功能描述:
; **
; ** 输 入: Drive:驱动器号
; **        ClusIndex:目录首簇号
; ** 输 出: DIR_EMPTY:空
; **        DIR_NOT_EMPTY:不空
; **        其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修改人: 陈明计
; ** 日 期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U DirIsEmpty(INT8U Drive,INT32U ClusIndex)
; {
;     INT32U i ;
;     FDT TempFDT ;
;     INT8U temp ;
;     Disk_Info*Disk ;
;     
;     
;     if(ClusIndex==EMPTY_CLUS)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+52
	ldd R3,z+53
	ldd R4,z+54
	ldd R5,z+55
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L232
;     {
;         return DIR_NOT_EMPTY ;
	ldi R16,13
	xjmp L231
L232:
;     }
;     /* 判断是否是fat32 的根目录 */
;     Disk=GetDiskInfo(Drive);
	mov R16,R10
	xcall _GetDiskInfo
	movw R12,R16
;     if(Disk==NULL)
	cpi R16,0
	cpc R16,R17
	brne L234
X54:
;     {
;         return NOT_FIND_DISK ;
	ldi R16,1
	xjmp L231
L234:
;     }
;     if(Disk->FATType==FAT32)
	movw R30,R12
	ldd R24,z+1
	cpi R24,2
	brne L236
;     if(ClusIndex==Disk->RootDirTable)
	movw R30,R12
	ldd R2,z+20
	ldd R3,z+21
	ldd R4,z+22
	ldd R5,z+23
	movw R30,R28
	ldd R6,z+52
	ldd R7,z+53
	ldd R8,z+54
	ldd R9,z+55
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brne L238
;     {
;         return DIR_NOT_EMPTY ;
	ldi R16,13
	xjmp L231
L238:
L236:
;     }
;     
;     i=2 ;
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+40,R20
	std z+41,R21
	std z+42,R22
	std z+43,R23
	xjmp L241
L240:
;     while(1)
;     {
;         temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	movw R30,R28
	ldd R2,z+52
	ldd R3,z+53
	ldd R4,z+54
	ldd R5,z+55
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	mov R18,R10
	movw R16,R28
	subi R16,248  ; offset = 8
	sbci R17,255
	xcall _GetFDTInfo
	mov R12,R16
;         if(temp!=RETURN_OK)
	tst R16
	breq L243
;         {
;             return temp ;
	xjmp L231
L243:
;         }
;         
;         if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
	ldd R2,y+19
	sbrc R2,3
	rjmp L245
;         if(TempFDT.Name[0]!=DEL_FDT)
	ldd R24,y+8
	cpi R24,229
	breq L248
;         {
;             break ;
	xjmp L242
L248:
L245:
	ldi R20,1
	ldi R21,0
	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
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+40,R2
	std z+41,R3
	std z+42,R4
	std z+43,R5
L241:
	xjmp L240
L242:
;         }
;         i++;
;     }
;     if(TempFDT.Name[0]==EMPTY_FDT)
	ldd R2,y+8
	tst R2
	brne L250
;     {
;         return DIR_EMPTY ;
	ldi R16,12
	xjmp L231
L250:
;     }
;     else 
;     {
;         return DIR_NOT_EMPTY ;
	ldi R16,13
L231:
	adiw R28,44
	xcall pop_gset4
	adiw R28,2
	.dbline 0 ; func end
	ret
;              i -> y+40
;          temp1 -> y+8
;           temp -> R10
;       FileName -> R12,R13
;      ClusIndex -> y+54
;          Drive -> R14
	.even
_FDTIsLie::
	st -y,r19
	st -y,r18
	xcall push_gset5
	mov R14,R16
	sbiw R28,44
	ldd R12,y+58
	ldd R13,y+59
;     }
; }
; 
; /*********************************************************************************************************
; ** 函数名称: FDTIsLie
; ** 功能描述: 在指定目录查看指定文件(目录)是否存在
; **
; ** 输 入: Drive:驱动器号
; **        ClusIndex:目录首簇号
; **        FileName:文件(目录)名
; ** 输 出: RETURN_OK:成功
; **        其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetDiskInfo,GetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------

⌨️ 快捷键说明

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