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

📄 file.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 5 页
字号:
	ldd R4,z+27
	ldd R5,z+28
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R14
	ldd R6,z+2
	clr R7
	clr R8
	clr R9
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R2
	movw R18,R4
	xcall empy32u
	movw R2,R16
	movw R4,R18
	movw R30,R14
	ldd R6,z+28
	ldd R7,z+29
	ldd R8,z+30
	ldd R9,z+31
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	movw R30,R28
	ldd R6,z+12
	ldd R7,z+13
	ldd R8,z+14
	ldd R9,z+15
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	movw R30,R28
	std z+8,R2
	std z+9,R3
	std z+10,R4
	std z+11,R5
;                 DiskInfo->DataStartSec+i ;
;                 Rt=SECTOR_READ_ERR ;
	ldi R24,5
	std y+16,R24
;                 /* 打开扇区 */
;                 Buf=OpenSec(fp->Drive,SecIndex);
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R30,R12
	ldd R16,z+12
	xcall _OpenSec
	movw R10,R16
;                 if(Buf!=NULL)
	cpi R16,0
	cpc R16,R17
	brne X47
	xjmp L198
X47:
X39:
;                 {
;                     /* 读取扇区数据 */
;                     if(ReadSec(fp->Drive,SecIndex)==RETURN_OK)
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R30,R12
	ldd R16,z+12
	xcall _ReadSec
	tst R16
	breq X48
	xjmp L200
X48:
;                     {
;                         /* 读取数据 */
;                         *Ch=Buf[j];
	movw R30,R28
	push R26
	push R27
	ldd R26,z+4
	ldd R27,z+5
	movw R30,R26
	pop R27
	pop R26
	add R30,R10
	adc R31,R11
	ldd R2,z+0
	ldd R30,y+27
	ldd R31,y+28
	std z+0,R2
;                         /* 调整文件指针 */
;                         fp->Offset++;
	movw R24,R12
	adiw R24,29
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R24
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	std z+0,R4
	std z+1,R5
	std z+2,R6
	std z+3,R7
;                         j++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+4,R2
	std z+5,R3
	std z+6,R4
	std z+7,R5
;                         if(j>=DiskInfo->BytsPerSec)
	movw R30,R14
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X49
	xjmp L202
X49:
;                         {
;                             i++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+12,R2
	std z+13,R3
	std z+14,R4
	std z+15,R5
;                             if(i>=DiskInfo->SecPerClus)
	movw R30,R14
	ldd R2,z+2
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+12
	ldd R7,z+13
	ldd R8,z+14
	ldd R9,z+15
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlo L204
;                             {
;                                 fp->Clus=FATGetNextClus(fp->Drive,fp->Clus);
	movw R24,R12
	adiw R24,25
	movw R30,R24
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	std y+0,R6
	std y+1,R7
	movw R18,R4
	movw R30,R12
	ldd R16,z+12
	push R24
	push R25
	xcall _FATGetNextClus
	pop R31
	pop R30
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
;                             }
L204:
;                         }
L202:
;                         Rt=RETURN_OK ;
	clr R0
	std y+16,R0
;                     }
L200:
;                     /* 关闭扇区 */
;                     CloseSec(fp->Drive,SecIndex);
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R30,R12
	ldd R16,z+12
	xcall _CloseSec
;                 }
L198:
;             }
L196:
;         }
L194:
;     }
L183:
L181:
;     return Rt ;
	ldd R16,y+16
L180:
	adiw R28,17
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
;           temp -> R10,R11
;              i -> y+0
;         Handle -> R12
;           Size -> y+14
;            Buf -> R14,R15
	.even
_FileRead::
	st -y,r19
	st -y,r18
	xcall push_gset5
	movw R14,R16
	sbiw R28,4
	ldd R12,y+18
; }
; 
; /*********************************************************************************************************
; ** 函数名称: FileRead
; ** 功能描述: 读取文件
; ** 输   入: Buf:保存读回的数据
; **           Size:要读的字节数
; **           Handle:文件句柄
; ** 输   出: 实际读到的字节数
; ** 全局变量: 无
; ** 调用模块: 无
; ** 作   者: 陈明计
; ** 日   期: 2003年6月5日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人:
; ** 日   期:
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT32U FileRead(void *Buf,INT32U Size,HANDLE Handle)
; {
;     INT8U *temp ;
;     INT32U i ;
;     
;     temp=(INT8U*)Buf ;
	movw R10,R14
;     for(i=0;i<Size;i++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L210
L207:
;     {
;         if(FileGetCh(temp,Handle)!=RETURN_OK)
	mov R18,R12
	movw R16,R10
	xcall _FileGetCh
	tst R16
	breq L211
;         {
;             break ;
	xjmp L209
L211:
	movw R24,R10
	adiw R24,1
	movw R10,R24
L208:
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L210:
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X50
	xjmp L207
X50:
L209:
;         }
;         temp++;
;     }
;     return i ;
	movw R30,R28
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
L206:
	adiw R28,4
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
;            Buf -> R14,R15
;              i -> y+10
;       SecIndex -> y+6
;              j -> y+2
;       DiskInfo -> R14,R15
;             Rt -> R10
;             fp -> R12,R13
;         Handle -> R14
;             Ch -> y+24
	.even
_FilePutCh::
	xcall push_arg4
	xcall push_gset5
	mov R14,R18
	sbiw R28,14
; }
; 
; /*********************************************************************************************************
; ** 函数名称: FilePutCh
; ** 功能描述: 写一个字节到文件
; ** 输   入: Ch:要写的数据
; **           Handle:文件句柄
; ** 输   出: RETURN_OK:成功
; **           其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: 无
; ** 作   者: 陈明计
; ** 日   期: 2003年6月5日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U FilePutCh(INT8U Ch,HANDLE Handle)
; {
;     INT32U i,j,SecIndex ;
;     MY_FILE *fp ;
;     Disk_Info *DiskInfo ;
;     INT8U  Rt ;
;     INT8U *Buf ;
;     
;     Rt=PARAMETER_ERR ;
	ldi R24,255
	mov R10,R24
;     fp=FileInfo+Handle ;
	ldi R16,33
	mov R17,R14
	muls R16,R17
	movw R12,R0
	ldi R24,<_FileInfo
	ldi R25,>_FileInfo
	add R12,R24
	adc R13,R25
;     
;     if(Handle>=0&&Handle<MAX_OPEN_FILES)/* Handle是否有效 */
	cpi R17,0
	brge X53
	xjmp L214
X53:
	cpi R17,3
	brlt X54
	xjmp L214
X54:
;     if(((fp->Flags)&FILE_FLAGS_WRITE)!=0)/* 对应的打开文件信息表是否已使用 */
	movw R30,R12
	ldd R2,z+0
	sbrs R2,1
	rjmp L216
;     {
;         Rt=FILE_EOF ;
	ldi R24,17
	mov R10,R24
;         if(fp->Offset<=fp->FileSize)
	ldd R2,z+17
	ldd R3,z+18
	ldd R4,z+19
	ldd R5,z+20
	movw R30,R12
	ldd R6,z+29
	ldd R7,z+30
	ldd R8,z+31
	ldd R9,z+32
	cp R2,R6
	cpc R3,R7
	cpc R4,R8
	cpc R5,R9
	brsh X55
	xjmp L218
X55:
;         {
;             Rt=NOT_FIND_DISK ;
	clr R10
	inc R10
;             
;             DiskInfo=GetDiskInfo(fp->Drive);/* 获取文件所在逻辑盘信息 */
	movw R30,R12
	ldd R16,z+12
	xcall _GetDiskInfo
	movw R14,R16
;             if(DiskInfo!=NULL)
	cpi R16,0
	cpc R16,R17
	brne X56
	xjmp L220
X56:
X51:
;             {
;                 /* 调整文件指针 */
;                 j=(fp->Offset)%(DiskInfo->SecPerClus*DiskInfo->BytsPerSec);
	movw R30,R14
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	movw R30,R14
	ldd R6,z+2
	clr R7
	clr R8
	clr R9
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall empy32u
	movw R30,R12
	ldd R2,z+29
	ldd R3,z+30
	ldd R4,z+31
	ldd R5,z+32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall mod32u
	movw R30,R28
	std z+2,R16
	std z+3,R17
	std z+4,R18
	std z+5,R19
;                 
;                 if(j==0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq X57
	xjmp L222
X57:
;                 {
;                     if(fp->Offset<fp->FileSize)
	movw R30,R12
	ldd R2,z+17
	ldd R3,z+18
	ldd R4,z+19
	ldd R5,z+20
	movw R30,R12
	ldd R6,z+29
	ldd R7,z+30
	ldd R8,z+31
	ldd R9,z+32
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh L224
;                     {
;                         fp->Clus=FATGetNextClus(fp->Drive,fp->Clus);
	movw R24,R12
	adiw R24,25
	movw R30,R24
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	std y+0,R6
	std y+1,R7
	movw R18,R4
	movw R30,R12
	ldd R16,z+12
	push R24
	push R25
	xcall _FATGetNextClus
	pop R31
	pop R30
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
;                     }
	xjmp L225
L224:
;                     else 
;                     {
;                         i=FATAddClus(fp->Drive,fp->Clus);
	movw R30,R12
	ldd R2,z+25
	ldd R3,z+26
	ldd R4,z+27
	ldd R5,z+28
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R30,R12
	ldd R16,z+12
	xcall _FATAddClus
	movw R30,R28
	std z+10,R16
	std z+11,R17
	std z+12,R18
	std z+13,R19
;                         if(i>=BAD_CLUS)
	ldi R20,247
	ldi R21,255
	ldi R22,255
	ldi R23,15
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L226
;                         {
;                             return DISK_FULL ;
	ldi R16,2
	xjmp L213
L226:
;                         }
;                         fp->Clus=i ;
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	movw R30,R12
	std z+25,R2
	std z+26,R3
	std z+27,R4
	std z+28,R5
;                         if(fp->FstClus==EMPTY_CLUS)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R12
	ldd R2,z+21
	ldd R3,z+22
	ldd R4,z+23
	ldd R5,z+24
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L228
;                         {
;                             fp->FstClus=i ;
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	movw R30,R12
	std z+21,R2
	std z+22,R3
	std z+23,R4
	std z+24,R5
;                         }
L228:
;                     }
L225:
;                 }
L222:
;                 
;                 /* 计算数据所在扇区 */
;                 i=j/DiskInfo->BytsPerSec ;
	movw R30,R14
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3

⌨️ 快捷键说明

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