📄 hpi32.lst
字号:
C51 COMPILER V7.07 HPI32 07/13/2007 21:38:26 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE HPI32
OBJECT MODULE PLACED IN D:\HEX\HPI32.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HPI32.C BROWSE DEBUG OBJECTEXTEND OBJECT(D:\HEX\HPI32.obj)
stmt level source
1 #include "common.h"
2 #include "TPBULK.H"
3 #include "HPI.H"
4 #include "HAL.H"
5 #include "Fat.h"
6 #include "Fat32.h"
7 #include "HPI32.H"
8
9 extern FLAGS bdata bFlags;
10 extern unsigned char xdata DBUF[BUFFER_LENGTH];
11 //////////////////////////////////////////
12 extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
13 extern SYS_INFO_BLOCK xdata DeviceInfo;
14 extern FILE_INFO xdata ThisFile;
15
16 extern Command_Def xdata Command;
17 extern Response_Def xdata Response;
18
19 unsigned long xdata DirStartCluster32,NowCluster32;
20 extern unsigned long xdata NowSector;
21 extern ShowFileName_Def xdata ShowFileName[MaxLFNum]; //long file struct
22 /////////////////////////////////////////////
23
24 unsigned char UartHandler32(void)
25 {
26 1 Response.Result=0;Response.len=0;
27 1 switch(Command.CLass)
28 1 {
29 2 case 0x00: //List
30 2 Response.Result=List32();
31 2 break;
32 2 case 0x01: //Open File
33 2 Response.Result=OpenFile32(Command.Parameter);
34 2 break;
35 2 case 0x02: //Read File
36 2 Response.Result=ReadFile32(Command.len,UARTBUF);
37 2 break;
38 2 case 0x03: //Set Pointer
39 2 Response.Result=SetFilePointer32(Command.len);
40 2 break;
41 2 case 0x04: //Great File
42 2 Response.Result=OpenFile32(Command.Parameter);
43 2 if(Response.Result)
44 2 {
45 3 Response.Result=SetFilePointer32(ThisFile.LengthInByte);
46 3 }
47 2 else
48 2 Response.Result=CreateFile32(Command.len,Command.Parameter,UARTBUF);
49 2 break;
50 2 case 0x05: //Write File
51 2 Response.Result=WriteFile32(Command.len,UARTBUF);
52 2 break;
53 2 case 0x06: //Remove File
54 2 ThisFile.bFileOpen=0;
55 2 Response.Result=RemoveFile32(Command.Parameter);
C51 COMPILER V7.07 HPI32 07/13/2007 21:38:26 PAGE 2
56 2 break;
57 2 case 0x07: //Get Space
58 2 Response.Result=GetCapacity32();
59 2 break;
60 2 case 0x08: //DetectDisk
61 2 if(bFlags.bits.SLAVE_IS_ATTACHED)
62 2 Response.Result=1;
63 2 break;
64 2 case 0x09: //Great Dir
65 2 Response.Result=DownDir32(Command.Parameter);
66 2 if(!Response.Result)
67 2 Response.Result=CreateDir32(Command.len,Command.Parameter,UARTBUF);
68 2 break;
69 2 case 0x0a: //Down Dir
70 2 Response.Result=DownDir32(Command.Parameter);
71 2 break;
72 2 case 0x0b: //Up Dir
73 2 Response.Result=UpDir32();
74 2 break;
75 2 case 0x0c: //Up RootDir
76 2 Response.Result=UpRootDir32();
77 2 break;
78 2 }
79 1
80 1 UartSendRsp();
81 1 ///////////////////////////////
82 1 return TRUE;
83 1 }
84
85 unsigned char List32(void)
86 {
87 1 unsigned int item,i;
88 1 unsigned char k,bstop,sector;
89 1 unsigned char Lcount,Ncount,base;
90 1
91 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
92 1 return FALSE;
93 1 item=0;
94 1 bstop=0;
95 1 ////////////////////////////////////
96 1 Lcount=0;
97 1 for(i=0;i<MaxLFNum;i++)
98 1 {
99 2 ShowFileName[i].LongName[0]=0x00;
100 2 ShowFileName[i].LongName[1]=0x00;
101 2 }
102 1 //////////////////////////////////////////////////////////////////
103 1 NowCluster32=DirStartCluster32; //
104 1 do
105 1 {
106 2 NowSector=FirstSectorofCluster32(NowCluster32);//根据文件开始簇号计算文件的逻辑扇区号
107 2 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
108 2 {
109 3 if(!RBC_Read(NowSector+sector,1,DBUF)) //读一个扇区数据
110 3 return FALSE;
111 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32) //读出本扇区的文件目录表
112 3 {
113 4 if(DBUF[i]==0x00)
114 4 {bstop=1;break;} //未使用
115 4 else if(DBUF[i]==0xE5)
116 4 continue; //该文件被删除
117 4 else
C51 COMPILER V7.07 HPI32 07/13/2007 21:38:26 PAGE 3
118 4 {
119 5 for(k=0;k<32;k++) //保存文件目录
120 5 UARTBUF[item*32+k]=DBUF[i+k];
121 5 item=item+1; //目录数累计
122 5 /////////////////////////////////
123 5 if(DBUF[i+11]==0x0F) //长文件名判断
124 5 { //是长文件名
125 6 base=((DBUF[i]&0x1F)-1)*26; //计算该字符在长文件名中的长度《(DBUF[i]&0x1F)-1)》为顺序号,每段26个
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -